| 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..7301258f38cc6e3e5081c86c41e158b1891d63e0 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(TASK_TYPE_IMAGE_DECODE); }
|
|
|
| // 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(TASK_TYPE_RASTER);
|
| + }
|
|
|
| // 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() == TASK_TYPE_IMAGE_DECODE) {
|
| + static_cast<PerfImageDecodeTaskImpl*>(task.get())->Reset();
|
| + } else if (task->GetTaskTypeId() == TASK_TYPE_RASTER) {
|
| + 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());
|
|
|