| 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 |