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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 23796002: cc: Implement deadine scheduling disabled by default (Closed) Base URL: http://git.chromium.org/chromium/src.git@schedReadback4
Patch Set: Fix context lost race conditions Created 7 years, 3 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/trees/layer_tree_host_impl.cc
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 90907d7583f0bf6d624b4dfac18a41c7f934d24b..4a0ce75f5d1e392c89b2a34542015b2a71b79e96 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -1049,10 +1049,15 @@ bool LayerTreeHostImpl::PrepareToDraw(FrameData* frame,
active_tree_->source_frame_number());
if (need_to_update_visible_tiles_before_draw_) {
- DCHECK(tile_manager_);
- if (tile_manager_->UpdateVisibleTiles())
- DidInitializeVisibleTile();
+ if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) {
+ // We do not notify the client that there is a new visible tile
+ // unless the UpdateVisibleTiles was triggered by the client explicitly.
+ // Otherwise, we will get spurious redraws.
+ const bool notify_client = false;
+ DidInitializeVisibleTile(notify_client);
+ }
}
+ need_to_update_visible_tiles_before_draw_ = true;
active_tree_->UpdateDrawProperties();
@@ -1090,6 +1095,11 @@ void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) {
NOTREACHED();
}
+void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() {
+ const bool notify_client = true;
+ DidInitializeVisibleTile(notify_client);
+}
+
void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
const ManagedMemoryPolicy& policy) {
@@ -1136,11 +1146,11 @@ void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy(
manage_tiles_needed_ = true;
}
-void LayerTreeHostImpl::DidInitializeVisibleTile() {
+void LayerTreeHostImpl::DidInitializeVisibleTile(bool notify_client) {
// TODO(reveman): Determine tiles that changed and only damage
// what's necessary.
SetFullRootLayerDamage();
- if (client_)
+ if (client_ && notify_client)
client_->DidInitializeVisibleTileOnImplThread();
}
@@ -1487,11 +1497,12 @@ void LayerTreeHostImpl::CreatePendingTree() {
}
void LayerTreeHostImpl::UpdateVisibleTiles() {
- DCHECK(!client_->IsInsideDraw()) <<
- "Updating visible tiles within a draw may trigger "
- "spurious redraws.";
- if (tile_manager_ && tile_manager_->UpdateVisibleTiles())
- DidInitializeVisibleTile();
+ DCHECK(!client_->IsInsideDraw())
enne (OOO) 2013/09/11 22:30:47 I think this would be cleaner if you just checked
brianderson 2013/09/12 00:12:34 I like your first suggestion and will go with that
+ << "Updating visible tiles within a draw may trigger spurious redraws.";
+ if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) {
+ const bool notify_client = true;
+ DidInitializeVisibleTile(notify_client);
+ }
need_to_update_visible_tiles_before_draw_ = false;
}

Powered by Google App Engine
This is Rietveld 408576698