| 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..8a3034cc702bdd4415105c9c902d31f704ad6d46 100644
|
| --- a/cc/scheduler/begin_frame_source.h
|
| +++ b/cc/scheduler/begin_frame_source.h
|
| @@ -17,14 +17,6 @@
|
| #include "cc/output/begin_frame_args.h"
|
| #include "cc/scheduler/delay_based_time_source.h"
|
|
|
| -#ifdef NDEBUG
|
| -#define DEBUG_FRAMES(...)
|
| -#else
|
| -#define DEBUG_FRAMES(name, arg1_name, arg1_val, arg2_name, arg2_val) \
|
| - TRACE_EVENT2(TRACE_DISABLED_BY_DEFAULT("cc.debug.scheduler.frames"), name, \
|
| - arg1_name, arg1_val, arg2_name, arg2_val);
|
| -#endif
|
| -
|
| namespace cc {
|
|
|
| // (Pure) Interface for observing BeginFrame messages from BeginFrameSource
|
| @@ -122,67 +114,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) {}
|
| -
|
| - 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::unordered_set<BeginFrameObserver*> observers_;
|
| + std::unordered_set<BeginFrameObserver*> pending_begin_frame_observers_;
|
| base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource);
|
| @@ -190,37 +159,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::unordered_set<BeginFrameObserver*> observers_;
|
| base::TimeTicks last_timebase_;
|
| base::TimeDelta authoritative_interval_;
|
|
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource);
|
| + DISALLOW_COPY_AND_ASSIGN(DelayBasedBeginFrameSource);
|
| };
|
|
|
| } // namespace cc
|
|
|