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

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 22926024: cc: Control activation from the Scheduler (Closed) Base URL: http://git.chromium.org/chromium/src.git@schedOutputSurface4
Patch Set: Fixes for tests Created 7 years, 4 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 9f664fcc0ee40385784ff1cf74c61cc32fcf5371..6d053e66ada912520870a08fb46c1a99036749e2 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -110,12 +110,8 @@ class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient {
// TODO(enne): This should probably happen post-animate.
if (layer_tree_host_impl_->pending_tree()) {
- layer_tree_host_impl_->ActivatePendingTreeIfNeeded();
-
- if (layer_tree_host_impl_->pending_tree()) {
- layer_tree_host_impl_->pending_tree()->UpdateDrawProperties();
- layer_tree_host_impl_->ManageTiles();
- }
+ layer_tree_host_impl_->pending_tree()->UpdateDrawProperties();
+ layer_tree_host_impl_->ManageTiles();
}
layer_tree_host_impl_->Animate(
@@ -254,7 +250,10 @@ void LayerTreeHostImpl::CommitComplete() {
pending_tree_->set_needs_update_draw_properties();
pending_tree_->UpdateDrawProperties();
// Start working on newly created tiles immediately if needed.
- ManageTiles();
+ if (!manage_tiles_needed_)
+ client_->NotifyReadyToActivate();
+ else
+ ManageTiles();
} else {
active_tree_->set_needs_update_draw_properties();
}
@@ -1085,10 +1084,7 @@ void LayerTreeHostImpl::DidInitializeVisibleTile() {
}
void LayerTreeHostImpl::NotifyReadyToActivate() {
- if (pending_tree_) {
- need_to_update_visible_tiles_before_draw_ = true;
- ActivatePendingTree();
- }
+ client_->NotifyReadyToActivate();
}
bool LayerTreeHostImpl::ShouldClearRootRenderPass() const {
@@ -1433,7 +1429,6 @@ void LayerTreeHostImpl::CreatePendingTree() {
else
pending_tree_ = LayerTreeImpl::create(this);
client_->OnCanDrawStateChanged(CanDraw());
- client_->OnHasPendingTreeStateChanged(pending_tree_);
TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", pending_tree_.get());
TRACE_EVENT_ASYNC_STEP0("cc",
"PendingTree", pending_tree_.get(), "waiting");
@@ -1449,33 +1444,12 @@ void LayerTreeHostImpl::UpdateVisibleTiles() {
need_to_update_visible_tiles_before_draw_ = false;
}
-void LayerTreeHostImpl::ActivatePendingTreeIfNeeded() {
- DCHECK(pending_tree_);
- CHECK(settings_.impl_side_painting);
-
- if (!pending_tree_)
- return;
-
- // The tile manager is usually responsible for notifying activation.
- // If there is no tile manager, then we need to manually activate.
- if (!tile_manager_ || tile_manager_->AreTilesRequiredForActivationReady()) {
enne (OOO) 2013/08/26 21:55:13 Where does this removed !tile_manager logic end up
brianderson 2013/08/26 22:47:25 Good idea. I will add handle the !time_manager cas
brianderson 2013/08/26 23:33:20 In looking at how to implement this test, it seems
- ActivatePendingTree();
- return;
- }
-
- // Manage tiles in case state affecting tile priority has changed.
- ManageTiles();
-
- TRACE_EVENT_ASYNC_STEP1(
- "cc",
- "PendingTree", pending_tree_.get(), "activate",
- "state", TracedValue::FromValue(ActivationStateAsValue().release()));
-}
-
void LayerTreeHostImpl::ActivatePendingTree() {
CHECK(pending_tree_);
TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get());
+ need_to_update_visible_tiles_before_draw_ = true;
+
active_tree_->SetRootLayerScrollOffsetDelegate(NULL);
active_tree_->PushPersistedState(pending_tree_.get());
if (pending_tree_->needs_full_tree_sync()) {
@@ -1504,12 +1478,15 @@ void LayerTreeHostImpl::ActivatePendingTree() {
root_layer_scroll_offset_delegate_);
active_tree_->DidBecomeActive();
+ client_->DidActivatePendingTree();
enne (OOO) 2013/08/26 21:55:13 Why did this move from the end of the function? (J
brianderson 2013/08/26 22:47:25 I did this a long time ago and copied it over, so
+ if (!tree_activation_callback_.is_null())
+ tree_activation_callback_.Run();
+
// Reduce wasted memory now that unlinked resources are guaranteed not
// to be used.
client_->ReduceWastedContentsTextureMemoryOnImplThread();
client_->OnCanDrawStateChanged(CanDraw());
- client_->OnHasPendingTreeStateChanged(pending_tree_);
client_->SetNeedsRedrawOnImplThread();
client_->RenewTreePriority();
@@ -1520,10 +1497,6 @@ void LayerTreeHostImpl::ActivatePendingTree() {
stats.main_stats.paint_time + stats.main_stats.record_time +
stats.impl_stats.rasterize_time_for_now_bins_on_pending_tree);
}
-
- client_->DidActivatePendingTree();
- if (!tree_activation_callback_.is_null())
- tree_activation_callback_.Run();
}
void LayerTreeHostImpl::SetVisible(bool visible) {

Powered by Google App Engine
This is Rietveld 408576698