| Index: cc/raster/raster_buffer_provider_perftest.cc
|
| diff --git a/cc/raster/raster_buffer_provider_perftest.cc b/cc/raster/raster_buffer_provider_perftest.cc
|
| index 662a24a595839036942293ed686e0024410e6dd5..fdfd8ecb9aef2d9664ea706565a5379427f08cfe 100644
|
| --- a/cc/raster/raster_buffer_provider_perftest.cc
|
| +++ b/cc/raster/raster_buffer_provider_perftest.cc
|
| @@ -123,22 +123,11 @@ static const int kTimeCheckInterval = 10;
|
|
|
| class PerfImageDecodeTaskImpl : public TileTask {
|
| public:
|
| - PerfImageDecodeTaskImpl() : TileTask(true) {}
|
| + PerfImageDecodeTaskImpl() : TileTask(TileTask::Type::IMAGE_DECODE, true) {}
|
|
|
| // Overridden from Task:
|
| void RunOnWorkerThread() override {}
|
|
|
| - // Overridden from TileTask:
|
| - void ScheduleOnOriginThread(RasterBufferProvider* provider) override {}
|
| - void CompleteOnOriginThread(RasterBufferProvider* provider) override {
|
| - Reset();
|
| - }
|
| -
|
| - void Reset() {
|
| - state().Reset();
|
| - did_complete_ = false;
|
| - }
|
| -
|
| protected:
|
| ~PerfImageDecodeTaskImpl() override {}
|
|
|
| @@ -149,31 +138,21 @@ class PerfImageDecodeTaskImpl : public TileTask {
|
| class PerfRasterTaskImpl : public TileTask {
|
| public:
|
| PerfRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
|
| + std::unique_ptr<RasterBuffer> raster_buffer,
|
| TileTask::Vector* dependencies)
|
| - : TileTask(true, dependencies), resource_(std::move(resource)) {}
|
| + : TileTask(TileTask::Type::RASTER, true, dependencies),
|
| + resource_(std::move(resource)),
|
| + raster_buffer_(std::move(raster_buffer)) {}
|
|
|
| // Overridden from Task:
|
| void RunOnWorkerThread() override {}
|
|
|
| - // Overridden from TileTask:
|
| - void ScheduleOnOriginThread(RasterBufferProvider* provider) override {
|
| - // No tile ids are given to support partial updates.
|
| - raster_buffer_ = provider->AcquireBufferForRaster(resource_.get(), 0, 0);
|
| - }
|
| - void CompleteOnOriginThread(RasterBufferProvider* provider) override {
|
| - provider->ReleaseBufferForRaster(std::move(raster_buffer_));
|
| - Reset();
|
| - }
|
| -
|
| - void Reset() {
|
| - state().Reset();
|
| - did_complete_ = false;
|
| - }
|
| -
|
| protected:
|
| ~PerfRasterTaskImpl() override {}
|
|
|
| private:
|
| + friend class RasterBufferProviderPerfTest;
|
| +
|
| std::unique_ptr<ScopedResource> resource_;
|
| std::unique_ptr<RasterBuffer> raster_buffer_;
|
|
|
| @@ -200,7 +179,8 @@ class RasterBufferProviderPerfTestBase {
|
| image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
|
| }
|
|
|
| - void CreateRasterTasks(unsigned num_raster_tasks,
|
| + void CreateRasterTasks(TileTaskManager* tile_task_manager,
|
| + unsigned num_raster_tasks,
|
| const TileTask::Vector& image_decode_tasks,
|
| RasterTaskVector* raster_tasks) {
|
| const gfx::Size size(1, 1);
|
| @@ -211,9 +191,15 @@ class RasterBufferProviderPerfTestBase {
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
|
|
| + // No tile ids are given to support partial updates.
|
| + std::unique_ptr<RasterBuffer> raster_buffer;
|
| + if (tile_task_manager) {
|
| + raster_buffer = tile_task_manager->GetRasterBufferProvider()
|
| + ->AcquireBufferForRaster(resource.get(), 0, 0);
|
| + }
|
| TileTask::Vector dependencies = image_decode_tasks;
|
| - raster_tasks->push_back(
|
| - new PerfRasterTaskImpl(std::move(resource), &dependencies));
|
| + raster_tasks->push_back(new PerfRasterTaskImpl(
|
| + std::move(resource), std::move(raster_buffer), &dependencies));
|
| }
|
| }
|
|
|
| @@ -297,7 +283,7 @@ class RasterBufferProviderPerfTest
|
| }
|
| void TearDown() override {
|
| tile_task_manager_->Shutdown();
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| }
|
|
|
| void RunMessageLoopUntilAllTasksHaveCompleted() {
|
| @@ -311,7 +297,8 @@ class RasterBufferProviderPerfTest
|
| TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| - CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
| + CreateRasterTasks(tile_task_manager_.get(), num_raster_tasks,
|
| + image_decode_tasks, &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
| @@ -321,7 +308,7 @@ class RasterBufferProviderPerfTest
|
| graph.Reset();
|
| BuildTileTaskGraph(&graph, raster_tasks);
|
| tile_task_manager_->ScheduleTasks(&graph);
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
|
|
| @@ -341,8 +328,8 @@ class RasterBufferProviderPerfTest
|
| RasterTaskVector raster_tasks[kNumVersions];
|
| for (size_t i = 0; i < kNumVersions; ++i) {
|
| CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
|
| - CreateRasterTasks(num_raster_tasks, image_decode_tasks[i],
|
| - &raster_tasks[i]);
|
| + CreateRasterTasks(tile_task_manager_.get(), num_raster_tasks,
|
| + image_decode_tasks[i], &raster_tasks[i]);
|
| }
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| @@ -354,7 +341,7 @@ class RasterBufferProviderPerfTest
|
| graph.Reset();
|
| BuildTileTaskGraph(&graph, raster_tasks[count % kNumVersions]);
|
| tile_task_manager_->ScheduleTasks(&graph);
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| ++count;
|
| timer_.NextLap();
|
| } while (!timer_.HasTimeLimitExpired());
|
| @@ -373,7 +360,8 @@ class RasterBufferProviderPerfTest
|
| TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| - CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
| + CreateRasterTasks(tile_task_manager_.get(), num_raster_tasks,
|
| + image_decode_tasks, &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
| @@ -426,6 +414,36 @@ class RasterBufferProviderPerfTest
|
| return std::string();
|
| }
|
|
|
| + void CheckForCompletedTasks() {
|
| + Task::Vector completed_tasks;
|
| + tile_task_manager_->CollectCompletedTasks(&completed_tasks);
|
| +
|
| + for (auto task : completed_tasks) {
|
| + TileTask* tile_task = static_cast<TileTask*>(task.get());
|
| + switch (tile_task->type()) {
|
| + case TileTask::Type::RASTER:
|
| + OnRasterTaskCompleted(tile_task);
|
| + break;
|
| + case TileTask::Type::IMAGE_DECODE:
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| +
|
| + // Instead of calling DidComplete(), call Reset() as same task would be
|
| + // reused as if new.
|
| + task->state().Reset();
|
| + }
|
| +
|
| + completed_tasks.clear();
|
| + }
|
| +
|
| + void OnRasterTaskCompleted(TileTask* task) {
|
| + PerfRasterTaskImpl* raster_task = static_cast<PerfRasterTaskImpl*>(task);
|
| + tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster(
|
| + std::move(raster_task->raster_buffer_));
|
| + }
|
| +
|
| std::unique_ptr<TileTaskManager> tile_task_manager_;
|
| TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
|
| TestSharedBitmapManager shared_bitmap_manager_;
|
| @@ -483,7 +501,8 @@ class RasterBufferProviderCommonPerfTest
|
| TileTask::Vector image_decode_tasks;
|
| RasterTaskVector raster_tasks;
|
| CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
|
| - CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
|
| + CreateRasterTasks(nullptr, num_raster_tasks, image_decode_tasks,
|
| + &raster_tasks);
|
|
|
| // Avoid unnecessary heap allocations by reusing the same graph.
|
| TaskGraph graph;
|
|
|