Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index f913c1f1a011994ba0baa9674946907a784e7e26..4a079f3d47bddd43b4e5184b6d255ff2ae2367bf 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -82,6 +82,12 @@ bool SingleThreadProxy::IsStarted() const { |
return layer_tree_host_impl_; |
} |
+bool SingleThreadProxy::CommitToActiveTree() const { |
+ // With SingleThreadProxy we skip the pending tree and commit directly to the |
+ // active tree. |
+ return true; |
+} |
+ |
void SingleThreadProxy::SetLayerTreeHostClientReady() { |
TRACE_EVENT0("cc", "SingleThreadProxy::SetLayerTreeHostClientReady"); |
// Scheduling is controlled by the embedder in the single thread case, so |
@@ -240,8 +246,6 @@ void SingleThreadProxy::DoCommit() { |
layer_tree_host_->FinishCommitOnImplThread(layer_tree_host_impl_.get()); |
- layer_tree_host_impl_->CommitComplete(); |
- |
#if DCHECK_IS_ON() |
// In the single-threaded case, the scale and scroll deltas should never be |
// touched on the impl layer tree. |
@@ -250,18 +254,17 @@ void SingleThreadProxy::DoCommit() { |
DCHECK(!scroll_info->scrolls.size()); |
DCHECK_EQ(1.f, scroll_info->page_scale_delta); |
#endif |
- } |
- if (layer_tree_host_->settings().impl_side_painting) { |
- // TODO(enne): just commit directly to the active tree. |
- // |
- // Synchronously activate during commit to satisfy any potential |
- // SetNextCommitWaitsForActivation calls. Unfortunately, the tree |
- // might not be ready to draw, so DidActivateSyncTree must set |
- // the flag to force the tree to not draw until textures are ready. |
- NotifyReadyToActivate(); |
- } else { |
- CommitComplete(); |
+ if (layer_tree_host_->settings().impl_side_painting) { |
+ // Commit goes directly to the active tree, but we need to synchronously |
+ // "activate" the tree still during commit to satisfy any potential |
+ // SetNextCommitWaitsForActivation calls. Unfortunately, the tree |
+ // might not be ready to draw, so DidActivateSyncTree must set |
+ // the flag to force the tree to not draw until textures are ready. |
+ NotifyReadyToActivate(); |
+ } else { |
+ CommitComplete(); |
+ } |
} |
} |
@@ -270,6 +273,10 @@ void SingleThreadProxy::CommitComplete() { |
<< "Activation is expected to have synchronously occurred by now."; |
DCHECK(commit_blocking_task_runner_); |
+ // Notify commit complete on the impl side after activate to satisfy any |
+ // SetNextCommitWaitsForActivation calls. |
+ layer_tree_host_impl_->CommitComplete(); |
+ |
DebugScopedSetMainThread main(this); |
commit_blocking_task_runner_.reset(); |
layer_tree_host_->CommitComplete(); |
@@ -433,8 +440,8 @@ void SingleThreadProxy::DidActivateSyncTree() { |
// Non-impl-side painting finishes commit in DoCommit. Impl-side painting |
// defers until here to simulate SetNextCommitWaitsForActivation. |
if (layer_tree_host_impl_->settings().impl_side_painting) { |
- // This is required because NotifyReadyToActivate gets called when |
- // the pending tree is not actually ready in the SingleThreadProxy. |
+ // This is required because NotifyReadyToActivate gets called immediately |
+ // after commit since single thread commits directly to the active tree. |
layer_tree_host_impl_->SetRequiresHighResToDraw(); |
// Synchronously call to CommitComplete. Resetting |
@@ -542,7 +549,8 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
} |
} |
-void SingleThreadProxy::AsValueInto(base::debug::TracedValue* state) const { |
+void SingleThreadProxy::AsValueInto( |
+ base::trace_event::TracedValue* state) const { |
// The following line casts away const modifiers because it is just |
// setting debug state. We still want the AsValue() function and its |
// call chain to be const throughout. |