Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index 920dc15495abdb7be32b0ca26eb5abfb37e9cbbe..db409734a873587bc8fd73b254dea8e368cd6c65 100644 |
--- a/cc/trees/single_thread_proxy.cc |
+++ b/cc/trees/single_thread_proxy.cc |
@@ -45,6 +45,7 @@ SingleThreadProxy::SingleThreadProxy( |
client_(client), |
timing_history_(layer_tree_host->rendering_stats_instrumentation()), |
next_frame_is_newly_committed_frame_(false), |
+ inside_impl_frame_(false), |
inside_draw_(false), |
defer_commits_(false), |
animate_requested_(false), |
@@ -791,6 +792,9 @@ void SingleThreadProxy::SetAuthoritativeVSyncInterval( |
} |
void SingleThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) { |
+ DCHECK(!inside_impl_frame_) |
+ << "WillBeginImplFrame called while already inside an impl frame!"; |
+ inside_impl_frame_ = true; |
layer_tree_host_impl_->WillBeginImplFrame(args); |
} |
@@ -803,17 +807,21 @@ void SingleThreadProxy::ScheduledActionSendBeginMainFrame() { |
// fall on the next. Doing it asynchronously instead matches the semantics of |
// ThreadProxy::SetNeedsCommit where SetNeedsCommit will not cause a |
// synchronous commit. |
+ DCHECK(inside_impl_frame_) |
+ << "BeginMainFrame should only be sent inside a BeginImplFrame"; |
+ const BeginFrameArgs& begin_frame_args = |
+ layer_tree_host_impl_->CurrentBeginFrameArgs(); |
+ |
MainThreadTaskRunner()->PostTask( |
- FROM_HERE, |
- base::Bind(&SingleThreadProxy::BeginMainFrame, |
- weak_factory_.GetWeakPtr())); |
+ FROM_HERE, base::Bind(&SingleThreadProxy::BeginMainFrame, |
+ weak_factory_.GetWeakPtr(), begin_frame_args)); |
} |
void SingleThreadProxy::SendBeginMainFrameNotExpectedSoon() { |
layer_tree_host_->BeginMainFrameNotExpectedSoon(); |
} |
-void SingleThreadProxy::BeginMainFrame() { |
+void SingleThreadProxy::BeginMainFrame(const BeginFrameArgs& begin_frame_args) { |
commit_requested_ = false; |
animate_requested_ = false; |
@@ -849,8 +857,6 @@ void SingleThreadProxy::BeginMainFrame() { |
// a commit here. |
commit_requested_ = true; |
- const BeginFrameArgs& begin_frame_args = |
- layer_tree_host_impl_->CurrentBeginFrameArgs(); |
DoBeginMainFrame(begin_frame_args); |
} |
@@ -969,6 +975,9 @@ base::TimeDelta SingleThreadProxy::CommitToActivateDurationEstimate() { |
void SingleThreadProxy::DidBeginImplFrameDeadline() { |
layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); |
+ DCHECK(inside_impl_frame_) |
+ << "DidBeginImplFrameDeadline called while not inside an impl frame!"; |
+ inside_impl_frame_ = false; |
} |
void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { |