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 "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 } | 214 } |
215 | 215 |
216 SyntheticBeginFrameSource::SyntheticBeginFrameSource( | 216 SyntheticBeginFrameSource::SyntheticBeginFrameSource( |
217 scoped_ptr<DelayBasedTimeSource> time_source) | 217 scoped_ptr<DelayBasedTimeSource> time_source) |
218 : BeginFrameSourceBase(), time_source_(time_source.Pass()) { | 218 : BeginFrameSourceBase(), time_source_(time_source.Pass()) { |
219 time_source_->SetActive(false); | 219 time_source_->SetActive(false); |
220 time_source_->SetClient(this); | 220 time_source_->SetClient(this); |
221 } | 221 } |
222 | 222 |
223 SyntheticBeginFrameSource::~SyntheticBeginFrameSource() { | 223 SyntheticBeginFrameSource::~SyntheticBeginFrameSource() { |
224 if (NeedsBeginFrames()) | 224 time_source_->SetActive(false); |
225 time_source_->SetActive(false); | |
226 } | 225 } |
227 | 226 |
228 void SyntheticBeginFrameSource::OnUpdateVSyncParameters( | 227 void SyntheticBeginFrameSource::OnUpdateVSyncParameters( |
229 base::TimeTicks new_vsync_timebase, | 228 base::TimeTicks new_vsync_timebase, |
230 base::TimeDelta new_vsync_interval) { | 229 base::TimeDelta new_vsync_interval) { |
231 time_source_->SetTimebaseAndInterval(new_vsync_timebase, new_vsync_interval); | 230 time_source_->SetTimebaseAndInterval(new_vsync_timebase, new_vsync_interval); |
232 } | 231 } |
233 | 232 |
234 BeginFrameArgs SyntheticBeginFrameSource::CreateBeginFrameArgs( | 233 BeginFrameArgs SyntheticBeginFrameSource::CreateBeginFrameArgs( |
235 base::TimeTicks frame_time, | 234 base::TimeTicks frame_time, |
236 BeginFrameArgs::BeginFrameArgsType type) { | 235 BeginFrameArgs::BeginFrameArgsType type) { |
237 base::TimeTicks deadline = time_source_->NextTickTime(); | 236 base::TimeTicks deadline = time_source_->NextTickTime(); |
238 return BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, | 237 return BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
239 time_source_->Interval(), type); | 238 time_source_->Interval(), type); |
240 } | 239 } |
241 | 240 |
242 // TimeSourceClient support | 241 // DelayBasedTimeSourceClient support |
243 void SyntheticBeginFrameSource::OnTimerTick() { | 242 void SyntheticBeginFrameSource::OnTimerTick() { |
244 CallOnBeginFrame(CreateBeginFrameArgs(time_source_->LastTickTime(), | 243 CallOnBeginFrame(CreateBeginFrameArgs(time_source_->LastTickTime(), |
245 BeginFrameArgs::NORMAL)); | 244 BeginFrameArgs::NORMAL)); |
246 } | 245 } |
247 | 246 |
248 // BeginFrameSourceBase support | 247 // BeginFrameSourceBase support |
249 void SyntheticBeginFrameSource::OnNeedsBeginFramesChange( | 248 void SyntheticBeginFrameSource::OnNeedsBeginFramesChange( |
250 bool needs_begin_frames) { | 249 bool needs_begin_frames) { |
251 base::TimeTicks missed_tick_time = | 250 base::TimeTicks missed_tick_time = |
252 time_source_->SetActive(needs_begin_frames); | 251 time_source_->SetActive(needs_begin_frames); |
253 if (!missed_tick_time.is_null()) { | 252 if (!missed_tick_time.is_null()) { |
| 253 DCHECK(needs_begin_frames); |
254 CallOnBeginFrame( | 254 CallOnBeginFrame( |
255 CreateBeginFrameArgs(missed_tick_time, BeginFrameArgs::MISSED)); | 255 CreateBeginFrameArgs(missed_tick_time, BeginFrameArgs::MISSED)); |
256 } | 256 } |
257 } | 257 } |
258 | 258 |
259 // Tracing support | 259 // Tracing support |
260 void SyntheticBeginFrameSource::AsValueInto( | 260 void SyntheticBeginFrameSource::AsValueInto( |
261 base::trace_event::TracedValue* dict) const { | 261 base::trace_event::TracedValue* dict) const { |
262 dict->SetString("type", "SyntheticBeginFrameSource"); | 262 dict->SetString("type", "SyntheticBeginFrameSource"); |
263 BeginFrameSourceBase::AsValueInto(dict); | 263 BeginFrameSourceBase::AsValueInto(dict); |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 if (!observer_->LastUsedBeginFrameArgs().IsValid()) | 460 if (!observer_->LastUsedBeginFrameArgs().IsValid()) |
461 return true; | 461 return true; |
462 | 462 |
463 // Only allow new args have a *strictly bigger* frame_time value and statisfy | 463 // Only allow new args have a *strictly bigger* frame_time value and statisfy |
464 // minimum interval requirement. | 464 // minimum interval requirement. |
465 return (args.frame_time >= | 465 return (args.frame_time >= |
466 observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); | 466 observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); |
467 } | 467 } |
468 | 468 |
469 } // namespace cc | 469 } // namespace cc |
OLD | NEW |