Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index db409734a873587bc8fd73b254dea8e368cd6c65..b97b3ce889cb35186764c513476da9d17fbf1215 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -587,6 +587,7 @@ void SingleThreadProxy::OnDrawForOutputSurface() { |
void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
TRACE_EVENT0("cc,benchmark", "SingleThreadProxy::CompositeImmediately"); |
DCHECK(Proxy::IsMainThread()); |
+ DCHECK(!inside_impl_frame_); |
base::AutoReset<bool> inside_composite(&inside_synchronous_composite_, true); |
if (layer_tree_host_->output_surface_lost()) { |
@@ -597,10 +598,19 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
return; |
} |
+ BeginFrameArgs begin_frame_args(BeginFrameArgs::Create( |
+ BEGINFRAME_FROM_HERE, frame_begin_time, base::TimeTicks(), |
+ BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL)); |
+ |
+ // Start the impl frame. |
+ { |
+ DebugScopedSetImplThread impl(this); |
+ WillBeginImplFrame(begin_frame_args); |
+ } |
+ |
+ // Run the "main thread" and get it to commit. |
{ |
- BeginFrameArgs begin_frame_args(BeginFrameArgs::Create( |
- BEGINFRAME_FROM_HERE, frame_begin_time, base::TimeTicks(), |
- BeginFrameArgs::DefaultInterval(), BeginFrameArgs::NORMAL)); |
+ DCHECK(inside_impl_frame_); |
DoBeginMainFrame(begin_frame_args); |
DoCommit(); |
@@ -608,8 +618,9 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
<< "Commit should always succeed and transfer promises."; |
} |
+ // Finish the impl frame. |
{ |
- DebugScopedSetImplThread impl(const_cast<SingleThreadProxy*>(this)); |
+ DebugScopedSetImplThread impl(this); |
if (layer_tree_host_impl_->settings().impl_side_painting) { |
layer_tree_host_impl_->ActivateSyncTree(); |
DCHECK(!layer_tree_host_impl_->active_tree() |
@@ -627,6 +638,8 @@ void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) { |
// another draw will never be scheduled, so break remaining promises. |
layer_tree_host_impl_->active_tree()->BreakSwapPromises( |
SwapPromise::SWAP_FAILS); |
+ |
+ DidBeginImplFrameDeadline(); |
} |
} |
@@ -717,12 +730,6 @@ DrawResult SingleThreadProxy::DoComposite(base::TimeTicks frame_begin_time, |
FROM_HERE_WITH_EXPLICIT_FUNCTION( |
"461509 SingleThreadProxy::DoComposite5")); |
layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); |
- // TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 |
- // is fixed. |
- tracked_objects::ScopedTracker tracking_profile6( |
- FROM_HERE_WITH_EXPLICIT_FUNCTION( |
- "461509 SingleThreadProxy::DoComposite6")); |
- layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); |
// TODO(robliao): Remove ScopedTracker below once https://crbug.com/461509 |
// is fixed. |