| Index: cc/raster/raster_buffer_provider_unittest.cc
|
| diff --git a/cc/raster/raster_buffer_provider_unittest.cc b/cc/raster/raster_buffer_provider_unittest.cc
|
| index 6890dd24d8da4e03a67952a91974d7836a146c2b..30dea8855564065c4046f335b2ad1fd5d6ccdcaa 100644
|
| --- a/cc/raster/raster_buffer_provider_unittest.cc
|
| +++ b/cc/raster/raster_buffer_provider_unittest.cc
|
| @@ -55,12 +55,14 @@ class TestRasterTaskImpl : public TileTask {
|
| public:
|
| typedef base::Callback<void(bool was_canceled)> Reply;
|
|
|
| - TestRasterTaskImpl(const Resource* resource,
|
| - const Reply& reply,
|
| + TestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
|
| + unsigned id,
|
| + std::unique_ptr<RasterBuffer> raster_buffer,
|
| TileTask::Vector* dependencies)
|
| - : TileTask(true, dependencies),
|
| - resource_(resource),
|
| - reply_(reply),
|
| + : TileTask(TileTask::Type::RASTER, true, dependencies),
|
| + resource_(std::move(resource)),
|
| + id_(id),
|
| + raster_buffer_(std::move(raster_buffer)),
|
| raster_source_(FakeRasterSource::CreateFilled(gfx::Size(1, 1))) {}
|
|
|
| // Overridden from Task:
|
| @@ -71,23 +73,14 @@ class TestRasterTaskImpl : public TileTask {
|
| RasterSource::PlaybackSettings());
|
| }
|
|
|
| - // Overridden from TileTask:
|
| - void ScheduleOnOriginThread(RasterBufferProvider* provider) 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_ = provider->AcquireBufferForRaster(resource_, 0, 0);
|
| - }
|
| - void CompleteOnOriginThread(RasterBufferProvider* provider) override {
|
| - provider->ReleaseBufferForRaster(std::move(raster_buffer_));
|
| - reply_.Run(!state().IsFinished());
|
| - }
|
| -
|
| protected:
|
| ~TestRasterTaskImpl() override {}
|
|
|
| private:
|
| - const Resource* resource_;
|
| - const Reply reply_;
|
| + friend class RasterBufferProviderTest;
|
| +
|
| + std::unique_ptr<ScopedResource> resource_;
|
| + unsigned id_;
|
| std::unique_ptr<RasterBuffer> raster_buffer_;
|
| scoped_refptr<RasterSource> raster_source_;
|
|
|
| @@ -96,11 +89,16 @@ class TestRasterTaskImpl : public TileTask {
|
|
|
| class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
|
| public:
|
| - BlockingTestRasterTaskImpl(const Resource* resource,
|
| - const Reply& reply,
|
| + BlockingTestRasterTaskImpl(std::unique_ptr<ScopedResource> resource,
|
| + unsigned id,
|
| + std::unique_ptr<RasterBuffer> raster_buffer,
|
| base::Lock* lock,
|
| TileTask::Vector* dependencies)
|
| - : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {}
|
| + : TestRasterTaskImpl(std::move(resource),
|
| + id,
|
| + std::move(raster_buffer),
|
| + dependencies),
|
| + lock_(lock) {}
|
|
|
| // Overridden from Task:
|
| void RunOnWorkerThread() override {
|
| @@ -175,17 +173,17 @@ class RasterBufferProviderTest
|
|
|
| void TearDown() override {
|
| tile_task_manager_->Shutdown();
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| }
|
|
|
| void AllTileTasksFinished() {
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| base::MessageLoop::current()->QuitWhenIdle();
|
| }
|
|
|
| void RunMessageLoopUntilAllTasksHaveCompleted() {
|
| task_graph_runner_.RunUntilIdle();
|
| - tile_task_manager_->CheckForCompletedTasks();
|
| + CheckForCompletedTasks();
|
| }
|
|
|
| void ScheduleTasks() {
|
| @@ -207,14 +205,15 @@ class RasterBufferProviderTest
|
| ScopedResource::Create(resource_provider_.get()));
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
| - const Resource* const_resource = resource.get();
|
|
|
| + // The raster buffer has no tile ids associated with it for partial update,
|
| + // so doesn't need to provide a valid dirty rect.
|
| + std::unique_ptr<RasterBuffer> raster_buffer =
|
| + tile_task_manager_->GetRasterBufferProvider()->AcquireBufferForRaster(
|
| + resource.get(), 0, 0);
|
| TileTask::Vector empty;
|
| - tasks_.push_back(new TestRasterTaskImpl(
|
| - const_resource,
|
| - base::Bind(&RasterBufferProviderTest::OnTaskCompleted,
|
| - base::Unretained(this), base::Passed(&resource), id),
|
| - &empty));
|
| + tasks_.push_back(new TestRasterTaskImpl(std::move(resource), id,
|
| + std::move(raster_buffer), &empty));
|
| }
|
|
|
| void AppendTask(unsigned id) { AppendTask(id, gfx::Size(1, 1)); }
|
| @@ -226,14 +225,13 @@ class RasterBufferProviderTest
|
| ScopedResource::Create(resource_provider_.get()));
|
| resource->Allocate(size, ResourceProvider::TEXTURE_HINT_IMMUTABLE,
|
| RGBA_8888);
|
| - const Resource* const_resource = resource.get();
|
|
|
| + std::unique_ptr<RasterBuffer> raster_buffer =
|
| + tile_task_manager_->GetRasterBufferProvider()->AcquireBufferForRaster(
|
| + resource.get(), 0, 0);
|
| TileTask::Vector empty;
|
| tasks_.push_back(new BlockingTestRasterTaskImpl(
|
| - const_resource,
|
| - base::Bind(&RasterBufferProviderTest::OnTaskCompleted,
|
| - base::Unretained(this), base::Passed(&resource), id),
|
| - lock, &empty));
|
| + std::move(resource), id, std::move(raster_buffer), lock, &empty));
|
| }
|
|
|
| const std::vector<RasterTaskResult>& completed_tasks() const {
|
| @@ -267,12 +265,33 @@ class RasterBufferProviderTest
|
| output_surface_.get(), &shared_bitmap_manager_, nullptr);
|
| }
|
|
|
| - void OnTaskCompleted(std::unique_ptr<ScopedResource> resource,
|
| - unsigned id,
|
| - bool was_canceled) {
|
| + 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;
|
| + default:
|
| + NOTREACHED();
|
| + }
|
| +
|
| + task->state().DidComplete();
|
| + }
|
| +
|
| + completed_tasks.clear();
|
| + }
|
| +
|
| + void OnRasterTaskCompleted(TileTask* task) {
|
| + TestRasterTaskImpl* raster_task = static_cast<TestRasterTaskImpl*>(task);
|
| + tile_task_manager_->GetRasterBufferProvider()->ReleaseBufferForRaster(
|
| + std::move(raster_task->raster_buffer_));
|
| RasterTaskResult result;
|
| - result.id = id;
|
| - result.canceled = was_canceled;
|
| + result.id = raster_task->id_;
|
| + result.canceled = raster_task->state().IsCanceled();
|
| completed_tasks_.push_back(result);
|
| }
|
|
|
|
|