OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |