| Index: cc/raster/tile_task_worker_pool_unittest.cc
|
| diff --git a/cc/raster/tile_task_worker_pool_unittest.cc b/cc/raster/tile_task_worker_pool_unittest.cc
|
| index 919a88577175eea8e01652d1311733d5090b0471..51c7d67640b9be7d5b0b68194a063201829373d6 100644
|
| --- a/cc/raster/tile_task_worker_pool_unittest.cc
|
| +++ b/cc/raster/tile_task_worker_pool_unittest.cc
|
| @@ -52,17 +52,19 @@ enum TileTaskWorkerPoolType {
|
| TILE_TASK_WORKER_POOL_TYPE_BITMAP
|
| };
|
|
|
| +class TileTaskWorkerPoolTest;
|
| +
|
| class TestRasterTaskImpl : public RasterTask {
|
| public:
|
| - typedef base::Callback<void(bool was_canceled)> Reply;
|
| -
|
| - TestRasterTaskImpl(const Resource* resource,
|
| - const Reply& reply,
|
| + TestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
|
| + std::unique_ptr<RasterBuffer> raster_buffer,
|
| ImageDecodeTask::Vector* dependencies)
|
| : RasterTask(dependencies),
|
| - resource_(resource),
|
| - reply_(reply),
|
| - raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {}
|
| + resource_(std::move(resource)),
|
| + raster_buffer_(std::move(raster_buffer)),
|
| + raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {
|
| + SetTaskTypeId(TASK_TYPE_RASTER);
|
| + }
|
|
|
| // Overridden from Task:
|
| void RunOnWorkerThread() override {
|
| @@ -72,23 +74,12 @@ class TestRasterTaskImpl : public RasterTask {
|
| RasterSource::PlaybackSettings());
|
| }
|
|
|
| - // Overridden from TileTask:
|
| - void ScheduleOnOriginThread(TileTaskClient* client) override {
|
| - // The raster buffer has no tile ids associated with it for partial update,
|
| - // so doesn't need to provide a valid dirty rect.
|
| - raster_buffer_ = client->AcquireBufferForRaster(resource_, 0, 0);
|
| - }
|
| - void CompleteOnOriginThread(TileTaskClient* client) override {
|
| - client->ReleaseBufferForRaster(std::move(raster_buffer_));
|
| - reply_.Run(!HasFinishedRunning());
|
| - }
|
| -
|
| protected:
|
| ~TestRasterTaskImpl() override {}
|
|
|
| private:
|
| - const Resource* resource_;
|
| - const Reply reply_;
|
| + friend class TileTaskWorkerPoolTest;
|
| + std::unique_ptr<ScopedResource> resource_;
|
| std::unique_ptr<RasterBuffer> raster_buffer_;
|
| scoped_refptr<RasterSource> raster_source_;
|
|
|
| @@ -97,11 +88,14 @@ class TestRasterTaskImpl : public RasterTask {
|
|
|
| class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
|
| public:
|
| - BlockingTestRasterTaskImpl(const Resource* resource,
|
| - const Reply& reply,
|
| + BlockingTestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
|
| + std::unique_ptr<RasterBuffer> raster_buffer,
|
| base::Lock* lock,
|
| ImageDecodeTask::Vector* dependencies)
|
| - : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {}
|
| + : TestRasterTaskImpl(std::move(resource),
|
| + std::move(raster_buffer),
|
| + dependencies),
|
| + lock_(lock) {}
|
|
|
| // Overridden from Task:
|
| void RunOnWorkerThread() override {
|
| @@ -177,17 +171,34 @@ class TileTaskWorkerPoolTest
|
|
|
| void TearDown() override {
|
| tile_task_worker_pool_->AsTileTaskRunner()->Shutdown();
|
| - tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| + CheckAndProcessCompletedTasks();
|
| }
|
|
|
| void AllTileTasksFinished() {
|
| - tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| + CheckAndProcessCompletedTasks();
|
| base::MessageLoop::current()->QuitWhenIdle();
|
| }
|
|
|
| + void CheckAndProcessCompletedTasks() {
|
| + Task::Vector completed_tasks;
|
| + tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks(
|
| + &completed_tasks);
|
| +
|
| + for (auto task : completed_tasks) {
|
| + // Don't process image decode tasks as there are no dependencies for
|
| + // raster tasks in the tests.
|
| + if (task->GetTaskTypeId() == TASK_TYPE_RASTER) {
|
| + TestRasterTaskImpl* raster_task =
|
| + static_cast<TestRasterTaskImpl*>(task.get());
|
| + RasterTaskCompleted(0, !raster_task->HasFinishedRunning());
|
| + }
|
| + static_cast<TileTask*>(task.get())->DidComplete();
|
| + }
|
| + }
|
| +
|
| void RunMessageLoopUntilAllTasksHaveCompleted() {
|
| task_graph_runner_.RunUntilIdle();
|
| - tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks();
|
| + CheckAndProcessCompletedTasks();
|
| }
|
|
|
| void ScheduleTasks() {
|
| @@ -209,14 +220,14 @@ class TileTaskWorkerPoolTest
|
| ScopedResource::Create(resource_provider_.get()));
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
| - const Resource* const_resource = resource.get();
|
|
|
| ImageDecodeTask::Vector empty;
|
| - tasks_.push_back(new TestRasterTaskImpl(
|
| - const_resource,
|
| - base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
|
| - base::Unretained(this), base::Passed(&resource), id),
|
| - &empty));
|
| + std::unique_ptr<RasterBuffer> raster_buffer =
|
| + tile_task_worker_pool_->AsTileTaskRunner()
|
| + ->AsTileTaskClient()
|
| + ->AcquireBufferForRaster(resource.get(), 0, 0);
|
| + tasks_.push_back(new TestRasterTaskImpl(std::move(resource),
|
| + std::move(raster_buffer), &empty));
|
| }
|
|
|
| void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
|
| @@ -228,14 +239,15 @@ class TileTaskWorkerPoolTest
|
| ScopedResource::Create(resource_provider_.get()));
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
| - const Resource* const_resource = resource.get();
|
|
|
| ImageDecodeTask::Vector empty;
|
| + std::unique_ptr<RasterBuffer> raster_buffer =
|
| + tile_task_worker_pool_->AsTileTaskRunner()
|
| + ->AsTileTaskClient()
|
| + ->AcquireBufferForRaster(resource.get(), 0, 0);
|
| +
|
| tasks_.push_back(new BlockingTestRasterTaskImpl(
|
| - const_resource,
|
| - base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted,
|
| - base::Unretained(this), base::Passed(&resource), id),
|
| - lock, &empty));
|
| + std::move(resource), std::move(raster_buffer), lock, &empty));
|
| }
|
|
|
| const std::vector<RasterTaskResult>& completed_tasks() const {
|
| @@ -269,9 +281,7 @@ class TileTaskWorkerPoolTest
|
| output_surface_.get(), &shared_bitmap_manager_, nullptr);
|
| }
|
|
|
| - void OnTaskCompleted(std::unique_ptr<ScopedResource> resource,
|
| - unsigned id,
|
| - bool was_canceled) {
|
| + void RasterTaskCompleted(unsigned id, bool was_canceled) {
|
| RasterTaskResult result;
|
| result.id = id;
|
| result.canceled = was_canceled;
|
|
|