Index: cc/scheduler/begin_frame_source.h |
diff --git a/cc/scheduler/begin_frame_source.h b/cc/scheduler/begin_frame_source.h |
index 575ab06beb450555065d2801b7f388c3b4180bdc..1f5aabb6fe271a8655a768e345a16ec547dcd09b 100644 |
--- a/cc/scheduler/begin_frame_source.h |
+++ b/cc/scheduler/begin_frame_source.h |
@@ -131,7 +131,7 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource { |
public: |
~BeginFrameSourceBase() override; |
- // BeginFrameSource |
+ // BeginFrameSource implementation. |
void DidFinishFrame(BeginFrameObserver* obs, |
size_t remaining_frames) override {} |
void AddObserver(BeginFrameObserver* obs) override; |
@@ -145,7 +145,7 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource { |
void CallOnBeginFrame(const BeginFrameArgs& args); |
void SetBeginFrameSourcePaused(bool paused); |
- // This notifies that the subclass that it must turn on or off its mechnanism |
+ // This notifies the subclass that it must turn on or off its mechnanism |
// for producing BeginFrames. |
virtual void OnNeedsBeginFramesChanged(bool needs_begin_frames) {} |
@@ -158,43 +158,11 @@ class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource { |
DISALLOW_COPY_AND_ASSIGN(BeginFrameSourceBase); |
}; |
-// A frame source which calls BeginFrame (at the next possible time) as soon as |
-// remaining frames reaches zero. |
-class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase { |
- public: |
- explicit BackToBackBeginFrameSource( |
- base::SingleThreadTaskRunner* task_runner); |
- ~BackToBackBeginFrameSource() override; |
- |
- // BeginFrameSource |
- void AddObserver(BeginFrameObserver* obs) override; |
- void RemoveObserver(BeginFrameObserver* obs) override; |
- void DidFinishFrame(BeginFrameObserver* obs, |
- size_t remaining_frames) override; |
- |
- protected: |
- virtual base::TimeTicks Now(); // Now overridable for testing |
- |
- base::SingleThreadTaskRunner* task_runner_; |
- base::CancelableClosure begin_frame_task_; |
- std::set<BeginFrameObserver*> pending_begin_frame_observers_; |
- |
- void PostPendingBeginFramesTask(); |
- void SendPendingBeginFrames(); |
- |
- private: |
- base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); |
-}; |
- |
// A frame source which is locked to an external parameters provides from a |
// vsync source and generates BeginFrameArgs for it. |
class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase, |
public DelayBasedTimeSourceClient { |
public: |
- explicit SyntheticBeginFrameSource(base::SingleThreadTaskRunner* task_runner, |
- base::TimeDelta initial_vsync_interval); |
explicit SyntheticBeginFrameSource( |
std::unique_ptr<DelayBasedTimeSource> time_source); |
~SyntheticBeginFrameSource() override; |
@@ -204,25 +172,49 @@ class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase, |
// This overrides any past or future interval from updating vsync parameters. |
void SetAuthoritativeVSyncInterval(base::TimeDelta interval); |
- // BeginFrameSourceBase |
+ // BeginFrameSourceBase overrides. |
void AddObserver(BeginFrameObserver* obs) override; |
+ void RemoveObserver(BeginFrameObserver* obs) override; |
void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; |
+ void DidFinishFrame(BeginFrameObserver* obs, |
+ size_t remaining_frames) override; |
// DelayBasedTimeSourceClient |
void OnTimerTick() override; |
+ // When unthrottled, BeginFrames will be generates as fast as previous frames |
+ // finish for each observer. |
+ void SetUnthrottled(bool unthrottled); |
+ |
protected: |
BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
BeginFrameArgs::BeginFrameArgsType type); |
std::unique_ptr<DelayBasedTimeSource> time_source_; |
base::TimeTicks last_timebase_; |
+ base::TimeDelta last_interval_; |
base::TimeDelta authoritative_interval_; |
+ bool unthrottled_ = false; |
+ bool needs_unthrottled_tick_ = false; |
+ std::set<BeginFrameObserver*> frame_finished_observers_; |
+ |
private: |
DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource); |
}; |
+// A frame source which calls BeginFrame (at the next possible time) as soon as |
+// remaining frames reaches zero. |
+class CC_EXPORT BackToBackBeginFrameSource : public SyntheticBeginFrameSource { |
+ public: |
+ explicit BackToBackBeginFrameSource( |
+ base::SingleThreadTaskRunner* task_runner); |
+ ~BackToBackBeginFrameSource() override; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); |
+}; |
+ |
} // namespace cc |
#endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |