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

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

Issue 577643002: Making OutputSurface a begin frame source and vsync source. (Closed)
Patch Set: Created 6 years, 3 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
« no previous file with comments | « cc/scheduler/scheduler.h ('k') | cc/scheduler/scheduler_state_machine.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/debug/trace_event_argument.h" 10 #include "base/debug/trace_event_argument.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 BeginFrameSource* Scheduler::GetPrimaryBeginFrameSource() { 54 BeginFrameSource* Scheduler::GetPrimaryBeginFrameSource() {
55 if (!settings_.throttle_frame_production) { 55 if (!settings_.throttle_frame_production) {
56 TRACE_EVENT1("cc", 56 TRACE_EVENT1("cc",
57 "Scheduler::Scheduler()", 57 "Scheduler::Scheduler()",
58 "PrimaryFrameSource", 58 "PrimaryFrameSource",
59 "BackToBackBeginFrameSource"); 59 "BackToBackBeginFrameSource");
60 primary_frame_source_internal_ = 60 primary_frame_source_internal_ =
61 BackToBackBeginFrameSource::Create(task_runner_.get()); 61 BackToBackBeginFrameSource::Create(task_runner_.get());
62 return primary_frame_source_internal_.get(); 62 return primary_frame_source_internal_.get();
63 } else if (settings_.begin_frame_scheduling_enabled) { 63 } else if (settings_.begin_frame_scheduling_enabled) {
64 TRACE_EVENT1("cc", 64 TRACE_EVENT1(
65 "Scheduler::Scheduler()", 65 "cc", "Scheduler::Scheduler()", "PrimaryFrameSource", "OutputSurface");
66 "PrimaryFrameSource", 66 return NULL;
67 "SchedulerClient");
68 return client_->GetExternalBeginFrameSource();
69 } else { 67 } else {
70 TRACE_EVENT1("cc", 68 TRACE_EVENT1("cc",
71 "Scheduler::Scheduler()", 69 "Scheduler::Scheduler()",
72 "PrimaryFrameSource", 70 "PrimaryFrameSource",
73 "SyntheticBeginFrameSource"); 71 "SyntheticBeginFrameSource");
74 scoped_ptr<SyntheticBeginFrameSource> synthetic_source = 72 scoped_ptr<SyntheticBeginFrameSource> synthetic_source =
75 SyntheticBeginFrameSource::Create( 73 SyntheticBeginFrameSource::Create(
76 task_runner_.get(), Now(), BeginFrameArgs::DefaultInterval()); 74 task_runner_.get(), Now(), BeginFrameArgs::DefaultInterval());
77 vsync_observer_ = synthetic_source.get(); 75 vsync_observer_ = synthetic_source.get();
78 primary_frame_source_internal_ = synthetic_source.Pass(); 76 primary_frame_source_internal_ = synthetic_source.Pass();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 void Scheduler::SetEstimatedParentDrawTime(base::TimeDelta draw_time) { 121 void Scheduler::SetEstimatedParentDrawTime(base::TimeDelta draw_time) {
124 DCHECK_GE(draw_time.ToInternalValue(), 0); 122 DCHECK_GE(draw_time.ToInternalValue(), 0);
125 estimated_parent_draw_time_ = draw_time; 123 estimated_parent_draw_time_ = draw_time;
126 } 124 }
127 125
128 void Scheduler::SetCanStart() { 126 void Scheduler::SetCanStart() {
129 state_machine_.SetCanStart(); 127 state_machine_.SetCanStart();
130 ProcessScheduledActions(); 128 ProcessScheduledActions();
131 } 129 }
132 130
131 void Scheduler::UpdateActiveFrameSource() {
132 if (state_machine_.visible() && primary_frame_source_) {
133 frame_source_->SetActiveSource(primary_frame_source_);
134 } else {
135 frame_source_->SetActiveSource(background_frame_source_);
136 }
137 }
138
133 void Scheduler::SetVisible(bool visible) { 139 void Scheduler::SetVisible(bool visible) {
134 state_machine_.SetVisible(visible); 140 state_machine_.SetVisible(visible);
135 if (visible) { 141 UpdateActiveFrameSource();
136 frame_source_->SetActiveSource(primary_frame_source_);
137 } else {
138 frame_source_->SetActiveSource(background_frame_source_);
139 }
140 ProcessScheduledActions(); 142 ProcessScheduledActions();
141 } 143 }
142 144
143 void Scheduler::SetCanDraw(bool can_draw) { 145 void Scheduler::SetCanDraw(bool can_draw) {
144 state_machine_.SetCanDraw(can_draw); 146 state_machine_.SetCanDraw(can_draw);
145 ProcessScheduledActions(); 147 ProcessScheduledActions();
146 } 148 }
147 149
148 void Scheduler::NotifyReadyToActivate() { 150 void Scheduler::NotifyReadyToActivate() {
149 state_machine_.NotifyReadyToActivate(); 151 state_machine_.NotifyReadyToActivate();
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 ProcessScheduledActions(); 214 ProcessScheduledActions();
213 } 215 }
214 216
215 void Scheduler::DidManageTiles() { 217 void Scheduler::DidManageTiles() {
216 state_machine_.DidManageTiles(); 218 state_machine_.DidManageTiles();
217 } 219 }
218 220
219 void Scheduler::DidLoseOutputSurface() { 221 void Scheduler::DidLoseOutputSurface() {
220 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface"); 222 TRACE_EVENT0("cc", "Scheduler::DidLoseOutputSurface");
221 state_machine_.DidLoseOutputSurface(); 223 state_machine_.DidLoseOutputSurface();
224
225 if (settings_.throttle_frame_production &&
226 settings_.begin_frame_scheduling_enabled && primary_frame_source_) {
227 frame_source_->RemoveSource(primary_frame_source_);
228 primary_frame_source_ = NULL;
229 UpdateActiveFrameSource();
230 }
231
222 if (frame_source_->NeedsBeginFrames()) 232 if (frame_source_->NeedsBeginFrames())
223 frame_source_->SetNeedsBeginFrames(false); 233 frame_source_->SetNeedsBeginFrames(false);
234
224 begin_retro_frame_args_.clear(); 235 begin_retro_frame_args_.clear();
225 ProcessScheduledActions(); 236 ProcessScheduledActions();
226 } 237 }
227 238
228 void Scheduler::DidCreateAndInitializeOutputSurface() { 239 void Scheduler::DidCreateAndInitializeOutputSurface(
240 OutputSurface* output_surface) {
229 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface"); 241 TRACE_EVENT0("cc", "Scheduler::DidCreateAndInitializeOutputSurface");
230 DCHECK(!frame_source_->NeedsBeginFrames());
231 DCHECK(begin_impl_frame_deadline_task_.IsCancelled()); 242 DCHECK(begin_impl_frame_deadline_task_.IsCancelled());
243
244 if (settings_.throttle_frame_production &&
245 settings_.begin_frame_scheduling_enabled) {
246 DCHECK(!primary_frame_source_);
247 primary_frame_source_ = output_surface;
248 frame_source_->AddSource(primary_frame_source_);
249 }
250 UpdateActiveFrameSource();
232 state_machine_.DidCreateAndInitializeOutputSurface(); 251 state_machine_.DidCreateAndInitializeOutputSurface();
233 ProcessScheduledActions(); 252 ProcessScheduledActions();
234 } 253 }
235 254
236 void Scheduler::NotifyBeginMainFrameStarted() { 255 void Scheduler::NotifyBeginMainFrameStarted() {
237 TRACE_EVENT0("cc", "Scheduler::NotifyBeginMainFrameStarted"); 256 TRACE_EVENT0("cc", "Scheduler::NotifyBeginMainFrameStarted");
238 state_machine_.NotifyBeginMainFrameStarted(); 257 state_machine_.NotifyBeginMainFrameStarted();
239 } 258 }
240 259
241 base::TimeTicks Scheduler::AnticipatedDrawTime() const { 260 base::TimeTicks Scheduler::AnticipatedDrawTime() const {
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
699 } 718 }
700 719
701 bool Scheduler::IsBeginMainFrameSentOrStarted() const { 720 bool Scheduler::IsBeginMainFrameSentOrStarted() const {
702 return (state_machine_.commit_state() == 721 return (state_machine_.commit_state() ==
703 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT || 722 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_SENT ||
704 state_machine_.commit_state() == 723 state_machine_.commit_state() ==
705 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED); 724 SchedulerStateMachine::COMMIT_STATE_BEGIN_MAIN_FRAME_STARTED);
706 } 725 }
707 726
708 } // namespace cc 727 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/scheduler.h ('k') | cc/scheduler/scheduler_state_machine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698