[cc] Migrate ImageController tests to TaskEnvironment.
TaskEnvironment is the recommended primitive to use for tests that post tasks. Change-Id: I6a8a434869acc803d7c3d983d1e4d943f0670710 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3698124 Reviewed-by: Vladimir Levin <vmpstr@chromium.org> Commit-Queue: Francois Pierre Doray <fdoray@chromium.org> Cr-Commit-Position: refs/heads/main@{#1013561}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
a2cc578c7f
commit
a98d038d3f
@ -11,11 +11,12 @@
|
||||
#include "base/callback_helpers.h"
|
||||
#include "base/run_loop.h"
|
||||
#include "base/synchronization/condition_variable.h"
|
||||
#include "base/test/test_simple_task_runner.h"
|
||||
#include "base/task/thread_pool.h"
|
||||
#include "base/threading/sequenced_task_runner_handle.h"
|
||||
#include "base/threading/simple_thread.h"
|
||||
#include "base/threading/thread_checker_impl.h"
|
||||
#include "cc/paint/paint_image_builder.h"
|
||||
#include "cc/test/cc_test_suite.h"
|
||||
#include "cc/test/skia_common.h"
|
||||
#include "cc/test/stub_decode_cache.h"
|
||||
#include "cc/test/test_paint_worklet_input.h"
|
||||
@ -26,78 +27,6 @@
|
||||
namespace cc {
|
||||
namespace {
|
||||
|
||||
class TestWorkerThread : public base::SimpleThread {
|
||||
public:
|
||||
TestWorkerThread()
|
||||
: base::SimpleThread("test_worker_thread"), condition_(&lock_) {}
|
||||
|
||||
void Run() override {
|
||||
for (;;) {
|
||||
base::OnceClosure task;
|
||||
{
|
||||
base::AutoLock hold(lock_);
|
||||
if (shutdown_)
|
||||
break;
|
||||
|
||||
if (queue_.empty()) {
|
||||
condition_.Wait();
|
||||
continue;
|
||||
}
|
||||
|
||||
task = std::move(queue_.front());
|
||||
queue_.erase(queue_.begin());
|
||||
}
|
||||
std::move(task).Run();
|
||||
}
|
||||
}
|
||||
|
||||
void Shutdown() {
|
||||
base::AutoLock hold(lock_);
|
||||
shutdown_ = true;
|
||||
condition_.Signal();
|
||||
}
|
||||
|
||||
void PostTask(base::OnceClosure task) {
|
||||
base::AutoLock hold(lock_);
|
||||
queue_.push_back(std::move(task));
|
||||
condition_.Signal();
|
||||
}
|
||||
|
||||
private:
|
||||
base::Lock lock_;
|
||||
base::ConditionVariable condition_;
|
||||
std::vector<base::OnceClosure> queue_;
|
||||
bool shutdown_ = false;
|
||||
};
|
||||
|
||||
class WorkerTaskRunner : public base::SequencedTaskRunner {
|
||||
public:
|
||||
WorkerTaskRunner() { thread_.Start(); }
|
||||
|
||||
bool PostNonNestableDelayedTask(const base::Location& from_here,
|
||||
base::OnceClosure task,
|
||||
base::TimeDelta delay) override {
|
||||
return PostDelayedTask(from_here, std::move(task), delay);
|
||||
}
|
||||
|
||||
bool PostDelayedTask(const base::Location& from_here,
|
||||
base::OnceClosure task,
|
||||
base::TimeDelta delay) override {
|
||||
thread_.PostTask(std::move(task));
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RunsTasksInCurrentSequence() const override { return false; }
|
||||
|
||||
protected:
|
||||
~WorkerTaskRunner() override {
|
||||
thread_.Shutdown();
|
||||
thread_.Join();
|
||||
}
|
||||
|
||||
TestWorkerThread thread_;
|
||||
};
|
||||
|
||||
// Image decode cache with introspection!
|
||||
class TestableCache : public StubDecodeCache {
|
||||
public:
|
||||
@ -263,16 +192,16 @@ class ImageControllerTest : public testing::Test {
|
||||
~ImageControllerTest() override = default;
|
||||
|
||||
void SetUp() override {
|
||||
worker_task_runner_ = base::MakeRefCounted<WorkerTaskRunner>();
|
||||
controller_ = std::make_unique<ImageController>(task_runner_.get(),
|
||||
worker_task_runner_);
|
||||
controller_ = std::make_unique<ImageController>(
|
||||
task_runner_,
|
||||
base::ThreadPool::CreateSequencedTaskRunner(base::TaskTraits()));
|
||||
cache_ = TestableCache();
|
||||
controller_->SetImageDecodeCache(&cache_);
|
||||
}
|
||||
|
||||
void TearDown() override {
|
||||
controller_.reset();
|
||||
worker_task_runner_ = nullptr;
|
||||
CCTestSuite::RunUntilIdle();
|
||||
weak_ptr_factory_.InvalidateWeakPtrs();
|
||||
}
|
||||
|
||||
@ -319,7 +248,6 @@ class ImageControllerTest : public testing::Test {
|
||||
|
||||
private:
|
||||
scoped_refptr<base::SequencedTaskRunner> task_runner_;
|
||||
scoped_refptr<WorkerTaskRunner> worker_task_runner_;
|
||||
TestableCache cache_;
|
||||
std::unique_ptr<ImageController> controller_;
|
||||
DrawImage image_;
|
||||
|
Reference in New Issue
Block a user