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

Unified Diff: cc/trees/single_thread_proxy.cc

Issue 337693005: cc: Control defer_commits logic by Scheduler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 1 month 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/single_thread_proxy.cc
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index f15c7ec269256105167466e691e5d94d306d60a4..486260d8476a6978ee9b82ddbf053e0160dc90a6 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -44,7 +44,6 @@ SingleThreadProxy::SingleThreadProxy(
next_frame_is_newly_committed_frame_(false),
inside_draw_(false),
defer_commits_(false),
- commit_was_deferred_(false),
commit_requested_(false),
inside_synchronous_composite_(false),
output_surface_creation_requested_(false),
@@ -300,10 +299,7 @@ void SingleThreadProxy::SetDeferCommits(bool defer_commits) {
TRACE_EVENT_ASYNC_END0("cc", "SingleThreadProxy::SetDeferCommits", this);
defer_commits_ = defer_commits;
- if (!defer_commits_ && commit_was_deferred_) {
- commit_was_deferred_ = false;
- BeginMainFrame();
- }
+ scheduler_on_impl_thread_->SetDeferCommits(defer_commits);
}
bool SingleThreadProxy::CommitRequested() const {
@@ -660,26 +656,25 @@ void SingleThreadProxy::ScheduledActionSendBeginMainFrame() {
}
void SingleThreadProxy::BeginMainFrame() {
- if (defer_commits_) {
- DCHECK(!commit_was_deferred_);
- commit_was_deferred_ = true;
- layer_tree_host_->DidDeferCommit();
- return;
- }
-
// This checker assumes NotifyReadyToCommit in this stack causes a synchronous
// commit.
ScopedAbortRemainingSwapPromises swap_promise_checker(layer_tree_host_);
- if (!layer_tree_host_->visible()) {
+ bool need_to_abort_begin_main_frame = true;
+ if (defer_commits_) {
danakj 2014/11/19 16:31:34 nit: i mildly prefer a few early outs/returns inst
simonhong 2014/11/26 15:52:53 Done.
+ TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommits",
+ TRACE_EVENT_SCOPE_THREAD);
+ layer_tree_host_->DidDeferCommit();
brianderson 2014/11/19 19:55:07 It looks like LTH::DidDeferCommit() is only used b
simonhong 2014/11/26 15:52:53 This change breaks below three tests. * LayerTreeH
brianderson 2014/12/03 02:12:10 The scheduler tests are good, but I think we shoul
+ } else if (!layer_tree_host_->visible()) {
TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD);
- BeginMainFrameAbortedOnImplThread();
- return;
- }
-
- if (layer_tree_host_->output_surface_lost()) {
+ } else if (layer_tree_host_->output_surface_lost()) {
TRACE_EVENT_INSTANT0(
"cc", "EarlyOut_OutputSurfaceLost", TRACE_EVENT_SCOPE_THREAD);
+ } else {
+ need_to_abort_begin_main_frame = false;
+ }
+
+ if (need_to_abort_begin_main_frame) {
BeginMainFrameAbortedOnImplThread();
return;
}

Powered by Google App Engine
This is Rietveld 408576698