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

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

Issue 267783004: Refactoring the way begin frame sources inside scheduler work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Scheduler tests now pass and the code is cleaner. Created 6 years, 6 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 | Annotate | Revision Log
« 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/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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 void SingleThreadProxy::SetLayerTreeHostClientReady() { 72 void SingleThreadProxy::SetLayerTreeHostClientReady() {
73 TRACE_EVENT0("cc", "SingleThreadProxy::SetLayerTreeHostClientReady"); 73 TRACE_EVENT0("cc", "SingleThreadProxy::SetLayerTreeHostClientReady");
74 // Scheduling is controlled by the embedder in the single thread case, so 74 // Scheduling is controlled by the embedder in the single thread case, so
75 // nothing to do. 75 // nothing to do.
76 } 76 }
77 77
78 void SingleThreadProxy::SetVisible(bool visible) { 78 void SingleThreadProxy::SetVisible(bool visible) {
79 TRACE_EVENT0("cc", "SingleThreadProxy::SetVisible"); 79 TRACE_EVENT0("cc", "SingleThreadProxy::SetVisible");
80 DebugScopedSetImplThread impl(this); 80 DebugScopedSetImplThread impl(this);
81 layer_tree_host_impl_->SetVisible(visible); 81 layer_tree_host_impl_->SetVisible(visible);
82
83 // Changing visibility could change ShouldComposite().
84 UpdateBackgroundAnimateTicking();
85 } 82 }
86 83
87 void SingleThreadProxy::CreateAndInitializeOutputSurface() { 84 void SingleThreadProxy::CreateAndInitializeOutputSurface() {
88 TRACE_EVENT0( 85 TRACE_EVENT0(
89 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface"); 86 "cc", "SingleThreadProxy::CreateAndInitializeOutputSurface");
90 DCHECK(Proxy::IsMainThread()); 87 DCHECK(Proxy::IsMainThread());
91 DCHECK(layer_tree_host_->output_surface_lost()); 88 DCHECK(layer_tree_host_->output_surface_lost());
92 89
93 scoped_ptr<OutputSurface> output_surface = 90 scoped_ptr<OutputSurface> output_surface =
94 layer_tree_host_->CreateOutputSurface(); 91 layer_tree_host_->CreateOutputSurface();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 layer_tree_host_impl_->resource_provider()); 222 layer_tree_host_impl_->resource_provider());
226 layer_tree_host_impl_.reset(); 223 layer_tree_host_impl_.reset();
227 } 224 }
228 layer_tree_host_ = NULL; 225 layer_tree_host_ = NULL;
229 } 226 }
230 227
231 void SingleThreadProxy::OnCanDrawStateChanged(bool can_draw) { 228 void SingleThreadProxy::OnCanDrawStateChanged(bool can_draw) {
232 TRACE_EVENT1( 229 TRACE_EVENT1(
233 "cc", "SingleThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw); 230 "cc", "SingleThreadProxy::OnCanDrawStateChanged", "can_draw", can_draw);
234 DCHECK(Proxy::IsImplThread()); 231 DCHECK(Proxy::IsImplThread());
235 UpdateBackgroundAnimateTicking();
236 } 232 }
237 233
238 void SingleThreadProxy::NotifyReadyToActivate() { 234 void SingleThreadProxy::NotifyReadyToActivate() {
239 // Thread-only feature. 235 // Thread-only feature.
240 NOTREACHED(); 236 NOTREACHED();
241 } 237 }
242 238
243 void SingleThreadProxy::SetNeedsRedrawOnImplThread() { 239 void SingleThreadProxy::SetNeedsRedrawOnImplThread() {
244 client_->ScheduleComposite(); 240 client_->ScheduleComposite();
245 } 241 }
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 401 }
406 } 402 }
407 } 403 }
408 404
409 bool SingleThreadProxy::ShouldComposite() const { 405 bool SingleThreadProxy::ShouldComposite() const {
410 DCHECK(Proxy::IsImplThread()); 406 DCHECK(Proxy::IsImplThread());
411 return layer_tree_host_impl_->visible() && 407 return layer_tree_host_impl_->visible() &&
412 layer_tree_host_impl_->CanDraw(); 408 layer_tree_host_impl_->CanDraw();
413 } 409 }
414 410
415 void SingleThreadProxy::UpdateBackgroundAnimateTicking() {
416 DCHECK(Proxy::IsImplThread());
417 layer_tree_host_impl_->UpdateBackgroundAnimateTicking(
418 !ShouldComposite() && layer_tree_host_impl_->active_tree()->root_layer());
419 }
420
421 bool SingleThreadProxy::DoComposite( 411 bool SingleThreadProxy::DoComposite(
422 base::TimeTicks frame_begin_time, 412 base::TimeTicks frame_begin_time,
423 LayerTreeHostImpl::FrameData* frame) { 413 LayerTreeHostImpl::FrameData* frame) {
424 TRACE_EVENT0("cc", "SingleThreadProxy::DoComposite"); 414 TRACE_EVENT0("cc", "SingleThreadProxy::DoComposite");
425 DCHECK(!layer_tree_host_->output_surface_lost()); 415 DCHECK(!layer_tree_host_->output_surface_lost());
426 416
427 bool lost_output_surface = false; 417 bool lost_output_surface = false;
428 { 418 {
429 DebugScopedSetImplThread impl(this); 419 DebugScopedSetImplThread impl(this);
430 base::AutoReset<bool> mark_inside(&inside_draw_, true); 420 base::AutoReset<bool> mark_inside(&inside_draw_, true);
431 421
432 // We guard PrepareToDraw() with CanDraw() because it always returns a valid 422 // We guard PrepareToDraw() with CanDraw() because it always returns a valid
433 // frame, so can only be used when such a frame is possible. Since 423 // frame, so can only be used when such a frame is possible. Since
434 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on 424 // DrawLayers() depends on the result of PrepareToDraw(), it is guarded on
435 // CanDraw() as well. 425 // CanDraw() as well.
436 if (!ShouldComposite()) { 426 if (!ShouldComposite()) {
437 UpdateBackgroundAnimateTicking();
438 return false; 427 return false;
439 } 428 }
440 429
441 layer_tree_host_impl_->Animate( 430 layer_tree_host_impl_->Animate(
442 layer_tree_host_impl_->CurrentFrameTimeTicks()); 431 layer_tree_host_impl_->CurrentFrameTimeTicks());
443 UpdateBackgroundAnimateTicking();
444 432
445 if (!layer_tree_host_impl_->IsContextLost()) { 433 if (!layer_tree_host_impl_->IsContextLost()) {
446 layer_tree_host_impl_->PrepareToDraw(frame); 434 layer_tree_host_impl_->PrepareToDraw(frame);
447 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time); 435 layer_tree_host_impl_->DrawLayers(frame, frame_begin_time);
448 layer_tree_host_impl_->DidDrawAllLayers(*frame); 436 layer_tree_host_impl_->DidDrawAllLayers(*frame);
449 } 437 }
450 lost_output_surface = layer_tree_host_impl_->IsContextLost(); 438 lost_output_surface = layer_tree_host_impl_->IsContextLost();
451 439
452 bool start_ready_animations = true; 440 bool start_ready_animations = true;
453 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations); 441 layer_tree_host_impl_->UpdateAnimationState(start_ready_animations);
(...skipping 12 matching lines...) Expand all
466 void SingleThreadProxy::DidSwapFrame() { 454 void SingleThreadProxy::DidSwapFrame() {
467 if (next_frame_is_newly_committed_frame_) { 455 if (next_frame_is_newly_committed_frame_) {
468 next_frame_is_newly_committed_frame_ = false; 456 next_frame_is_newly_committed_frame_ = false;
469 layer_tree_host_->DidCommitAndDrawFrame(); 457 layer_tree_host_->DidCommitAndDrawFrame();
470 } 458 }
471 } 459 }
472 460
473 bool SingleThreadProxy::CommitPendingForTesting() { return false; } 461 bool SingleThreadProxy::CommitPendingForTesting() { return false; }
474 462
475 } // namespace cc 463 } // 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