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

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

Issue 2323123002: Make disable vsync run the renderer independently (Closed)
Patch Set: Rebase Created 4 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/begin_frame_source.h ('k') | cc/scheduler/scheduler.cc » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 26 matching lines...) Expand all
37 DCHECK(args.IsValid()); 37 DCHECK(args.IsValid());
38 DCHECK(args.frame_time >= last_begin_frame_args_.frame_time); 38 DCHECK(args.frame_time >= last_begin_frame_args_.frame_time);
39 bool used = OnBeginFrameDerivedImpl(args); 39 bool used = OnBeginFrameDerivedImpl(args);
40 if (used) { 40 if (used) {
41 last_begin_frame_args_ = args; 41 last_begin_frame_args_ = args;
42 } else { 42 } else {
43 ++dropped_begin_frame_args_; 43 ++dropped_begin_frame_args_;
44 } 44 }
45 } 45 }
46 46
47 bool StubBeginFrameSource::IsThrottled() const {
48 return true;
49 }
50
47 // SyntheticBeginFrameSource --------------------------------------------- 51 // SyntheticBeginFrameSource ---------------------------------------------
48 SyntheticBeginFrameSource::~SyntheticBeginFrameSource() = default; 52 SyntheticBeginFrameSource::~SyntheticBeginFrameSource() = default;
49 53
50 // BackToBackBeginFrameSource -------------------------------------------- 54 // BackToBackBeginFrameSource --------------------------------------------
51 BackToBackBeginFrameSource::BackToBackBeginFrameSource( 55 BackToBackBeginFrameSource::BackToBackBeginFrameSource(
52 std::unique_ptr<DelayBasedTimeSource> time_source) 56 std::unique_ptr<DelayBasedTimeSource> time_source)
53 : time_source_(std::move(time_source)), weak_factory_(this) { 57 : time_source_(std::move(time_source)), weak_factory_(this) {
54 time_source_->SetClient(this); 58 time_source_->SetClient(this);
55 // The time_source_ ticks immediately, so we SetActive(true) for a single 59 // The time_source_ ticks immediately, so we SetActive(true) for a single
56 // tick when we need it, and keep it as SetActive(false) otherwise. 60 // tick when we need it, and keep it as SetActive(false) otherwise.
(...skipping 21 matching lines...) Expand all
78 } 82 }
79 83
80 void BackToBackBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs, 84 void BackToBackBeginFrameSource::DidFinishFrame(BeginFrameObserver* obs,
81 size_t remaining_frames) { 85 size_t remaining_frames) {
82 if (remaining_frames == 0 && observers_.find(obs) != observers_.end()) { 86 if (remaining_frames == 0 && observers_.find(obs) != observers_.end()) {
83 pending_begin_frame_observers_.insert(obs); 87 pending_begin_frame_observers_.insert(obs);
84 time_source_->SetActive(true); 88 time_source_->SetActive(true);
85 } 89 }
86 } 90 }
87 91
92 bool BackToBackBeginFrameSource::IsThrottled() const {
93 return false;
94 }
95
88 void BackToBackBeginFrameSource::OnTimerTick() { 96 void BackToBackBeginFrameSource::OnTimerTick() {
89 base::TimeTicks frame_time = time_source_->LastTickTime(); 97 base::TimeTicks frame_time = time_source_->LastTickTime();
90 base::TimeDelta default_interval = BeginFrameArgs::DefaultInterval(); 98 base::TimeDelta default_interval = BeginFrameArgs::DefaultInterval();
91 BeginFrameArgs args = BeginFrameArgs::Create( 99 BeginFrameArgs args = BeginFrameArgs::Create(
92 BEGINFRAME_FROM_HERE, frame_time, frame_time + default_interval, 100 BEGINFRAME_FROM_HERE, frame_time, frame_time + default_interval,
93 default_interval, BeginFrameArgs::NORMAL); 101 default_interval, BeginFrameArgs::NORMAL);
94 102
95 // This must happen after getting the LastTickTime() from the time source. 103 // This must happen after getting the LastTickTime() from the time source.
96 time_source_->SetActive(false); 104 time_source_->SetActive(false);
97 105
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 166
159 void DelayBasedBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) { 167 void DelayBasedBeginFrameSource::RemoveObserver(BeginFrameObserver* obs) {
160 DCHECK(obs); 168 DCHECK(obs);
161 DCHECK(observers_.find(obs) != observers_.end()); 169 DCHECK(observers_.find(obs) != observers_.end());
162 170
163 observers_.erase(obs); 171 observers_.erase(obs);
164 if (observers_.empty()) 172 if (observers_.empty())
165 time_source_->SetActive(false); 173 time_source_->SetActive(false);
166 } 174 }
167 175
176 bool DelayBasedBeginFrameSource::IsThrottled() const {
177 return true;
178 }
179
168 void DelayBasedBeginFrameSource::OnTimerTick() { 180 void DelayBasedBeginFrameSource::OnTimerTick() {
169 BeginFrameArgs args = CreateBeginFrameArgs(time_source_->LastTickTime(), 181 BeginFrameArgs args = CreateBeginFrameArgs(time_source_->LastTickTime(),
170 BeginFrameArgs::NORMAL); 182 BeginFrameArgs::NORMAL);
171 std::unordered_set<BeginFrameObserver*> observers(observers_); 183 std::unordered_set<BeginFrameObserver*> observers(observers_);
172 for (auto* obs : observers) { 184 for (auto* obs : observers) {
173 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); 185 BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs();
174 if (!last_args.IsValid() || 186 if (!last_args.IsValid() ||
175 (args.frame_time > 187 (args.frame_time >
176 last_args.frame_time + args.interval / kDoubleTickDivisor)) 188 last_args.frame_time + args.interval / kDoubleTickDivisor))
177 obs->OnBeginFrame(args); 189 obs->OnBeginFrame(args);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 DCHECK(obs); 222 DCHECK(obs);
211 DCHECK(observers_.find(obs) != observers_.end()); 223 DCHECK(observers_.find(obs) != observers_.end());
212 224
213 observers_.erase(obs); 225 observers_.erase(obs);
214 if (observers_.empty()) { 226 if (observers_.empty()) {
215 missed_begin_frame_args_ = BeginFrameArgs(); 227 missed_begin_frame_args_ = BeginFrameArgs();
216 client_->OnNeedsBeginFrames(false); 228 client_->OnNeedsBeginFrames(false);
217 } 229 }
218 } 230 }
219 231
232 bool ExternalBeginFrameSource::IsThrottled() const {
233 return true;
234 }
235
220 void ExternalBeginFrameSource::OnSetBeginFrameSourcePaused(bool paused) { 236 void ExternalBeginFrameSource::OnSetBeginFrameSourcePaused(bool paused) {
221 if (paused_ == paused) 237 if (paused_ == paused)
222 return; 238 return;
223 paused_ = paused; 239 paused_ = paused;
224 std::unordered_set<BeginFrameObserver*> observers(observers_); 240 std::unordered_set<BeginFrameObserver*> observers(observers_);
225 for (auto* obs : observers) 241 for (auto* obs : observers)
226 obs->OnBeginFrameSourcePausedChanged(paused_); 242 obs->OnBeginFrameSourcePausedChanged(paused_);
227 } 243 }
228 244
229 void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) { 245 void ExternalBeginFrameSource::OnBeginFrame(const BeginFrameArgs& args) {
230 missed_begin_frame_args_ = args; 246 missed_begin_frame_args_ = args;
231 missed_begin_frame_args_.type = BeginFrameArgs::MISSED; 247 missed_begin_frame_args_.type = BeginFrameArgs::MISSED;
232 std::unordered_set<BeginFrameObserver*> observers(observers_); 248 std::unordered_set<BeginFrameObserver*> observers(observers_);
233 for (auto* obs : observers) 249 for (auto* obs : observers)
234 obs->OnBeginFrame(args); 250 obs->OnBeginFrame(args);
235 } 251 }
236 252
237 } // namespace cc 253 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.h ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698