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 f7613856351ab366ca22483de47a74c169122694..faad7c76f8257b565fde083d739e58ddd07891ae 100644 |
--- a/cc/raster/tile_task_worker_pool_unittest.cc |
+++ b/cc/raster/tile_task_worker_pool_unittest.cc |
@@ -51,16 +51,16 @@ 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, |
+ scoped_ptr<RasterBuffer> raster_buffer, |
ImageDecodeTask::Vector* dependencies) |
: RasterTask(dependencies), |
resource_(resource), |
- reply_(reply), |
+ raster_buffer_(std::move(raster_buffer)), |
raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {} |
// Overridden from Task: |
@@ -71,23 +71,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: |
+ friend class TileTaskWorkerPoolTest; |
const Resource* resource_; |
- const Reply reply_; |
scoped_ptr<RasterBuffer> raster_buffer_; |
scoped_refptr<RasterSource> raster_source_; |
@@ -97,10 +86,11 @@ class TestRasterTaskImpl : public RasterTask { |
class BlockingTestRasterTaskImpl : public TestRasterTaskImpl { |
public: |
BlockingTestRasterTaskImpl(const Resource* resource, |
- const Reply& reply, |
+ scoped_ptr<RasterBuffer> raster_buffer, |
base::Lock* lock, |
ImageDecodeTask::Vector* dependencies) |
- : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {} |
+ : TestRasterTaskImpl(resource, std::move(raster_buffer), dependencies), |
+ lock_(lock) {} |
// Overridden from Task: |
void RunOnWorkerThread() override { |
@@ -176,17 +166,30 @@ class TileTaskWorkerPoolTest |
void TearDown() override { |
tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckForCompletedTasks(); |
} |
void AllTileTasksFinished() { |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckForCompletedTasks(); |
base::MessageLoop::current()->QuitWhenIdle(); |
} |
+ void CheckForCompletedTasks() { |
+ Task::Vector completed_tasks; |
+ tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks( |
+ &completed_tasks); |
+ |
+ for (auto task : completed_tasks) { |
+ TestRasterTaskImpl* raster_task = |
+ static_cast<TestRasterTaskImpl*>(task.get()); |
+ CompleteRasterTask(0, !raster_task->HasFinishedRunning()); |
+ static_cast<TileTask*>(task.get())->DidComplete(); |
+ } |
+ } |
+ |
void RunMessageLoopUntilAllTasksHaveCompleted() { |
task_graph_runner_.RunUntilIdle(); |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckForCompletedTasks(); |
} |
void ScheduleTasks() { |
@@ -211,11 +214,12 @@ class TileTaskWorkerPoolTest |
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)); |
+ TileTaskClient* client = |
+ reinterpret_cast<TileTaskClient*>(tile_task_worker_pool_.get()); |
+ scoped_ptr<RasterBuffer> raster_buffer = |
+ client->AcquireBufferForRaster(const_resource, 0, 0); |
+ tasks_.push_back(new TestRasterTaskImpl(const_resource, |
+ std::move(raster_buffer), &empty)); |
} |
void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); } |
@@ -230,11 +234,12 @@ class TileTaskWorkerPoolTest |
const Resource* const_resource = resource.get(); |
ImageDecodeTask::Vector empty; |
+ TileTaskClient* client = |
+ reinterpret_cast<TileTaskClient*>(tile_task_worker_pool_.get()); |
+ scoped_ptr<RasterBuffer> raster_buffer = |
+ client->AcquireBufferForRaster(const_resource, 0, 0); |
tasks_.push_back(new BlockingTestRasterTaskImpl( |
- const_resource, |
- base::Bind(&TileTaskWorkerPoolTest::OnTaskCompleted, |
- base::Unretained(this), base::Passed(&resource), id), |
- lock, &empty)); |
+ const_resource, std::move(raster_buffer), lock, &empty)); |
} |
const std::vector<RasterTaskResult>& completed_tasks() const { |
@@ -268,10 +273,7 @@ class TileTaskWorkerPoolTest |
output_surface_.get(), &shared_bitmap_manager_, nullptr); |
} |
- void OnTaskCompleted( |
- scoped_ptr<ScopedResource> resource, |
- unsigned id, |
- bool was_canceled) { |
+ void CompleteRasterTask(unsigned id, bool was_canceled) { |
RasterTaskResult result; |
result.id = id; |
result.canceled = was_canceled; |