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

Side by Side 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 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/single_thread_proxy.h" 5 #include "cc/trees/single_thread_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "cc/debug/benchmark_instrumentation.h" 9 #include "cc/debug/benchmark_instrumentation.h"
10 #include "cc/output/context_provider.h" 10 #include "cc/output/context_provider.h"
(...skipping 26 matching lines...) Expand all
37 LayerTreeHostSingleThreadClient* client, 37 LayerTreeHostSingleThreadClient* client,
38 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner, 38 scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
39 scoped_ptr<BeginFrameSource> external_begin_frame_source) 39 scoped_ptr<BeginFrameSource> external_begin_frame_source)
40 : Proxy(main_task_runner, NULL), 40 : Proxy(main_task_runner, NULL),
41 layer_tree_host_(layer_tree_host), 41 layer_tree_host_(layer_tree_host),
42 client_(client), 42 client_(client),
43 timing_history_(layer_tree_host->rendering_stats_instrumentation()), 43 timing_history_(layer_tree_host->rendering_stats_instrumentation()),
44 next_frame_is_newly_committed_frame_(false), 44 next_frame_is_newly_committed_frame_(false),
45 inside_draw_(false), 45 inside_draw_(false),
46 defer_commits_(false), 46 defer_commits_(false),
47 commit_was_deferred_(false),
48 commit_requested_(false), 47 commit_requested_(false),
49 inside_synchronous_composite_(false), 48 inside_synchronous_composite_(false),
50 output_surface_creation_requested_(false), 49 output_surface_creation_requested_(false),
51 external_begin_frame_source_(external_begin_frame_source.Pass()), 50 external_begin_frame_source_(external_begin_frame_source.Pass()),
52 weak_factory_(this) { 51 weak_factory_(this) {
53 TRACE_EVENT0("cc", "SingleThreadProxy::SingleThreadProxy"); 52 TRACE_EVENT0("cc", "SingleThreadProxy::SingleThreadProxy");
54 DCHECK(Proxy::IsMainThread()); 53 DCHECK(Proxy::IsMainThread());
55 DCHECK(layer_tree_host); 54 DCHECK(layer_tree_host);
56 } 55 }
57 56
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 return; 292 return;
294 if (defer_commits_ == defer_commits) 293 if (defer_commits_ == defer_commits)
295 return; 294 return;
296 295
297 if (defer_commits) 296 if (defer_commits)
298 TRACE_EVENT_ASYNC_BEGIN0("cc", "SingleThreadProxy::SetDeferCommits", this); 297 TRACE_EVENT_ASYNC_BEGIN0("cc", "SingleThreadProxy::SetDeferCommits", this);
299 else 298 else
300 TRACE_EVENT_ASYNC_END0("cc", "SingleThreadProxy::SetDeferCommits", this); 299 TRACE_EVENT_ASYNC_END0("cc", "SingleThreadProxy::SetDeferCommits", this);
301 300
302 defer_commits_ = defer_commits; 301 defer_commits_ = defer_commits;
303 if (!defer_commits_ && commit_was_deferred_) { 302 scheduler_on_impl_thread_->SetDeferCommits(defer_commits);
304 commit_was_deferred_ = false; 303
305 BeginMainFrame(); 304 // When defer commit is turned off, we should start new BeginMainFrame to
306 } 305 // handle previous deferred BeginMainFrame.
306 if (!defer_commits)
307 SetNeedsCommit();
307 } 308 }
308 309
309 bool SingleThreadProxy::CommitRequested() const { 310 bool SingleThreadProxy::CommitRequested() const {
310 DCHECK(Proxy::IsMainThread()); 311 DCHECK(Proxy::IsMainThread());
311 return commit_requested_; 312 return commit_requested_;
312 } 313 }
313 314
314 bool SingleThreadProxy::BeginMainFrameRequested() const { 315 bool SingleThreadProxy::BeginMainFrameRequested() const {
315 DCHECK(Proxy::IsMainThread()); 316 DCHECK(Proxy::IsMainThread());
316 // If there is no scheduler, then there can be no pending begin frame, 317 // If there is no scheduler, then there can be no pending begin frame,
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 // ThreadProxy::SetNeedsCommit where SetNeedsCommit will not cause a 654 // ThreadProxy::SetNeedsCommit where SetNeedsCommit will not cause a
654 // synchronous commit. 655 // synchronous commit.
655 MainThreadTaskRunner()->PostTask( 656 MainThreadTaskRunner()->PostTask(
656 FROM_HERE, 657 FROM_HERE,
657 base::Bind(&SingleThreadProxy::BeginMainFrame, 658 base::Bind(&SingleThreadProxy::BeginMainFrame,
658 weak_factory_.GetWeakPtr())); 659 weak_factory_.GetWeakPtr()));
659 } 660 }
660 661
661 void SingleThreadProxy::BeginMainFrame() { 662 void SingleThreadProxy::BeginMainFrame() {
662 if (defer_commits_) { 663 if (defer_commits_) {
663 DCHECK(!commit_was_deferred_); 664 TRACE_EVENT_INSTANT0("cc", "EarlyOut_DeferCommits",
664 commit_was_deferred_ = true; 665 TRACE_EVENT_SCOPE_THREAD);
665 layer_tree_host_->DidDeferCommit(); 666 BeginMainFrameAbortedOnImplThread();
666 return; 667 return;
667 } 668 }
668 669
669 // This checker assumes NotifyReadyToCommit in this stack causes a synchronous 670 // This checker assumes NotifyReadyToCommit in this stack causes a synchronous
670 // commit. 671 // commit.
671 ScopedAbortRemainingSwapPromises swap_promise_checker(layer_tree_host_); 672 ScopedAbortRemainingSwapPromises swap_promise_checker(layer_tree_host_);
672 673
673 if (!layer_tree_host_->visible()) { 674 if (!layer_tree_host_->visible()) {
674 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD); 675 TRACE_EVENT_INSTANT0("cc", "EarlyOut_NotVisible", TRACE_EVENT_SCOPE_THREAD);
675 BeginMainFrameAbortedOnImplThread(); 676 BeginMainFrameAbortedOnImplThread();
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
795 796
796 void SingleThreadProxy::DidBeginImplFrameDeadline() { 797 void SingleThreadProxy::DidBeginImplFrameDeadline() {
797 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); 798 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame();
798 } 799 }
799 800
800 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { 801 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) {
801 layer_tree_host_->SendBeginFramesToChildren(args); 802 layer_tree_host_->SendBeginFramesToChildren(args);
802 } 803 }
803 804
804 } // namespace cc 805 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698