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