Index: cc/trees/single_thread_proxy.cc |
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc |
index b9f6a4849131dfa14431b6f7a0b48dd4fe81fab9..b4fc55dabad3d5550314015d285691b189ab8552 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), |
commit_requested_(false), |
@@ -785,6 +786,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); |
} |
@@ -797,17 +801,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; |
if (defer_commits_) { |
@@ -840,8 +848,6 @@ void SingleThreadProxy::BeginMainFrame() { |
// Prevent new commits from being requested inside DoBeginMainFrame. |
commit_requested_ = true; |
- const BeginFrameArgs& begin_frame_args = |
- layer_tree_host_impl_->CurrentBeginFrameArgs(); |
DoBeginMainFrame(begin_frame_args); |
} |
@@ -960,6 +966,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) { |