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); |
} |