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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 SchedulerSettings scheduler_settings( | 66 SchedulerSettings scheduler_settings( |
67 layer_tree_host_->settings().ToSchedulerSettings()); | 67 layer_tree_host_->settings().ToSchedulerSettings()); |
68 scheduler_settings.commit_to_active_tree = CommitToActiveTree(); | 68 scheduler_settings.commit_to_active_tree = CommitToActiveTree(); |
69 | 69 |
70 std::unique_ptr<CompositorTimingHistory> compositor_timing_history( | 70 std::unique_ptr<CompositorTimingHistory> compositor_timing_history( |
71 new CompositorTimingHistory( | 71 new CompositorTimingHistory( |
72 scheduler_settings.using_synchronous_renderer_compositor, | 72 scheduler_settings.using_synchronous_renderer_compositor, |
73 CompositorTimingHistory::BROWSER_UMA, | 73 CompositorTimingHistory::BROWSER_UMA, |
74 layer_tree_host_->rendering_stats_instrumentation())); | 74 layer_tree_host_->rendering_stats_instrumentation())); |
75 | 75 |
76 BeginFrameSource* frame_source = external_begin_frame_source_.get(); | 76 BeginFrameSource* frame_source = nullptr; |
77 if (!scheduler_settings.throttle_frame_production) { | 77 if (!layer_tree_host_->settings().use_output_surface_begin_frame_source) { |
78 // Unthrottled source takes precedence over external sources. | 78 frame_source = external_begin_frame_source_.get(); |
79 unthrottled_begin_frame_source_.reset(new BackToBackBeginFrameSource( | 79 if (!scheduler_settings.throttle_frame_production) { |
80 task_runner_provider_->MainThreadTaskRunner())); | 80 // Unthrottled source takes precedence over external sources. |
81 frame_source = unthrottled_begin_frame_source_.get(); | 81 unthrottled_begin_frame_source_.reset(new BackToBackBeginFrameSource( |
82 } | 82 task_runner_provider_->MainThreadTaskRunner())); |
83 if (!frame_source) { | 83 frame_source = unthrottled_begin_frame_source_.get(); |
84 synthetic_begin_frame_source_.reset(new SyntheticBeginFrameSource( | 84 } |
85 task_runner_provider_->MainThreadTaskRunner(), | 85 if (!frame_source) { |
86 BeginFrameArgs::DefaultInterval())); | 86 synthetic_begin_frame_source_.reset(new SyntheticBeginFrameSource( |
87 frame_source = synthetic_begin_frame_source_.get(); | 87 task_runner_provider_->MainThreadTaskRunner(), |
| 88 BeginFrameArgs::DefaultInterval())); |
| 89 frame_source = synthetic_begin_frame_source_.get(); |
| 90 } |
88 } | 91 } |
89 | 92 |
90 scheduler_on_impl_thread_ = | 93 scheduler_on_impl_thread_ = |
91 Scheduler::Create(this, scheduler_settings, layer_tree_host_->id(), | 94 Scheduler::Create(this, scheduler_settings, layer_tree_host_->id(), |
92 task_runner_provider_->MainThreadTaskRunner(), | 95 task_runner_provider_->MainThreadTaskRunner(), |
93 frame_source, std::move(compositor_timing_history)); | 96 frame_source, std::move(compositor_timing_history)); |
94 } | 97 } |
95 | 98 |
96 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); | 99 layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this); |
97 } | 100 } |
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 // TODO(brianderson): We should not be receiving 0 intervals. | 487 // TODO(brianderson): We should not be receiving 0 intervals. |
485 interval = BeginFrameArgs::DefaultInterval(); | 488 interval = BeginFrameArgs::DefaultInterval(); |
486 } | 489 } |
487 | 490 |
488 last_vsync_timebase_ = timebase; | 491 last_vsync_timebase_ = timebase; |
489 | 492 |
490 if (synthetic_begin_frame_source_) | 493 if (synthetic_begin_frame_source_) |
491 synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase, interval); | 494 synthetic_begin_frame_source_->OnUpdateVSyncParameters(timebase, interval); |
492 } | 495 } |
493 | 496 |
| 497 void SingleThreadProxy::SetBeginFrameSource(BeginFrameSource* source) { |
| 498 DCHECK(layer_tree_host_->settings().single_thread_proxy_scheduler); |
| 499 // TODO(enne): this overrides any preexisting begin frame source. Those |
| 500 // other sources will eventually be removed and this will be the only path. |
| 501 if (!layer_tree_host_->settings().use_output_surface_begin_frame_source) |
| 502 return; |
| 503 if (scheduler_on_impl_thread_) |
| 504 scheduler_on_impl_thread_->SetBeginFrameSource(source); |
| 505 } |
| 506 |
494 void SingleThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { | 507 void SingleThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { |
495 if (scheduler_on_impl_thread_) | 508 if (scheduler_on_impl_thread_) |
496 scheduler_on_impl_thread_->SetEstimatedParentDrawTime(draw_time); | 509 scheduler_on_impl_thread_->SetEstimatedParentDrawTime(draw_time); |
497 } | 510 } |
498 | 511 |
499 void SingleThreadProxy::DidSwapBuffersOnImplThread() { | 512 void SingleThreadProxy::DidSwapBuffersOnImplThread() { |
500 TRACE_EVENT0("cc", "SingleThreadProxy::DidSwapBuffersOnImplThread"); | 513 TRACE_EVENT0("cc", "SingleThreadProxy::DidSwapBuffersOnImplThread"); |
501 if (scheduler_on_impl_thread_) | 514 if (scheduler_on_impl_thread_) |
502 scheduler_on_impl_thread_->DidSwapBuffers(); | 515 scheduler_on_impl_thread_->DidSwapBuffers(); |
503 client_->DidPostSwapBuffers(); | 516 client_->DidPostSwapBuffers(); |
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 << "DidFinishImplFrame called while not inside an impl frame!"; | 912 << "DidFinishImplFrame called while not inside an impl frame!"; |
900 inside_impl_frame_ = false; | 913 inside_impl_frame_ = false; |
901 #endif | 914 #endif |
902 } | 915 } |
903 | 916 |
904 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { | 917 void SingleThreadProxy::SendBeginFramesToChildren(const BeginFrameArgs& args) { |
905 layer_tree_host_->SendBeginFramesToChildren(args); | 918 layer_tree_host_->SendBeginFramesToChildren(args); |
906 } | 919 } |
907 | 920 |
908 } // namespace cc | 921 } // namespace cc |
OLD | NEW |