Index: cc/scheduler/begin_frame_source.h |
diff --git a/cc/scheduler/begin_frame_source.h b/cc/scheduler/begin_frame_source.h |
deleted file mode 100644 |
index d15139d76f51325c4b989eaf4679e960c75038a0..0000000000000000000000000000000000000000 |
--- a/cc/scheduler/begin_frame_source.h |
+++ /dev/null |
@@ -1,283 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
-#define CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
- |
-#include <set> |
-#include <string> |
- |
-#include "base/logging.h" |
-#include "base/trace_event/trace_event.h" |
-#include "cc/output/begin_frame_args.h" |
-#include "cc/output/vsync_parameter_observer.h" |
-#include "cc/scheduler/delay_based_time_source.h" |
- |
-namespace cc { |
- |
-// (Pure) Interface for observing BeginFrame messages from BeginFrameSource |
-// objects. |
-class BeginFrameObserver { |
- public: |
- virtual ~BeginFrameObserver() {} |
- |
- // The |args| given to OnBeginFrame is guaranteed to have |
- // |args|.IsValid()==true and have |args|.frame_time |
- // field be strictly greater than the previous call. |
- // |
- // Side effects: This function can (and most of the time *will*) change the |
- // return value of the LastUsedBeginFrameArgs method. See the documentation |
- // on that method for more information. |
- virtual void OnBeginFrame(const BeginFrameArgs& args) = 0; |
- |
- // Returns the last BeginFrameArgs used by the observer. This method's return |
- // value is affected by the OnBeginFrame method! |
- // |
- // - Before the first call of OnBeginFrame, this method should return a |
- // BeginFrameArgs on which IsValid() returns false. |
- // |
- // - If the |args| passed to OnBeginFrame is (or *will be*) used, then |
- // LastUsedBeginFrameArgs return value should become the |args| given to |
- // OnBeginFrame. |
- // |
- // - If the |args| passed to OnBeginFrame is dropped, then |
- // LastUsedBeginFrameArgs return value should *not* change. |
- // |
- // These requirements are designed to allow chaining and nesting of |
- // BeginFrameObservers which filter the incoming BeginFrame messages while |
- // preventing "double dropping" and other bad side effects. |
- virtual const BeginFrameArgs LastUsedBeginFrameArgs() const = 0; |
- |
- // Tracing support |
- virtual void AsValueInto(base::trace_event::TracedValue* dict) const = 0; |
-}; |
- |
-// Simple mix in which implements a BeginFrameObserver which checks the |
-// incoming values meet the BeginFrameObserver requirements and implements the |
-// required LastUsedBeginFrameArgs behaviour. |
-// |
-// Users of this mix in should; |
-// - Implement the OnBeginFrameMixInDelegate function. |
-// - Recommended (but not required) to call |
-// BeginFrameObserverMixIn::OnValueInto in their overridden OnValueInto |
-// function. |
-class BeginFrameObserverMixIn : public BeginFrameObserver { |
- public: |
- BeginFrameObserverMixIn(); |
- |
- // BeginFrameObserver |
- |
- // Traces |args| and DCHECK |args| satisfies pre-conditions then calls |
- // OnBeginFrameMixInDelegate and updates the last_begin_frame_args_ value on |
- // true. |
- void OnBeginFrame(const BeginFrameArgs& args) override; |
- const BeginFrameArgs LastUsedBeginFrameArgs() const override; |
- |
- // Outputs last_begin_frame_args_ |
- void AsValueInto(base::trace_event::TracedValue* dict) const override; |
- |
- protected: |
- // Subclasses should override this method! |
- // Return true if the given argument is (or will be) used. |
- virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) = 0; |
- |
- BeginFrameArgs last_begin_frame_args_; |
- int64_t dropped_begin_frame_args_; |
-}; |
- |
-// Interface for a class which produces BeginFrame calls to a |
-// BeginFrameObserver. |
-// |
-// BeginFrame calls *normally* occur just after a vsync interrupt when input |
-// processing has been finished and provide information about the time values |
-// of the vsync times. *However*, these values can be heavily modified or even |
-// plain made up (when no vsync signal is available or vsync throttling is |
-// turned off). See the BeginFrameObserver for information about the guarantees |
-// all BeginFrameSources *must* provide. |
-class BeginFrameSource { |
- public: |
- virtual ~BeginFrameSource() {} |
- |
- // SetNeedsBeginFrames is the on/off "switch" for the BeginFrameSource. When |
- // set to false no more BeginFrame messages should be sent to observer. |
- virtual bool NeedsBeginFrames() const = 0; |
- virtual void SetNeedsBeginFrames(bool needs_begin_frames) = 0; |
- |
- // DidFinishFrame provides back pressure to a frame source about frame |
- // processing (rather than toggling SetNeedsBeginFrames every frame). It is |
- // used by systems like the BackToBackFrameSource to make sure only one frame |
- // is pending at a time. |
- virtual void DidFinishFrame(size_t remaining_frames) = 0; |
- |
- // Add/Remove an observer from the source. |
- // *At the moment* only a single observer can be added to the source, however |
- // in the future this may be extended to allow multiple observers. |
- // If making this change, please use base::ObserverList to do so. |
- virtual void AddObserver(BeginFrameObserver* obs) = 0; |
- virtual void RemoveObserver(BeginFrameObserver* obs) = 0; |
- |
- // Tells the Source that client is ready to handle BeginFrames messages. |
- virtual void SetClientReady() = 0; |
- |
- // Tracing support - Recommend (but not required) to call this implementation |
- // in any override. |
- virtual void AsValueInto(base::trace_event::TracedValue* dict) const = 0; |
-}; |
- |
-// Simple mix in 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). |
-// - Recommended (but not required) to call BeginFrameSourceMixIn::AsValueInto |
-// in their own AsValueInto implementation. |
-class BeginFrameSourceMixIn : public BeginFrameSource { |
- public: |
- ~BeginFrameSourceMixIn() override {} |
- |
- // BeginFrameSource |
- bool NeedsBeginFrames() const final; |
- void SetNeedsBeginFrames(bool needs_begin_frames) final; |
- void DidFinishFrame(size_t remaining_frames) override {} |
- void AddObserver(BeginFrameObserver* obs) final; |
- void RemoveObserver(BeginFrameObserver* obs) final; |
- void SetClientReady() override {} |
- |
- // Tracing support - Recommend (but not required) to call this implementation |
- // in any override. |
- void AsValueInto(base::trace_event::TracedValue* dict) const override; |
- |
- protected: |
- BeginFrameSourceMixIn(); |
- |
- // These methods should be used by subclasses to make the call to the |
- // observers. |
- void CallOnBeginFrame(const BeginFrameArgs& args); |
- |
- // This method should be overridden if you want to change some behaviour on |
- // needs_begin_frames change. |
- virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) {} |
- |
- BeginFrameObserver* observer_; |
- bool needs_begin_frames_; |
- |
- private: |
- bool inside_as_value_into_; |
-}; |
- |
-// A frame source which calls BeginFrame (at the next possible time) as soon as |
-// remaining frames reaches zero. |
-class BackToBackBeginFrameSource : public BeginFrameSourceMixIn { |
- public: |
- static scoped_ptr<BackToBackBeginFrameSource> Create( |
- base::SingleThreadTaskRunner* task_runner); |
- ~BackToBackBeginFrameSource() override; |
- |
- // BeginFrameSource |
- void DidFinishFrame(size_t remaining_frames) override; |
- |
- // Tracing |
- void AsValueInto(base::trace_event::TracedValue* dict) const override; |
- |
- protected: |
- explicit BackToBackBeginFrameSource( |
- base::SingleThreadTaskRunner* task_runner); |
- virtual base::TimeTicks Now(); // Now overridable for testing |
- |
- base::SingleThreadTaskRunner* task_runner_; |
- |
- bool send_begin_frame_posted_; |
- |
- // BeginFrameSourceMixIn |
- void OnNeedsBeginFramesChange(bool needs_begin_frames) override; |
- |
- void BeginFrame(); |
- |
- private: |
- base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
-}; |
- |
-// A frame source which is locked to an external parameters provides from a |
-// vsync source and generates BeginFrameArgs for it. |
-class SyntheticBeginFrameSource : public BeginFrameSourceMixIn, |
- public VSyncParameterObserver, |
- public TimeSourceClient { |
- public: |
- static scoped_ptr<SyntheticBeginFrameSource> Create( |
- base::SingleThreadTaskRunner* task_runner, |
- base::TimeTicks initial_vsync_timebase, |
- base::TimeDelta initial_vsync_interval); |
- ~SyntheticBeginFrameSource() override; |
- |
- // Tracing |
- void AsValueInto(base::trace_event::TracedValue* dict) const override; |
- |
- // VSyncParameterObserver |
- void OnUpdateVSyncParameters(base::TimeTicks new_vsync_timebase, |
- base::TimeDelta new_vsync_interval) override; |
- |
- // TimeSourceClient |
- void OnTimerTick() override; |
- |
- protected: |
- explicit SyntheticBeginFrameSource( |
- scoped_refptr<DelayBasedTimeSource> time_source); |
- |
- BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
- BeginFrameArgs::BeginFrameArgsType type); |
- |
- // BeginFrameSourceMixIn |
- void OnNeedsBeginFramesChange(bool needs_begin_frames) override; |
- |
- scoped_refptr<DelayBasedTimeSource> time_source_; |
-}; |
- |
-// A "virtual" frame source which lets you switch between multiple other frame |
-// sources while making sure the BeginFrameArgs stays increasing (possibly |
-// enforcing minimum boundry between BeginFrameArgs messages). |
-class BeginFrameSourceMultiplexer : public BeginFrameSourceMixIn, |
- public BeginFrameObserver { |
- public: |
- static scoped_ptr<BeginFrameSourceMultiplexer> Create(); |
- ~BeginFrameSourceMultiplexer() override; |
- |
- void SetMinimumInterval(base::TimeDelta new_minimum_interval); |
- |
- void AddSource(BeginFrameSource* new_source); |
- void RemoveSource(BeginFrameSource* existing_source); |
- void SetActiveSource(BeginFrameSource* new_source); |
- const BeginFrameSource* ActiveSource(); |
- |
- // BeginFrameObserver |
- // The mux is an BeginFrameObserver as it needs to proxy the OnBeginFrame |
- // calls to preserve the monotonicity of the BeginFrameArgs when switching |
- // sources. |
- void OnBeginFrame(const BeginFrameArgs& args) override; |
- const BeginFrameArgs LastUsedBeginFrameArgs() const override; |
- |
- // BeginFrameSource |
- void DidFinishFrame(size_t remaining_frames) override; |
- |
- // BeginFrameSourceMixIn |
- void OnNeedsBeginFramesChange(bool needs_begin_frames) override; |
- |
- // Tracing |
- void AsValueInto(base::trace_event::TracedValue* dict) const override; |
- |
- protected: |
- BeginFrameSourceMultiplexer(); |
- explicit BeginFrameSourceMultiplexer(base::TimeDelta minimum_interval); |
- |
- bool HasSource(BeginFrameSource* source); |
- bool IsIncreasing(const BeginFrameArgs& args); |
- |
- base::TimeDelta minimum_interval_; |
- |
- BeginFrameSource* active_source_; |
- std::set<BeginFrameSource*> source_list_; |
-}; |
- |
-} // namespace cc |
- |
-#endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |