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

Side by Side Diff: cc/trees/single_thread_proxy.cc

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 months 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
« no previous file with comments | « cc/trees/single_thread_proxy.h ('k') | cc/trees/thread_proxy.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/trace_event/trace_event.h" 8 #include "base/trace_event/trace_event.h"
9 #include "cc/debug/benchmark_instrumentation.h" 9 #include "cc/debug/benchmark_instrumentation.h"
10 #include "cc/debug/devtools_instrumentation.h" 10 #include "cc/debug/devtools_instrumentation.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 DebugScopedSetImplThread impl(this); 75 DebugScopedSetImplThread impl(this);
76 layer_tree_host_impl_->FinishAllRendering(); 76 layer_tree_host_impl_->FinishAllRendering();
77 } 77 }
78 } 78 }
79 79
80 bool SingleThreadProxy::IsStarted() const { 80 bool SingleThreadProxy::IsStarted() const {
81 DCHECK(Proxy::IsMainThread()); 81 DCHECK(Proxy::IsMainThread());
82 return layer_tree_host_impl_; 82 return layer_tree_host_impl_;
83 } 83 }
84 84
85 bool SingleThreadProxy::CommitToActiveTree() const {
86 // With SingleThreadProxy we skip the pending tree and commit directly to the
87 // active tree.
88 return true;
89 }
90
85 void SingleThreadProxy::SetLayerTreeHostClientReady() { 91 void SingleThreadProxy::SetLayerTreeHostClientReady() {
86 TRACE_EVENT0("cc", "SingleThreadProxy::SetLayerTreeHostClientReady"); 92 TRACE_EVENT0("cc", "SingleThreadProxy::SetLayerTreeHostClientReady");
87 // Scheduling is controlled by the embedder in the single thread case, so 93 // Scheduling is controlled by the embedder in the single thread case, so
88 // nothing to do. 94 // nothing to do.
89 DCHECK(Proxy::IsMainThread()); 95 DCHECK(Proxy::IsMainThread());
90 DebugScopedSetImplThread impl(this); 96 DebugScopedSetImplThread impl(this);
91 if (layer_tree_host_->settings().single_thread_proxy_scheduler && 97 if (layer_tree_host_->settings().single_thread_proxy_scheduler &&
92 !scheduler_on_impl_thread_) { 98 !scheduler_on_impl_thread_) {
93 SchedulerSettings scheduler_settings(layer_tree_host_->settings()); 99 SchedulerSettings scheduler_settings(layer_tree_host_->settings());
94 // SingleThreadProxy should run in main thread low latency mode. 100 // SingleThreadProxy should run in main thread low latency mode.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 MainThreadTaskRunner(), 239 MainThreadTaskRunner(),
234 queue_for_commit_.Pass(), 240 queue_for_commit_.Pass(),
235 layer_tree_host_impl_->resource_provider()); 241 layer_tree_host_impl_->resource_provider());
236 update_controller->Finalize(); 242 update_controller->Finalize();
237 243
238 if (layer_tree_host_impl_->EvictedUIResourcesExist()) 244 if (layer_tree_host_impl_->EvictedUIResourcesExist())
239 layer_tree_host_->RecreateUIResources(); 245 layer_tree_host_->RecreateUIResources();
240 246
241 layer_tree_host_->FinishCommitOnImplThread(layer_tree_host_impl_.get()); 247 layer_tree_host_->FinishCommitOnImplThread(layer_tree_host_impl_.get());
242 248
243 layer_tree_host_impl_->CommitComplete();
244
245 #if DCHECK_IS_ON() 249 #if DCHECK_IS_ON()
246 // In the single-threaded case, the scale and scroll deltas should never be 250 // In the single-threaded case, the scale and scroll deltas should never be
247 // touched on the impl layer tree. 251 // touched on the impl layer tree.
248 scoped_ptr<ScrollAndScaleSet> scroll_info = 252 scoped_ptr<ScrollAndScaleSet> scroll_info =
249 layer_tree_host_impl_->ProcessScrollDeltas(); 253 layer_tree_host_impl_->ProcessScrollDeltas();
250 DCHECK(!scroll_info->scrolls.size()); 254 DCHECK(!scroll_info->scrolls.size());
251 DCHECK_EQ(1.f, scroll_info->page_scale_delta); 255 DCHECK_EQ(1.f, scroll_info->page_scale_delta);
252 #endif 256 #endif
253 }
254 257
255 if (layer_tree_host_->settings().impl_side_painting) { 258 if (layer_tree_host_->settings().impl_side_painting) {
256 // TODO(enne): just commit directly to the active tree. 259 // Commit goes directly to the active tree, but we need to synchronously
257 // 260 // "activate" the tree still during commit to satisfy any potential
258 // Synchronously activate during commit to satisfy any potential 261 // SetNextCommitWaitsForActivation calls. Unfortunately, the tree
259 // SetNextCommitWaitsForActivation calls. Unfortunately, the tree 262 // might not be ready to draw, so DidActivateSyncTree must set
260 // might not be ready to draw, so DidActivateSyncTree must set 263 // the flag to force the tree to not draw until textures are ready.
261 // the flag to force the tree to not draw until textures are ready. 264 NotifyReadyToActivate();
262 NotifyReadyToActivate(); 265 } else {
263 } else { 266 CommitComplete();
264 CommitComplete(); 267 }
265 } 268 }
266 } 269 }
267 270
268 void SingleThreadProxy::CommitComplete() { 271 void SingleThreadProxy::CommitComplete() {
269 DCHECK(!layer_tree_host_impl_->pending_tree()) 272 DCHECK(!layer_tree_host_impl_->pending_tree())
270 << "Activation is expected to have synchronously occurred by now."; 273 << "Activation is expected to have synchronously occurred by now.";
271 DCHECK(commit_blocking_task_runner_); 274 DCHECK(commit_blocking_task_runner_);
272 275
276 // Notify commit complete on the impl side after activate to satisfy any
277 // SetNextCommitWaitsForActivation calls.
278 layer_tree_host_impl_->CommitComplete();
279
273 DebugScopedSetMainThread main(this); 280 DebugScopedSetMainThread main(this);
274 commit_blocking_task_runner_.reset(); 281 commit_blocking_task_runner_.reset();
275 layer_tree_host_->CommitComplete(); 282 layer_tree_host_->CommitComplete();
276 layer_tree_host_->DidBeginMainFrame(); 283 layer_tree_host_->DidBeginMainFrame();
277 timing_history_.DidCommit(); 284 timing_history_.DidCommit();
278 285
279 next_frame_is_newly_committed_frame_ = true; 286 next_frame_is_newly_committed_frame_ = true;
280 } 287 }
281 288
282 void SingleThreadProxy::SetNeedsCommit() { 289 void SingleThreadProxy::SetNeedsCommit() {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 return contents_texture_manager->ReduceMemoryOnImplThread( 433 return contents_texture_manager->ReduceMemoryOnImplThread(
427 limit_bytes, priority_cutoff, resource_provider); 434 limit_bytes, priority_cutoff, resource_provider);
428 } 435 }
429 436
430 bool SingleThreadProxy::IsInsideDraw() { return inside_draw_; } 437 bool SingleThreadProxy::IsInsideDraw() { return inside_draw_; }
431 438
432 void SingleThreadProxy::DidActivateSyncTree() { 439 void SingleThreadProxy::DidActivateSyncTree() {
433 // Non-impl-side painting finishes commit in DoCommit. Impl-side painting 440 // Non-impl-side painting finishes commit in DoCommit. Impl-side painting
434 // defers until here to simulate SetNextCommitWaitsForActivation. 441 // defers until here to simulate SetNextCommitWaitsForActivation.
435 if (layer_tree_host_impl_->settings().impl_side_painting) { 442 if (layer_tree_host_impl_->settings().impl_side_painting) {
436 // This is required because NotifyReadyToActivate gets called when 443 // This is required because NotifyReadyToActivate gets called immediately
437 // the pending tree is not actually ready in the SingleThreadProxy. 444 // after commit since single thread commits directly to the active tree.
438 layer_tree_host_impl_->SetRequiresHighResToDraw(); 445 layer_tree_host_impl_->SetRequiresHighResToDraw();
439 446
440 // Synchronously call to CommitComplete. Resetting 447 // Synchronously call to CommitComplete. Resetting
441 // |commit_blocking_task_runner| would make sure all tasks posted during 448 // |commit_blocking_task_runner| would make sure all tasks posted during
442 // commit/activation before CommitComplete. 449 // commit/activation before CommitComplete.
443 CommitComplete(); 450 CommitComplete();
444 } 451 }
445 452
446 timing_history_.DidActivateSyncTree(); 453 timing_history_.DidActivateSyncTree();
447 } 454 }
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 LayerTreeHostImpl::FrameData frame; 542 LayerTreeHostImpl::FrameData frame;
536 DoComposite(frame_begin_time, &frame); 543 DoComposite(frame_begin_time, &frame);
537 544
538 // DoComposite could abort, but because this is a synchronous composite 545 // DoComposite could abort, but because this is a synchronous composite
539 // another draw will never be scheduled, so break remaining promises. 546 // another draw will never be scheduled, so break remaining promises.
540 layer_tree_host_impl_->active_tree()->BreakSwapPromises( 547 layer_tree_host_impl_->active_tree()->BreakSwapPromises(
541 SwapPromise::SWAP_FAILS); 548 SwapPromise::SWAP_FAILS);
542 } 549 }
543 } 550 }
544 551
545 void SingleThreadProxy::AsValueInto(base::debug::TracedValue* state) const { 552 void SingleThreadProxy::AsValueInto(
553 base::trace_event::TracedValue* state) const {
546 // The following line casts away const modifiers because it is just 554 // The following line casts away const modifiers because it is just
547 // setting debug state. We still want the AsValue() function and its 555 // setting debug state. We still want the AsValue() function and its
548 // call chain to be const throughout. 556 // call chain to be const throughout.
549 DebugScopedSetImplThread impl(const_cast<SingleThreadProxy*>(this)); 557 DebugScopedSetImplThread impl(const_cast<SingleThreadProxy*>(this));
550 558
551 state->BeginDictionary("layer_tree_host_impl"); 559 state->BeginDictionary("layer_tree_host_impl");
552 layer_tree_host_impl_->AsValueInto(state); 560 layer_tree_host_impl_->AsValueInto(state);
553 state->EndDictionary(); 561 state->EndDictionary();
554 } 562 }
555 563
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 826
819 void SingleThreadProxy::DidBeginImplFrameDeadline() { 827 void SingleThreadProxy::DidBeginImplFrameDeadline() {
820 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame(); 828 layer_tree_host_impl_->ResetCurrentBeginFrameArgsForNextFrame();
821 } 829 }
822 830
823 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { 831 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) {
824 layer_tree_host_->SendBeginFramesToChildren(args); 832 layer_tree_host_->SendBeginFramesToChildren(args);
825 } 833 }
826 834
827 } // namespace cc 835 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/single_thread_proxy.h ('k') | cc/trees/thread_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698