| 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 46   DCHECK(args.frame_time >= last_begin_frame_args_.frame_time); | 46   DCHECK(args.frame_time >= last_begin_frame_args_.frame_time); | 
| 47   bool used = OnBeginFrameMixInDelegate(args); | 47   bool used = OnBeginFrameMixInDelegate(args); | 
| 48   if (used) { | 48   if (used) { | 
| 49     last_begin_frame_args_ = args; | 49     last_begin_frame_args_ = args; | 
| 50   } else { | 50   } else { | 
| 51     ++dropped_begin_frame_args_; | 51     ++dropped_begin_frame_args_; | 
| 52   } | 52   } | 
| 53 } | 53 } | 
| 54 | 54 | 
| 55 void BeginFrameObserverMixIn::AsValueInto( | 55 void BeginFrameObserverMixIn::AsValueInto( | 
| 56     base::debug::TracedValue* dict) const { | 56     base::trace_event::TracedValue* dict) const { | 
| 57   dict->BeginDictionary("last_begin_frame_args_"); | 57   dict->BeginDictionary("last_begin_frame_args_"); | 
| 58   last_begin_frame_args_.AsValueInto(dict); | 58   last_begin_frame_args_.AsValueInto(dict); | 
| 59   dict->EndDictionary(); | 59   dict->EndDictionary(); | 
| 60   dict->SetInteger("dropped_begin_frame_args_", dropped_begin_frame_args_); | 60   dict->SetInteger("dropped_begin_frame_args_", dropped_begin_frame_args_); | 
| 61 } | 61 } | 
| 62 | 62 | 
| 63 // BeginFrameSourceMixIn ------------------------------------------------------ | 63 // BeginFrameSourceMixIn ------------------------------------------------------ | 
| 64 BeginFrameSourceMixIn::BeginFrameSourceMixIn() | 64 BeginFrameSourceMixIn::BeginFrameSourceMixIn() | 
| 65     : observer_(NULL), | 65     : observer_(NULL), | 
| 66       needs_begin_frames_(false), | 66       needs_begin_frames_(false), | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 110                "current observer", | 110                "current observer", | 
| 111                observer_, | 111                observer_, | 
| 112                "args", | 112                "args", | 
| 113                args.AsValue()); | 113                args.AsValue()); | 
| 114   if (observer_) { | 114   if (observer_) { | 
| 115     return observer_->OnBeginFrame(args); | 115     return observer_->OnBeginFrame(args); | 
| 116   } | 116   } | 
| 117 } | 117 } | 
| 118 | 118 | 
| 119 // Tracing support | 119 // Tracing support | 
| 120 void BeginFrameSourceMixIn::AsValueInto(base::debug::TracedValue* dict) const { | 120 void BeginFrameSourceMixIn::AsValueInto( | 
|  | 121     base::trace_event::TracedValue* dict) const { | 
| 121   // As the observer might try to trace the source, prevent an infinte loop | 122   // As the observer might try to trace the source, prevent an infinte loop | 
| 122   // from occuring. | 123   // from occuring. | 
| 123   if (inside_as_value_into_) { | 124   if (inside_as_value_into_) { | 
| 124     dict->SetString("observer", "<loop detected>"); | 125     dict->SetString("observer", "<loop detected>"); | 
| 125     return; | 126     return; | 
| 126   } | 127   } | 
| 127 | 128 | 
| 128   if (observer_) { | 129   if (observer_) { | 
| 129     base::AutoReset<bool> prevent_loops( | 130     base::AutoReset<bool> prevent_loops( | 
| 130         const_cast<bool*>(&inside_as_value_into_), true); | 131         const_cast<bool*>(&inside_as_value_into_), true); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 191 // BeginFrameSource support | 192 // BeginFrameSource support | 
| 192 | 193 | 
| 193 void BackToBackBeginFrameSource::DidFinishFrame(size_t remaining_frames) { | 194 void BackToBackBeginFrameSource::DidFinishFrame(size_t remaining_frames) { | 
| 194   if (remaining_frames == 0) { | 195   if (remaining_frames == 0) { | 
| 195     OnNeedsBeginFramesChange(NeedsBeginFrames()); | 196     OnNeedsBeginFramesChange(NeedsBeginFrames()); | 
| 196   } | 197   } | 
| 197 } | 198 } | 
| 198 | 199 | 
| 199 // Tracing support | 200 // Tracing support | 
| 200 void BackToBackBeginFrameSource::AsValueInto( | 201 void BackToBackBeginFrameSource::AsValueInto( | 
| 201     base::debug::TracedValue* dict) const { | 202     base::trace_event::TracedValue* dict) const { | 
| 202   dict->SetString("type", "BackToBackBeginFrameSource"); | 203   dict->SetString("type", "BackToBackBeginFrameSource"); | 
| 203   BeginFrameSourceMixIn::AsValueInto(dict); | 204   BeginFrameSourceMixIn::AsValueInto(dict); | 
| 204   dict->SetBoolean("send_begin_frame_posted_", send_begin_frame_posted_); | 205   dict->SetBoolean("send_begin_frame_posted_", send_begin_frame_posted_); | 
| 205 } | 206 } | 
| 206 | 207 | 
| 207 // SyntheticBeginFrameSource --------------------------------------------- | 208 // SyntheticBeginFrameSource --------------------------------------------- | 
| 208 scoped_ptr<SyntheticBeginFrameSource> SyntheticBeginFrameSource::Create( | 209 scoped_ptr<SyntheticBeginFrameSource> SyntheticBeginFrameSource::Create( | 
| 209     base::SingleThreadTaskRunner* task_runner, | 210     base::SingleThreadTaskRunner* task_runner, | 
| 210     base::TimeTicks initial_vsync_timebase, | 211     base::TimeTicks initial_vsync_timebase, | 
| 211     base::TimeDelta initial_vsync_interval) { | 212     base::TimeDelta initial_vsync_interval) { | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 257 void SyntheticBeginFrameSource::OnNeedsBeginFramesChange( | 258 void SyntheticBeginFrameSource::OnNeedsBeginFramesChange( | 
| 258     bool needs_begin_frames) { | 259     bool needs_begin_frames) { | 
| 259   base::TimeTicks missed_tick_time = | 260   base::TimeTicks missed_tick_time = | 
| 260       time_source_->SetActive(needs_begin_frames); | 261       time_source_->SetActive(needs_begin_frames); | 
| 261   if (!missed_tick_time.is_null()) { | 262   if (!missed_tick_time.is_null()) { | 
| 262     CallOnBeginFrame( | 263     CallOnBeginFrame( | 
| 263         CreateBeginFrameArgs(missed_tick_time, BeginFrameArgs::MISSED)); | 264         CreateBeginFrameArgs(missed_tick_time, BeginFrameArgs::MISSED)); | 
| 264   } | 265   } | 
| 265 } | 266 } | 
| 266 | 267 | 
| 267 bool SyntheticBeginFrameSource::NeedsBeginFrames() const { |  | 
| 268   return time_source_->Active(); |  | 
| 269 } |  | 
| 270 |  | 
| 271 // Tracing support | 268 // Tracing support | 
| 272 void SyntheticBeginFrameSource::AsValueInto( | 269 void SyntheticBeginFrameSource::AsValueInto( | 
| 273     base::debug::TracedValue* dict) const { | 270     base::trace_event::TracedValue* dict) const { | 
| 274   dict->SetString("type", "SyntheticBeginFrameSource"); | 271   dict->SetString("type", "SyntheticBeginFrameSource"); | 
| 275   BeginFrameSourceMixIn::AsValueInto(dict); | 272   BeginFrameSourceMixIn::AsValueInto(dict); | 
| 276 | 273 | 
| 277   dict->BeginDictionary("time_source"); | 274   dict->BeginDictionary("time_source"); | 
| 278   time_source_->AsValueInto(dict); | 275   time_source_->AsValueInto(dict); | 
| 279   dict->EndDictionary(); | 276   dict->EndDictionary(); | 
| 280 } | 277 } | 
| 281 | 278 | 
| 282 // BeginFrameSourceMultiplexer ------------------------------------------- | 279 // BeginFrameSourceMultiplexer ------------------------------------------- | 
| 283 scoped_ptr<BeginFrameSourceMultiplexer> BeginFrameSourceMultiplexer::Create() { | 280 scoped_ptr<BeginFrameSourceMultiplexer> BeginFrameSourceMultiplexer::Create() { | 
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 399 | 396 | 
| 400 const BeginFrameArgs BeginFrameSourceMultiplexer::LastUsedBeginFrameArgs() | 397 const BeginFrameArgs BeginFrameSourceMultiplexer::LastUsedBeginFrameArgs() | 
| 401     const { | 398     const { | 
| 402   if (observer_) | 399   if (observer_) | 
| 403     return observer_->LastUsedBeginFrameArgs(); | 400     return observer_->LastUsedBeginFrameArgs(); | 
| 404   else | 401   else | 
| 405     return BeginFrameArgs(); | 402     return BeginFrameArgs(); | 
| 406 } | 403 } | 
| 407 | 404 | 
| 408 // BeginFrameSource support | 405 // BeginFrameSource support | 
| 409 bool BeginFrameSourceMultiplexer::NeedsBeginFrames() const { |  | 
| 410   if (active_source_) { |  | 
| 411     return active_source_->NeedsBeginFrames(); |  | 
| 412   } else { |  | 
| 413     return false; |  | 
| 414   } |  | 
| 415 } |  | 
| 416 |  | 
| 417 void BeginFrameSourceMultiplexer::OnNeedsBeginFramesChange( | 406 void BeginFrameSourceMultiplexer::OnNeedsBeginFramesChange( | 
| 418     bool needs_begin_frames) { | 407     bool needs_begin_frames) { | 
| 419   DEBUG_FRAMES("BeginFrameSourceMultiplexer::OnNeedsBeginFramesChange", | 408   DEBUG_FRAMES("BeginFrameSourceMultiplexer::OnNeedsBeginFramesChange", | 
| 420                "active_source", active_source_, "needs_begin_frames", | 409                "active_source", active_source_, "needs_begin_frames", | 
| 421                needs_begin_frames); | 410                needs_begin_frames); | 
| 422   if (active_source_) { | 411   if (active_source_) { | 
| 423     active_source_->SetNeedsBeginFrames(needs_begin_frames); | 412     active_source_->SetNeedsBeginFrames(needs_begin_frames); | 
| 424   } else { | 413   } else { | 
| 425     DCHECK(!needs_begin_frames); | 414     DCHECK(!needs_begin_frames); | 
| 426   } | 415   } | 
| 427 } | 416 } | 
| 428 | 417 | 
| 429 void BeginFrameSourceMultiplexer::DidFinishFrame(size_t remaining_frames) { | 418 void BeginFrameSourceMultiplexer::DidFinishFrame(size_t remaining_frames) { | 
| 430   DEBUG_FRAMES("BeginFrameSourceMultiplexer::DidFinishFrame", | 419   DEBUG_FRAMES("BeginFrameSourceMultiplexer::DidFinishFrame", | 
| 431                "active_source", | 420                "active_source", | 
| 432                active_source_, | 421                active_source_, | 
| 433                "remaining_frames", | 422                "remaining_frames", | 
| 434                remaining_frames); | 423                remaining_frames); | 
| 435   if (active_source_) { | 424   if (active_source_) { | 
| 436     active_source_->DidFinishFrame(remaining_frames); | 425     active_source_->DidFinishFrame(remaining_frames); | 
| 437   } | 426   } | 
| 438 } | 427 } | 
| 439 | 428 | 
| 440 // Tracing support | 429 // Tracing support | 
| 441 void BeginFrameSourceMultiplexer::AsValueInto( | 430 void BeginFrameSourceMultiplexer::AsValueInto( | 
| 442     base::debug::TracedValue* dict) const { | 431     base::trace_event::TracedValue* dict) const { | 
| 443   dict->SetString("type", "BeginFrameSourceMultiplexer"); | 432   dict->SetString("type", "BeginFrameSourceMultiplexer"); | 
| 444 | 433 | 
| 445   dict->SetInteger("minimum_interval_us", minimum_interval_.InMicroseconds()); | 434   dict->SetInteger("minimum_interval_us", minimum_interval_.InMicroseconds()); | 
| 446   if (observer_) { | 435   if (observer_) { | 
| 447     dict->BeginDictionary("last_begin_frame_args"); | 436     dict->BeginDictionary("last_begin_frame_args"); | 
| 448     observer_->LastUsedBeginFrameArgs().AsValueInto(dict); | 437     observer_->LastUsedBeginFrameArgs().AsValueInto(dict); | 
| 449     dict->EndDictionary(); | 438     dict->EndDictionary(); | 
| 450   } | 439   } | 
| 451 | 440 | 
| 452   if (active_source_) { | 441   if (active_source_) { | 
| (...skipping 29 matching lines...) Expand all  Loading... | 
| 482   if (!observer_->LastUsedBeginFrameArgs().IsValid()) | 471   if (!observer_->LastUsedBeginFrameArgs().IsValid()) | 
| 483     return true; | 472     return true; | 
| 484 | 473 | 
| 485   // Only allow new args have a *strictly bigger* frame_time value and statisfy | 474   // Only allow new args have a *strictly bigger* frame_time value and statisfy | 
| 486   // minimum interval requirement. | 475   // minimum interval requirement. | 
| 487   return (args.frame_time >= | 476   return (args.frame_time >= | 
| 488           observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); | 477           observer_->LastUsedBeginFrameArgs().frame_time + minimum_interval_); | 
| 489 } | 478 } | 
| 490 | 479 | 
| 491 }  // namespace cc | 480 }  // namespace cc | 
| OLD | NEW | 
|---|