Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(892)

Unified Diff: cc/resources/tile_manager.cc

Issue 672283003: cc: ReadyToDraw notifications. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {
}

Powered by Google App Engine
This is Rietveld 408576698