Chromium Code Reviews| Index: cc/resources/tile_manager.cc |
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
| index 7fa2e3ee07bc6ed4f4b1e7170288d1bf45a80800..46824f303b0b42d8451af6e481d424b38fd4bc88 100644 |
| --- a/cc/resources/tile_manager.cc |
| +++ b/cc/resources/tile_manager.cc |
| @@ -243,7 +243,10 @@ TileManager::TileManager( |
| ready_to_activate_check_notifier_( |
| task_runner_.get(), |
| base::Bind(&TileManager::CheckIfReadyToActivate, |
| - base::Unretained(this))) { |
| + base::Unretained(this))), |
| + ready_to_draw_check_notifier_(task_runner_.get(), |
| + base::Bind(&TileManager::CheckIfReadyToDraw, |
| + base::Unretained(this))) { |
| rasterizer_->SetClient(this); |
| } |
| @@ -385,6 +388,15 @@ void TileManager::DidFinishRunningTasks(TaskSet task_set) { |
| return; |
| } |
| + if (task_set == REQUIRED_FOR_DRAW) { |
|
brianderson
2014/10/24 01:34:04
Can a task_set be both required for draw and requi
ernstm
2014/10/24 04:54:20
We get separate DidFinishRunningTasks notification
|
| + TRACE_EVENT1("cc", |
| + "TileManager::DidFinishRunningTasks", |
| + "task_set", |
| + "REQUIRED_FOR_DRAW"); |
| + ready_to_draw_check_notifier_.Schedule(); |
| + return; |
| + } |
| + |
| if (task_set == REQUIRED_FOR_ACTIVATION) { |
| TRACE_EVENT1("cc", |
| "TileManager::DidFinishRunningTasks", |
| @@ -688,6 +700,8 @@ void TileManager::ScheduleTasks( |
| TaskSetCollection task_sets; |
| if (tile->required_for_activation()) |
| task_sets.set(REQUIRED_FOR_ACTIVATION); |
| + if (tile->required_for_draw()) |
| + task_sets.set(REQUIRED_FOR_DRAW); |
| task_sets.set(ALL); |
| raster_queue_.items.push_back( |
| RasterTaskQueue::Item(mts.raster_task.get(), task_sets)); |
| @@ -867,6 +881,19 @@ bool TileManager::IsReadyToActivate() const { |
| return true; |
| } |
| +bool TileManager::IsReadyToDraw() const { |
| + const std::vector<PictureLayerImpl*>& layers = client_->GetPictureLayers(); |
| + |
| + for (std::vector<PictureLayerImpl*>::const_iterator it = layers.begin(); |
| + it != layers.end(); |
| + ++it) { |
| + if (!(*it)->AllTilesRequiredForDrawAreReadyToDraw()) |
| + return false; |
| + } |
| + |
| + return true; |
| +} |
| + |
| void TileManager::CheckIfReadyToActivate() { |
| TRACE_EVENT0("cc", "TileManager::CheckIfReadyToActivate"); |
| @@ -877,6 +904,16 @@ void TileManager::CheckIfReadyToActivate() { |
| client_->NotifyReadyToActivate(); |
| } |
| +void TileManager::CheckIfReadyToDraw() { |
| + TRACE_EVENT0("cc", "TileManager::CheckIfReadyToDraw"); |
| + |
| + rasterizer_->CheckForCompletedTasks(); |
| + did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| + |
| + if (IsReadyToDraw()) |
| + client_->NotifyReadyToDraw(); |
| +} |
| + |
| TileManager::MemoryUsage::MemoryUsage() : memory_bytes_(0), resource_count_(0) { |
| } |