Index: cc/raster/tile_task_worker_pool_perftest.cc |
diff --git a/cc/raster/tile_task_worker_pool_perftest.cc b/cc/raster/tile_task_worker_pool_perftest.cc |
index d2c7e6c50f29d24207040c3b2ea0200831f99c6a..acbc2b34e30565eeb17fd9074858b5a1d54000dd 100644 |
--- a/cc/raster/tile_task_worker_pool_perftest.cc |
+++ b/cc/raster/tile_task_worker_pool_perftest.cc |
@@ -126,15 +126,11 @@ static const int kTimeCheckInterval = 10; |
class PerfImageDecodeTaskImpl : public ImageDecodeTask { |
public: |
- PerfImageDecodeTaskImpl() {} |
+ PerfImageDecodeTaskImpl() { SetTaskTypeId(kImageDecodeTaskTypeId); } |
// Overridden from Task: |
void RunOnWorkerThread() override {} |
- // Overridden from TileTask: |
- void ScheduleOnOriginThread(TileTaskClient* client) override {} |
- void CompleteOnOriginThread(TileTaskClient* client) override { Reset(); } |
- |
void Reset() { |
did_run_ = false; |
did_complete_ = false; |
@@ -150,22 +146,17 @@ class PerfImageDecodeTaskImpl : public ImageDecodeTask { |
class PerfRasterTaskImpl : public RasterTask { |
public: |
PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource, |
+ std::unique_ptr<RasterBuffer> raster_buffer, |
ImageDecodeTask::Vector* dependencies) |
- : RasterTask(dependencies), resource_(std::move(resource)) {} |
+ : RasterTask(dependencies), |
+ resource_(std::move(resource)), |
+ raster_buffer_(std::move(raster_buffer)) { |
+ SetTaskTypeId(kRasterTaskTypeId); |
+ } |
// Overridden from Task: |
void RunOnWorkerThread() override {} |
- // Overridden from TileTask: |
- void ScheduleOnOriginThread(TileTaskClient* client) override { |
- // No tile ids are given to support partial updates. |
- raster_buffer_ = client->AcquireBufferForRaster(resource_.get(), 0, 0); |
- } |
- void CompleteOnOriginThread(TileTaskClient* client) override { |
- client->ReleaseBufferForRaster(std::move(raster_buffer_)); |
- Reset(); |
- } |
- |
void Reset() { |
did_run_ = false; |
did_complete_ = false; |
@@ -181,7 +172,7 @@ class PerfRasterTaskImpl : public RasterTask { |
DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl); |
}; |
-class TileTaskWorkerPoolPerfTestBase { |
+class TileTaskWorkerPoolPerfTestBase : public TileTaskClient { |
public: |
typedef std::vector<scoped_refptr<RasterTask>> RasterTaskVector; |
@@ -195,6 +186,15 @@ class TileTaskWorkerPoolPerfTestBase { |
base::TimeDelta::FromMilliseconds(kTimeLimitMillis), |
kTimeCheckInterval) {} |
+ // Overridden from TileTaskClient: |
+ scoped_ptr<RasterBuffer> AcquireBufferForRaster( |
+ const Resource* resource, |
+ uint64_t resource_content_id, |
+ uint64_t previous_content_id) override { |
+ return nullptr; |
+ } |
+ void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override {} |
+ |
void CreateImageDecodeTasks(unsigned num_image_decode_tasks, |
ImageDecodeTask::Vector* image_decode_tasks) { |
for (unsigned i = 0; i < num_image_decode_tasks; ++i) |
@@ -211,10 +211,11 @@ class TileTaskWorkerPoolPerfTestBase { |
ScopedResource::Create(resource_provider_.get())); |
resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE, |
RGBA_8888); |
- |
ImageDecodeTask::Vector dependencies = image_decode_tasks; |
- raster_tasks->push_back( |
- new PerfRasterTaskImpl(std::move(resource), &dependencies)); |
+ scoped_ptr<RasterBuffer> raster_buffer = |
+ AcquireBufferForRaster(resource.get(), 0, 0); |
+ raster_tasks->push_back(new PerfRasterTaskImpl( |
+ std::move(resource), std::move(raster_buffer), &dependencies)); |
} |
} |
@@ -286,9 +287,27 @@ class TileTaskWorkerPoolPerfTest |
DCHECK(tile_task_worker_pool_); |
} |
+ |
+ void CheckAndProcessCompletedTasks() { |
+ Task::Vector completed_tasks; |
+ tile_task_worker_pool_->AsTileTaskRunner()->CollectCompletedTasks( |
+ &completed_tasks); |
+ |
+ for (auto task : completed_tasks) { |
+ if (task->GetTaskTypeId() == kImageDecodeTaskTypeId) { |
+ static_cast<PerfImageDecodeTaskImpl*>(task.get())->Reset(); |
+ } else if (task->GetTaskTypeId() == kRasterTaskTypeId) { |
+ static_cast<PerfRasterTaskImpl*>(task.get())->Reset(); |
+ } |
+ |
+ static_cast<TileTask*>(task.get())->DidComplete(); |
+ } |
+ completed_tasks.clear(); |
+ } |
+ |
void TearDown() override { |
tile_task_worker_pool_->AsTileTaskRunner()->Shutdown(); |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckAndProcessCompletedTasks(); |
} |
void RunMessageLoopUntilAllTasksHaveCompleted() { |
@@ -312,7 +331,7 @@ class TileTaskWorkerPoolPerfTest |
graph.Reset(); |
BuildTileTaskGraph(&graph, raster_tasks); |
tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckAndProcessCompletedTasks(); |
timer_.NextLap(); |
} while (!timer_.HasTimeLimitExpired()); |
@@ -345,7 +364,7 @@ class TileTaskWorkerPoolPerfTest |
graph.Reset(); |
BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]); |
tile_task_worker_pool_->AsTileTaskRunner()->ScheduleTasks(&graph); |
- tile_task_worker_pool_->AsTileTaskRunner()->CheckForCompletedTasks(); |
+ CheckAndProcessCompletedTasks(); |
++count; |
timer_.NextLap(); |
} while (!timer_.HasTimeLimitExpired()); |