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

Unified Diff: cc/trees/single_thread_proxy.cc

Issue 1765723002: Hoist begin frame sources out of scheduler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scheduler_remove_throttle_flag
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« cc/trees/single_thread_proxy.h ('K') | « cc/trees/single_thread_proxy.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/trees/single_thread_proxy.cc
diff --git a/cc/trees/single_thread_proxy.cc b/cc/trees/single_thread_proxy.cc
index 27350291ec21f220d2c07b2b2c546c932817ce4e..7cc96e500836bbc5620a8569adeb8a592917c488 100644
--- a/cc/trees/single_thread_proxy.cc
+++ b/cc/trees/single_thread_proxy.cc
@@ -57,7 +57,7 @@ SingleThreadProxy::SingleThreadProxy(LayerTreeHost* layer_tree_host,
void SingleThreadProxy::Start(
scoped_ptr<BeginFrameSource> external_begin_frame_source) {
DebugScopedSetImplThread impl(task_runner_provider_);
- external_begin_frame_source_ = std::move(external_begin_frame_source);
+ begin_frame_source_ = std::move(external_begin_frame_source);
if (layer_tree_host_->settings().single_thread_proxy_scheduler &&
!scheduler_on_impl_thread_) {
@@ -71,11 +71,23 @@ void SingleThreadProxy::Start(
CompositorTimingHistory::BROWSER_UMA,
layer_tree_host_->rendering_stats_instrumentation()));
+ if (!scheduler_settings.throttle_frame_production) {
+ // Unthrottled source takes precedence over external sources.
+ begin_frame_source_ = BackToBackBeginFrameSource::Create(
+ task_runner_provider_->MainThreadTaskRunner());
+ }
+ BeginFrameSource* frame_source = begin_frame_source_.get();
+ if (!frame_source) {
+ synthetic_frame_source_ = SyntheticBeginFrameSource::Create(
+ task_runner_provider_->MainThreadTaskRunner(),
+ BeginFrameArgs::DefaultInterval());
+ frame_source = synthetic_frame_source_.get();
+ }
+
scheduler_on_impl_thread_ =
Scheduler::Create(this, scheduler_settings, layer_tree_host_->id(),
task_runner_provider_->MainThreadTaskRunner(),
- external_begin_frame_source_.get(),
- std::move(compositor_timing_history));
+ frame_source, std::move(compositor_timing_history));
}
layer_tree_host_impl_ = layer_tree_host_->CreateLayerTreeHostImpl(this);
@@ -463,8 +475,17 @@ void SingleThreadProxy::DidLoseOutputSurfaceOnImplThread() {
void SingleThreadProxy::CommitVSyncParameters(base::TimeTicks timebase,
base::TimeDelta interval) {
- if (scheduler_on_impl_thread_)
- scheduler_on_impl_thread_->CommitVSyncParameters(timebase, interval);
+ if (authoritative_vsync_interval_ != base::TimeDelta()) {
+ interval = authoritative_vsync_interval_;
+ } else if (interval == base::TimeDelta()) {
+ // TODO(brianderson): We should not be receiving 0 intervals.
+ interval = BeginFrameArgs::DefaultInterval();
+ }
+
+ last_vsync_timebase_ = timebase;
+
+ if (synthetic_frame_source_)
+ synthetic_frame_source_->OnUpdateVSyncParameters(timebase, interval);
}
void SingleThreadProxy::SetEstimatedParentDrawTime(base::TimeDelta draw_time) {
@@ -699,7 +720,11 @@ void SingleThreadProxy::SetChildrenNeedBeginFrames(
void SingleThreadProxy::SetAuthoritativeVSyncInterval(
const base::TimeDelta& interval) {
- scheduler_on_impl_thread_->SetAuthoritativeVSyncInterval(interval);
+ authoritative_vsync_interval_ = interval;
+ if (synthetic_frame_source_) {
+ synthetic_frame_source_->OnUpdateVSyncParameters(last_vsync_timebase_,
+ interval);
+ }
}
void SingleThreadProxy::WillBeginImplFrame(const BeginFrameArgs& args) {
« cc/trees/single_thread_proxy.h ('K') | « cc/trees/single_thread_proxy.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698