| OLD | NEW |
| 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/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/profiler/scoped_tracker.h" | 9 #include "base/profiler/scoped_tracker.h" |
| 10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 void SingleThreadProxy::Start( | 60 void SingleThreadProxy::Start( |
| 61 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { | 61 std::unique_ptr<BeginFrameSource> external_begin_frame_source) { |
| 62 DebugScopedSetImplThread impl(task_runner_provider_); | 62 DebugScopedSetImplThread impl(task_runner_provider_); |
| 63 external_begin_frame_source_ = std::move(external_begin_frame_source); | 63 external_begin_frame_source_ = std::move(external_begin_frame_source); |
| 64 | 64 |
| 65 if (layer_tree_host_->settings().single_thread_proxy_scheduler && | 65 if (layer_tree_host_->settings().single_thread_proxy_scheduler && |
| 66 !scheduler_on_impl_thread_) { | 66 !scheduler_on_impl_thread_) { |
| 67 SchedulerSettings scheduler_settings( | 67 SchedulerSettings scheduler_settings( |
| 68 layer_tree_host_->settings().ToSchedulerSettings()); | 68 layer_tree_host_->settings().ToSchedulerSettings()); |
| 69 scheduler_settings.commit_to_active_tree = CommitToActiveTree(); | 69 scheduler_settings.commit_to_active_tree = CommitToActiveTree(); |
| 70 | |
| 71 std::unique_ptr<CompositorTimingHistory> compositor_timing_history( | 70 std::unique_ptr<CompositorTimingHistory> compositor_timing_history( |
| 72 new CompositorTimingHistory( | 71 new CompositorTimingHistory( |
| 73 scheduler_settings.using_synchronous_renderer_compositor, | 72 scheduler_settings.using_synchronous_renderer_compositor, |
| 74 CompositorTimingHistory::BROWSER_UMA, | 73 CompositorTimingHistory::BROWSER_UMA, |
| 75 layer_tree_host_->rendering_stats_instrumentation())); | 74 layer_tree_host_->rendering_stats_instrumentation())); |
| 76 | 75 |
| 77 BeginFrameSource* frame_source = nullptr; | 76 DCHECK(layer_tree_host_->settings().use_output_surface_begin_frame_source); |
| 78 if (!layer_tree_host_->settings().use_output_surface_begin_frame_source) { | |
| 79 frame_source = external_begin_frame_source_.get(); | |
| 80 if (!scheduler_settings.throttle_frame_production) { | |
| 81 // Unthrottled source takes precedence over external sources. | |
| 82 unthrottled_begin_frame_source_.reset(new BackToBackBeginFrameSource( | |
| 83 base::MakeUnique<DelayBasedTimeSource>( | |
| 84 task_runner_provider_->MainThreadTaskRunner()))); | |
| 85 frame_source = unthrottled_begin_frame_source_.get(); | |
| 86 } | |
| 87 if (!frame_source) { | |
| 88 synthetic_begin_frame_source_.reset(new DelayBasedBeginFrameSource( | |
| 89 base::MakeUnique<DelayBasedTimeSource>( | |
| 90 task_runner_provider_->MainThreadTaskRunner()))); | |
| 91 frame_source = synthetic_begin_frame_source_.get(); | |
| 92 } | |
| 93 } | |
| 94 | |
| 95 scheduler_on_impl_thread_ = | 77 scheduler_on_impl_thread_ = |
| 96 Scheduler::Create(this, scheduler_settings, layer_tree_host_->id(), | 78 Scheduler::Create(this, scheduler_settings, layer_tree_host_->id(), |
| 97 task_runner_provider_->MainThreadTaskRunner(), | 79 task_runner_provider_->MainThreadTaskRunner(), |
| 98 frame_source, std::move(compositor_timing_history)); | 80 nullptr, std::move(compositor_timing_history)); |
| 99 } | 81 } |
| 100 | 82 |
| 101 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); | 83 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); |
| 102 } | 84 } |
| 103 | 85 |
| 104 SingleThreadProxy::~SingleThreadProxy() { | 86 SingleThreadProxy::~SingleThreadProxy() { |
| 105 TRACE_EVENT0("cc", "SingleThreadProxy::~SingleThreadProxy"); | 87 TRACE_EVENT0("cc", "SingleThreadProxy::~SingleThreadProxy"); |
| 106 DCHECK(task_runner_provider_->IsMainThread()); | 88 DCHECK(task_runner_provider_->IsMainThread()); |
| 107 // Make sure Stop() got called or never Started. | 89 // Make sure Stop() got called or never Started. |
| 108 DCHECK(!layer_tree_host_impl_); | 90 DCHECK(!layer_tree_host_impl_); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 scheduler_on_impl_thread_->DidLoseOutputSurface(); | 458 scheduler_on_impl_thread_->DidLoseOutputSurface(); |
| 477 } | 459 } |
| 478 | 460 |
| 479 void SingleThreadProxy::CommitVSyncParameters(base::TimeTicks timebase, | 461 void SingleThreadProxy::CommitVSyncParameters(base::TimeTicks timebase, |
| 480 base::TimeDelta interval) { | 462 base::TimeDelta interval) { |
| 481 if (synthetic_begin_frame_source_) | 463 if (synthetic_begin_frame_source_) |
| 482 synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase, interval); | 464 synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase, interval); |
| 483 } | 465 } |
| 484 | 466 |
| 485 void SingleThreadProxy::SetBeginFrameSource(BeginFrameSource* source) { | 467 void SingleThreadProxy::SetBeginFrameSource(BeginFrameSource* source) { |
| 468 DCHECK(layer_tree_host_->settings().use_output_surface_begin_frame_source); |
| 486 DCHECK(layer_tree_host_->settings().single_thread_proxy_scheduler); | 469 DCHECK(layer_tree_host_->settings().single_thread_proxy_scheduler); |
| 487 // TODO(enne): this overrides any preexisting begin frame source. Those | |
| 488 // other sources will eventually be removed and this will be the only path. | |
| 489 if (!layer_tree_host_->settings().use_output_surface_begin_frame_source) | |
| 490 return; | |
| 491 if (scheduler_on_impl_thread_) | 470 if (scheduler_on_impl_thread_) |
| 492 scheduler_on_impl_thread_->SetBeginFrameSource(source); | 471 scheduler_on_impl_thread_->SetBeginFrameSource(source); |
| 493 } | 472 } |
| 494 | 473 |
| 495 void SingleThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { | 474 void SingleThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { |
| 496 if (scheduler_on_impl_thread_) | 475 if (scheduler_on_impl_thread_) |
| 497 scheduler_on_impl_thread_->SetEstimatedParentDrawTime(draw_time); | 476 scheduler_on_impl_thread_->SetEstimatedParentDrawTime(draw_time); |
| 498 } | 477 } |
| 499 | 478 |
| 500 void SingleThreadProxy::DidSwapBuffersCompleteOnImplThread() { | 479 void SingleThreadProxy::DidSwapBuffersCompleteOnImplThread() { |
| (...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 876 void SingleThreadProxy::DidFinishImplFrame() { | 855 void SingleThreadProxy::DidFinishImplFrame() { |
| 877 layer_tree_host_impl_->DidFinishImplFrame(); | 856 layer_tree_host_impl_->DidFinishImplFrame(); |
| 878 #if DCHECK_IS_ON() | 857 #if DCHECK_IS_ON() |
| 879 DCHECK(inside_impl_frame_) | 858 DCHECK(inside_impl_frame_) |
| 880 << "DidFinishImplFrame called while not inside an impl frame!"; | 859 << "DidFinishImplFrame called while not inside an impl frame!"; |
| 881 inside_impl_frame_ = false; | 860 inside_impl_frame_ = false; |
| 882 #endif | 861 #endif |
| 883 } | 862 } |
| 884 | 863 |
| 885 } // namespace cc | 864 } // namespace cc |
| OLD | NEW |