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