Chromium Code Reviews| 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..1bfe7ab4a71fea4159b7e33a2595f31006a5b1ba 100644 |
| --- a/cc/scheduler/begin_frame_source.h |
| +++ b/cc/scheduler/begin_frame_source.h |
| @@ -122,67 +122,44 @@ class CC_EXPORT BeginFrameSource { |
| virtual void RemoveObserver(BeginFrameObserver* obs) = 0; |
| }; |
| -// Simple base class which implements a BeginFrameSource. |
| -// Implementation classes should: |
| -// - Implement the pure virtual (Set)NeedsBeginFrames methods from |
| -// BeginFrameSource. |
| -// - Use the CallOnBeginFrame method to call to the observer(s). |
| -class CC_EXPORT BeginFrameSourceBase : public BeginFrameSource { |
| +// A frame source which ticks itself independently. |
| +class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSource { |
| public: |
| - ~BeginFrameSourceBase() override; |
| - |
| - // BeginFrameSource |
| - void DidFinishFrame(BeginFrameObserver* obs, |
| - size_t remaining_frames) override {} |
| - void AddObserver(BeginFrameObserver* obs) override; |
| - void RemoveObserver(BeginFrameObserver* obs) override; |
| - |
| - protected: |
| - BeginFrameSourceBase(); |
| - |
| - // These methods should be used by subclasses to make the call to the |
| - // observers. |
| - void CallOnBeginFrame(const BeginFrameArgs& args); |
| - void SetBeginFrameSourcePaused(bool paused); |
| - |
| - // This notifies that the subclass that it must turn on or off its mechnanism |
| - // for producing BeginFrames. |
| - virtual void OnNeedsBeginFramesChanged(bool needs_begin_frames) {} |
|
enne (OOO)
2016/06/15 19:46:56
Just moving this logic up into each class is nice
|
| - |
| - bool needs_begin_frames() const { return !observers_.empty(); } |
| - |
| - std::set<BeginFrameObserver*> observers_; |
| - bool paused_; |
| + ~SyntheticBeginFrameSource() override; |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(BeginFrameSourceBase); |
| + virtual void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| + base::TimeDelta interval) = 0; |
| + // This overrides any past or future interval from updating vsync parameters. |
| + virtual void SetAuthoritativeVSyncInterval(base::TimeDelta interval) = 0; |
| }; |
| // A frame source which calls BeginFrame (at the next possible time) as soon as |
| // remaining frames reaches zero. |
| -class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase { |
| +class CC_EXPORT BackToBackBeginFrameSource : public SyntheticBeginFrameSource, |
| + public DelayBasedTimeSourceClient { |
| public: |
| explicit BackToBackBeginFrameSource( |
| - base::SingleThreadTaskRunner* task_runner); |
| + std::unique_ptr<DelayBasedTimeSource> time_source); |
| ~BackToBackBeginFrameSource() override; |
| - // BeginFrameSource |
| + // BeginFrameSource implementation. |
| 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_; |
| + // SyntheticBeginFrameSource implementation. |
| + void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| + base::TimeDelta interval) override {} |
| + void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override {} |
| - void PostPendingBeginFramesTask(); |
| - void SendPendingBeginFrames(); |
| + // DelayBasedTimeSourceClient implementation. |
| + void OnTimerTick() override; |
| private: |
| + std::unique_ptr<DelayBasedTimeSource> time_source_; |
| + std::set<BeginFrameObserver*> observers_; |
| + std::set<BeginFrameObserver*> pending_begin_frame_observers_; |
| base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
| DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); |
| @@ -190,37 +167,37 @@ class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase { |
| // 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 { |
| +class CC_EXPORT DelayBasedBeginFrameSource : public SyntheticBeginFrameSource, |
| + public DelayBasedTimeSourceClient { |
| public: |
| - explicit SyntheticBeginFrameSource(base::SingleThreadTaskRunner* task_runner, |
| - base::TimeDelta initial_vsync_interval); |
| - explicit SyntheticBeginFrameSource( |
| + explicit DelayBasedBeginFrameSource( |
| std::unique_ptr<DelayBasedTimeSource> time_source); |
| - ~SyntheticBeginFrameSource() override; |
| - |
| - void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| - base::TimeDelta interval); |
| - // This overrides any past or future interval from updating vsync parameters. |
| - void SetAuthoritativeVSyncInterval(base::TimeDelta interval); |
| + ~DelayBasedBeginFrameSource() override; |
| - // BeginFrameSourceBase |
| + // BeginFrameSource implementation. |
| void AddObserver(BeginFrameObserver* obs) override; |
| - void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; |
| + void RemoveObserver(BeginFrameObserver* obs) override; |
| + void DidFinishFrame(BeginFrameObserver* obs, |
| + size_t remaining_frames) override {} |
| + |
| + // SyntheticBeginFrameSource implementation. |
| + void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| + base::TimeDelta interval) override; |
| + void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override; |
| - // DelayBasedTimeSourceClient |
| + // DelayBasedTimeSourceClient implementation. |
| void OnTimerTick() override; |
| - protected: |
| + private: |
| BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
| BeginFrameArgs::BeginFrameArgsType type); |
| std::unique_ptr<DelayBasedTimeSource> time_source_; |
| + std::set<BeginFrameObserver*> observers_; |
| base::TimeTicks last_timebase_; |
| base::TimeDelta authoritative_interval_; |
| - private: |
| - DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource); |
| + DISALLOW_COPY_AND_ASSIGN(DelayBasedBeginFrameSource); |
| }; |
| } // namespace cc |