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

Side by Side Diff: cc/scheduler/scheduler.cc

Issue 845393002: cc: Create ProxyBeginFrameSource (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 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 unified diff | Download patch
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/scheduler/scheduler.h" 5 #include "cc/scheduler/scheduler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 return scheduler->unthrottled_frame_source_internal_.get(); 73 return scheduler->unthrottled_frame_source_internal_.get();
74 } 74 }
75 75
76 Scheduler::Scheduler( 76 Scheduler::Scheduler(
77 SchedulerClient* client, 77 SchedulerClient* client,
78 const SchedulerSettings& scheduler_settings, 78 const SchedulerSettings& scheduler_settings,
79 int layer_tree_host_id, 79 int layer_tree_host_id,
80 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 80 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
81 base::PowerMonitor* power_monitor, 81 base::PowerMonitor* power_monitor,
82 scoped_ptr<BeginFrameSource> external_begin_frame_source, 82 scoped_ptr<BeginFrameSource> external_begin_frame_source,
83 ProxyBeginFrameSource* proxy_begin_frame_source,
83 SchedulerFrameSourcesConstructor* frame_sources_constructor) 84 SchedulerFrameSourcesConstructor* frame_sources_constructor)
84 : frame_source_(), 85 : frame_source_(),
85 primary_frame_source_(NULL), 86 primary_frame_source_(NULL),
86 background_frame_source_(NULL), 87 background_frame_source_(NULL),
87 primary_frame_source_internal_(external_begin_frame_source.Pass()), 88 primary_frame_source_internal_(external_begin_frame_source.Pass()),
88 background_frame_source_internal_(), 89 background_frame_source_internal_(),
89 vsync_observer_(NULL), 90 vsync_observer_(NULL),
90 throttle_frame_production_(scheduler_settings.throttle_frame_production), 91 throttle_frame_production_(scheduler_settings.throttle_frame_production),
91 settings_(scheduler_settings), 92 settings_(scheduler_settings),
92 client_(client), 93 client_(client),
93 layer_tree_host_id_(layer_tree_host_id), 94 layer_tree_host_id_(layer_tree_host_id),
94 task_runner_(task_runner), 95 task_runner_(task_runner),
95 power_monitor_(power_monitor), 96 power_monitor_(power_monitor),
96 state_machine_(scheduler_settings), 97 state_machine_(scheduler_settings),
97 inside_process_scheduled_actions_(false), 98 inside_process_scheduled_actions_(false),
98 inside_action_(SchedulerStateMachine::ACTION_NONE), 99 inside_action_(SchedulerStateMachine::ACTION_NONE),
100 proxy_begin_frame_source_(proxy_begin_frame_source),
99 weak_factory_(this) { 101 weak_factory_(this) {
100 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"), 102 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler"),
101 "Scheduler::Scheduler", 103 "Scheduler::Scheduler",
102 "settings", 104 "settings",
103 settings_.AsValue()); 105 settings_.AsValue());
104 DCHECK(client_); 106 DCHECK(client_);
105 DCHECK(!state_machine_.BeginFrameNeeded()); 107 DCHECK(!state_machine_.BeginFrameNeeded());
106 108
109 if (settings_.forward_begin_frames_to_children) {
110 DCHECK(proxy_begin_frame_source_);
111 proxy_begin_frame_source_->set_delegate(this);
112 }
113
107 begin_retro_frame_closure_ = 114 begin_retro_frame_closure_ =
108 base::Bind(&Scheduler::BeginRetroFrame, weak_factory_.GetWeakPtr()); 115 base::Bind(&Scheduler::BeginRetroFrame, weak_factory_.GetWeakPtr());
109 begin_impl_frame_deadline_closure_ = base::Bind( 116 begin_impl_frame_deadline_closure_ = base::Bind(
110 &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr()); 117 &Scheduler::OnBeginImplFrameDeadline, weak_factory_.GetWeakPtr());
111 poll_for_draw_triggers_closure_ = base::Bind( 118 poll_for_draw_triggers_closure_ = base::Bind(
112 &Scheduler::PollForAnticipatedDrawTriggers, weak_factory_.GetWeakPtr()); 119 &Scheduler::PollForAnticipatedDrawTriggers, weak_factory_.GetWeakPtr());
113 advance_commit_state_closure_ = base::Bind( 120 advance_commit_state_closure_ = base::Bind(
114 &Scheduler::PollToAdvanceCommitState, weak_factory_.GetWeakPtr()); 121 &Scheduler::PollToAdvanceCommitState, weak_factory_.GetWeakPtr());
115 122
116 frame_source_ = BeginFrameSourceMultiplexer::Create(); 123 frame_source_ = BeginFrameSourceMultiplexer::Create();
(...skipping 15 matching lines...) Expand all
132 frame_sources_constructor->ConstructUnthrottledFrameSource(this); 139 frame_sources_constructor->ConstructUnthrottledFrameSource(this);
133 frame_source_->AddSource(unthrottled_frame_source_); 140 frame_source_->AddSource(unthrottled_frame_source_);
134 141
135 SetupPowerMonitoring(); 142 SetupPowerMonitoring();
136 } 143 }
137 144
138 Scheduler::~Scheduler() { 145 Scheduler::~Scheduler() {
139 TeardownPowerMonitoring(); 146 TeardownPowerMonitoring();
140 if (frame_source_->NeedsBeginFrames()) 147 if (frame_source_->NeedsBeginFrames())
141 frame_source_->SetNeedsBeginFrames(false); 148 frame_source_->SetNeedsBeginFrames(false);
149
150 if (proxy_begin_frame_source_)
151 proxy_begin_frame_source_->set_delegate(nullptr);
142 } 152 }
143 153
144 base::TimeTicks Scheduler::Now() const { 154 base::TimeTicks Scheduler::Now() const {
145 base::TimeTicks now = gfx::FrameTime::Now(); 155 base::TimeTicks now = gfx::FrameTime::Now();
146 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"), 156 TRACE_EVENT1(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.now"),
147 "Scheduler::Now", 157 "Scheduler::Now",
148 "now", 158 "now",
149 now); 159 now);
150 return now; 160 return now;
151 } 161 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 state_machine_.children_need_begin_frames()) { 416 state_machine_.children_need_begin_frames()) {
407 BeginFrameArgs adjusted_args_for_children(args); 417 BeginFrameArgs adjusted_args_for_children(args);
408 // Adjust a deadline for child schedulers. 418 // Adjust a deadline for child schedulers.
409 // TODO(simonhong): Once we have commitless update, we can get rid of 419 // TODO(simonhong): Once we have commitless update, we can get rid of
410 // BeginMainFrameToCommitDurationEstimate() + 420 // BeginMainFrameToCommitDurationEstimate() +
411 // CommitToActivateDurationEstimate(). 421 // CommitToActivateDurationEstimate().
412 adjusted_args_for_children.deadline -= 422 adjusted_args_for_children.deadline -=
413 (client_->BeginMainFrameToCommitDurationEstimate() + 423 (client_->BeginMainFrameToCommitDurationEstimate() +
414 client_->CommitToActivateDurationEstimate() + 424 client_->CommitToActivateDurationEstimate() +
415 client_->DrawDurationEstimate() + EstimatedParentDrawTime()); 425 client_->DrawDurationEstimate() + EstimatedParentDrawTime());
416 client_->SendBeginFramesToChildren(adjusted_args_for_children); 426 proxy_begin_frame_source_->BeginFrames(adjusted_args_for_children);
417 } 427 }
418 428
419 // We have just called SetNeedsBeginFrame(true) and the BeginFrameSource has 429 // We have just called SetNeedsBeginFrame(true) and the BeginFrameSource has
420 // sent us the last BeginFrame we have missed. As we might not be able to 430 // sent us the last BeginFrame we have missed. As we might not be able to
421 // actually make rendering for this call, handle it like a "retro frame". 431 // actually make rendering for this call, handle it like a "retro frame".
422 // TODO(brainderson): Add a test for this functionality ASAP! 432 // TODO(brainderson): Add a test for this functionality ASAP!
423 if (args.type == BeginFrameArgs::MISSED) { 433 if (args.type == BeginFrameArgs::MISSED) {
424 begin_retro_frame_args_.push_back(args); 434 begin_retro_frame_args_.push_back(args);
425 PostBeginRetroFrameIfNeeded(); 435 PostBeginRetroFrameIfNeeded();
426 return true; 436 return true;
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 } 820 }
811 821
812 bool Scheduler::IsBeginMainFrameSentOrStarted() const { 822 bool Scheduler::IsBeginMainFrameSentOrStarted() const {
813 return (state_machine_.commit_state() == 823 return (state_machine_.commit_state() ==
814 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 824 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
815 state_machine_.commit_state() == 825 state_machine_.commit_state() ==
816 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); 826 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED);
817 } 827 }
818 828
819 } // namespace cc 829 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698