| 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 #ifndef CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ | 5 #ifndef CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
| 6 #define CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ | 6 #define CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 // function. | 64 // function. |
| 65 class CC_EXPORT BeginFrameObserverMixIn : public BeginFrameObserver { | 65 class CC_EXPORT BeginFrameObserverMixIn : public BeginFrameObserver { |
| 66 public: | 66 public: |
| 67 BeginFrameObserverMixIn(); | 67 BeginFrameObserverMixIn(); |
| 68 | 68 |
| 69 // BeginFrameObserver | 69 // BeginFrameObserver |
| 70 | 70 |
| 71 // Traces |args| and DCHECK |args| satisfies pre-conditions then calls | 71 // Traces |args| and DCHECK |args| satisfies pre-conditions then calls |
| 72 // OnBeginFrameMixInDelegate and updates the last_begin_frame_args_ value on | 72 // OnBeginFrameMixInDelegate and updates the last_begin_frame_args_ value on |
| 73 // true. | 73 // true. |
| 74 virtual void OnBeginFrame(const BeginFrameArgs& args) OVERRIDE; | 74 virtual void OnBeginFrame(const BeginFrameArgs& args) override; |
| 75 virtual const BeginFrameArgs LastUsedBeginFrameArgs() const OVERRIDE; | 75 virtual const BeginFrameArgs LastUsedBeginFrameArgs() const override; |
| 76 | 76 |
| 77 // Outputs last_begin_frame_args_ | 77 // Outputs last_begin_frame_args_ |
| 78 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; | 78 virtual void AsValueInto(base::debug::TracedValue* dict) const override; |
| 79 | 79 |
| 80 protected: | 80 protected: |
| 81 // Subclasses should override this method! | 81 // Subclasses should override this method! |
| 82 // Return true if the given argument is (or will be) used. | 82 // Return true if the given argument is (or will be) used. |
| 83 virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) = 0; | 83 virtual bool OnBeginFrameMixInDelegate(const BeginFrameArgs& args) = 0; |
| 84 | 84 |
| 85 BeginFrameArgs last_begin_frame_args_; | 85 BeginFrameArgs last_begin_frame_args_; |
| 86 int64_t dropped_begin_frame_args_; | 86 int64_t dropped_begin_frame_args_; |
| 87 }; | 87 }; |
| 88 | 88 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 // - Implement the pure virtual (Set)NeedsBeginFrames methods from | 127 // - Implement the pure virtual (Set)NeedsBeginFrames methods from |
| 128 // BeginFrameSource. | 128 // BeginFrameSource. |
| 129 // - Use the CallOnBeginFrame method to call to the observer(s). | 129 // - Use the CallOnBeginFrame method to call to the observer(s). |
| 130 // - Recommended (but not required) to call BeginFrameSourceMixIn::AsValueInto | 130 // - Recommended (but not required) to call BeginFrameSourceMixIn::AsValueInto |
| 131 // in their own AsValueInto implementation. | 131 // in their own AsValueInto implementation. |
| 132 class CC_EXPORT BeginFrameSourceMixIn : public BeginFrameSource { | 132 class CC_EXPORT BeginFrameSourceMixIn : public BeginFrameSource { |
| 133 public: | 133 public: |
| 134 virtual ~BeginFrameSourceMixIn() {} | 134 virtual ~BeginFrameSourceMixIn() {} |
| 135 | 135 |
| 136 // BeginFrameSource | 136 // BeginFrameSource |
| 137 virtual bool NeedsBeginFrames() const OVERRIDE; | 137 virtual bool NeedsBeginFrames() const override; |
| 138 virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE; | 138 virtual void SetNeedsBeginFrames(bool needs_begin_frames) override; |
| 139 virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE {} | 139 virtual void DidFinishFrame(size_t remaining_frames) override {} |
| 140 virtual void AddObserver(BeginFrameObserver* obs) OVERRIDE; | 140 virtual void AddObserver(BeginFrameObserver* obs) override; |
| 141 virtual void RemoveObserver(BeginFrameObserver* obs) OVERRIDE; | 141 virtual void RemoveObserver(BeginFrameObserver* obs) override; |
| 142 | 142 |
| 143 // Tracing support - Recommend (but not required) to call this implementation | 143 // Tracing support - Recommend (but not required) to call this implementation |
| 144 // in any override. | 144 // in any override. |
| 145 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; | 145 virtual void AsValueInto(base::debug::TracedValue* dict) const override; |
| 146 | 146 |
| 147 protected: | 147 protected: |
| 148 BeginFrameSourceMixIn(); | 148 BeginFrameSourceMixIn(); |
| 149 | 149 |
| 150 // These methods should be used by subclasses to make the call to the | 150 // These methods should be used by subclasses to make the call to the |
| 151 // observers. | 151 // observers. |
| 152 void CallOnBeginFrame(const BeginFrameArgs& args); | 152 void CallOnBeginFrame(const BeginFrameArgs& args); |
| 153 | 153 |
| 154 // This method should be overridden if you want to change some behaviour on | 154 // This method should be overridden if you want to change some behaviour on |
| 155 // needs_begin_frames change. | 155 // needs_begin_frames change. |
| 156 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) {} | 156 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) {} |
| 157 | 157 |
| 158 BeginFrameObserver* observer_; | 158 BeginFrameObserver* observer_; |
| 159 bool needs_begin_frames_; | 159 bool needs_begin_frames_; |
| 160 | 160 |
| 161 private: | 161 private: |
| 162 bool inside_as_value_into_; | 162 bool inside_as_value_into_; |
| 163 }; | 163 }; |
| 164 | 164 |
| 165 // A frame source which calls BeginFrame (at the next possible time) as soon as | 165 // A frame source which calls BeginFrame (at the next possible time) as soon as |
| 166 // remaining frames reaches zero. | 166 // remaining frames reaches zero. |
| 167 class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceMixIn { | 167 class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceMixIn { |
| 168 public: | 168 public: |
| 169 static scoped_ptr<BackToBackBeginFrameSource> Create( | 169 static scoped_ptr<BackToBackBeginFrameSource> Create( |
| 170 base::SingleThreadTaskRunner* task_runner); | 170 base::SingleThreadTaskRunner* task_runner); |
| 171 virtual ~BackToBackBeginFrameSource(); | 171 virtual ~BackToBackBeginFrameSource(); |
| 172 | 172 |
| 173 // BeginFrameSource | 173 // BeginFrameSource |
| 174 virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE; | 174 virtual void DidFinishFrame(size_t remaining_frames) override; |
| 175 | 175 |
| 176 // Tracing | 176 // Tracing |
| 177 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; | 177 virtual void AsValueInto(base::debug::TracedValue* dict) const override; |
| 178 | 178 |
| 179 protected: | 179 protected: |
| 180 explicit BackToBackBeginFrameSource( | 180 explicit BackToBackBeginFrameSource( |
| 181 base::SingleThreadTaskRunner* task_runner); | 181 base::SingleThreadTaskRunner* task_runner); |
| 182 virtual base::TimeTicks Now(); // Now overridable for testing | 182 virtual base::TimeTicks Now(); // Now overridable for testing |
| 183 | 183 |
| 184 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; | 184 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
| 185 base::SingleThreadTaskRunner* task_runner_; | 185 base::SingleThreadTaskRunner* task_runner_; |
| 186 | 186 |
| 187 bool send_begin_frame_posted_; | 187 bool send_begin_frame_posted_; |
| 188 | 188 |
| 189 // BeginFrameSourceMixIn | 189 // BeginFrameSourceMixIn |
| 190 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE; | 190 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override; |
| 191 | 191 |
| 192 void BeginFrame(); | 192 void BeginFrame(); |
| 193 }; | 193 }; |
| 194 | 194 |
| 195 // A frame source which is locked to an external parameters provides from a | 195 // A frame source which is locked to an external parameters provides from a |
| 196 // vsync source and generates BeginFrameArgs for it. | 196 // vsync source and generates BeginFrameArgs for it. |
| 197 class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceMixIn, | 197 class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceMixIn, |
| 198 public VSyncParameterObserver, | 198 public VSyncParameterObserver, |
| 199 public TimeSourceClient { | 199 public TimeSourceClient { |
| 200 public: | 200 public: |
| 201 static scoped_ptr<SyntheticBeginFrameSource> Create( | 201 static scoped_ptr<SyntheticBeginFrameSource> Create( |
| 202 base::SingleThreadTaskRunner* task_runner, | 202 base::SingleThreadTaskRunner* task_runner, |
| 203 base::TimeTicks initial_vsync_timebase, | 203 base::TimeTicks initial_vsync_timebase, |
| 204 base::TimeDelta initial_vsync_interval); | 204 base::TimeDelta initial_vsync_interval); |
| 205 virtual ~SyntheticBeginFrameSource(); | 205 virtual ~SyntheticBeginFrameSource(); |
| 206 | 206 |
| 207 // BeginFrameSource | 207 // BeginFrameSource |
| 208 virtual bool NeedsBeginFrames() const OVERRIDE; | 208 virtual bool NeedsBeginFrames() const override; |
| 209 | 209 |
| 210 // Tracing | 210 // Tracing |
| 211 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; | 211 virtual void AsValueInto(base::debug::TracedValue* dict) const override; |
| 212 | 212 |
| 213 // VSyncParameterObserver | 213 // VSyncParameterObserver |
| 214 virtual void OnUpdateVSyncParameters( | 214 virtual void OnUpdateVSyncParameters( |
| 215 base::TimeTicks new_vsync_timebase, | 215 base::TimeTicks new_vsync_timebase, |
| 216 base::TimeDelta new_vsync_interval) OVERRIDE; | 216 base::TimeDelta new_vsync_interval) override; |
| 217 | 217 |
| 218 // TimeSourceClient | 218 // TimeSourceClient |
| 219 virtual void OnTimerTick() OVERRIDE; | 219 virtual void OnTimerTick() override; |
| 220 | 220 |
| 221 protected: | 221 protected: |
| 222 explicit SyntheticBeginFrameSource( | 222 explicit SyntheticBeginFrameSource( |
| 223 scoped_refptr<DelayBasedTimeSource> time_source); | 223 scoped_refptr<DelayBasedTimeSource> time_source); |
| 224 | 224 |
| 225 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, | 225 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
| 226 BeginFrameArgs::BeginFrameArgsType type); | 226 BeginFrameArgs::BeginFrameArgsType type); |
| 227 | 227 |
| 228 // BeginFrameSourceMixIn | 228 // BeginFrameSourceMixIn |
| 229 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) OVERRIDE; | 229 virtual void OnNeedsBeginFramesChange(bool needs_begin_frames) override; |
| 230 | 230 |
| 231 scoped_refptr<DelayBasedTimeSource> time_source_; | 231 scoped_refptr<DelayBasedTimeSource> time_source_; |
| 232 }; | 232 }; |
| 233 | 233 |
| 234 // A "virtual" frame source which lets you switch between multiple other frame | 234 // A "virtual" frame source which lets you switch between multiple other frame |
| 235 // sources while making sure the BeginFrameArgs stays increasing (possibly | 235 // sources while making sure the BeginFrameArgs stays increasing (possibly |
| 236 // enforcing minimum boundry between BeginFrameArgs messages). | 236 // enforcing minimum boundry between BeginFrameArgs messages). |
| 237 class CC_EXPORT BeginFrameSourceMultiplexer : public BeginFrameSourceMixIn, | 237 class CC_EXPORT BeginFrameSourceMultiplexer : public BeginFrameSourceMixIn, |
| 238 public BeginFrameObserver { | 238 public BeginFrameObserver { |
| 239 public: | 239 public: |
| 240 static scoped_ptr<BeginFrameSourceMultiplexer> Create(); | 240 static scoped_ptr<BeginFrameSourceMultiplexer> Create(); |
| 241 virtual ~BeginFrameSourceMultiplexer(); | 241 virtual ~BeginFrameSourceMultiplexer(); |
| 242 | 242 |
| 243 void SetMinimumInterval(base::TimeDelta new_minimum_interval); | 243 void SetMinimumInterval(base::TimeDelta new_minimum_interval); |
| 244 | 244 |
| 245 void AddSource(BeginFrameSource* new_source); | 245 void AddSource(BeginFrameSource* new_source); |
| 246 void RemoveSource(BeginFrameSource* existing_source); | 246 void RemoveSource(BeginFrameSource* existing_source); |
| 247 void SetActiveSource(BeginFrameSource* new_source); | 247 void SetActiveSource(BeginFrameSource* new_source); |
| 248 const BeginFrameSource* ActiveSource(); | 248 const BeginFrameSource* ActiveSource(); |
| 249 | 249 |
| 250 // BeginFrameObserver | 250 // BeginFrameObserver |
| 251 // The mux is an BeginFrameObserver as it needs to proxy the OnBeginFrame | 251 // The mux is an BeginFrameObserver as it needs to proxy the OnBeginFrame |
| 252 // calls to preserve the monotonicity of the BeginFrameArgs when switching | 252 // calls to preserve the monotonicity of the BeginFrameArgs when switching |
| 253 // sources. | 253 // sources. |
| 254 virtual void OnBeginFrame(const BeginFrameArgs& args) OVERRIDE; | 254 virtual void OnBeginFrame(const BeginFrameArgs& args) override; |
| 255 virtual const BeginFrameArgs LastUsedBeginFrameArgs() const OVERRIDE; | 255 virtual const BeginFrameArgs LastUsedBeginFrameArgs() const override; |
| 256 | 256 |
| 257 // BeginFrameSource | 257 // BeginFrameSource |
| 258 virtual bool NeedsBeginFrames() const OVERRIDE; | 258 virtual bool NeedsBeginFrames() const override; |
| 259 virtual void SetNeedsBeginFrames(bool needs_begin_frames) OVERRIDE; | 259 virtual void SetNeedsBeginFrames(bool needs_begin_frames) override; |
| 260 virtual void DidFinishFrame(size_t remaining_frames) OVERRIDE; | 260 virtual void DidFinishFrame(size_t remaining_frames) override; |
| 261 | 261 |
| 262 // Tracing | 262 // Tracing |
| 263 virtual void AsValueInto(base::debug::TracedValue* dict) const OVERRIDE; | 263 virtual void AsValueInto(base::debug::TracedValue* dict) const override; |
| 264 | 264 |
| 265 protected: | 265 protected: |
| 266 BeginFrameSourceMultiplexer(); | 266 BeginFrameSourceMultiplexer(); |
| 267 explicit BeginFrameSourceMultiplexer(base::TimeDelta minimum_interval); | 267 explicit BeginFrameSourceMultiplexer(base::TimeDelta minimum_interval); |
| 268 | 268 |
| 269 bool HasSource(BeginFrameSource* source); | 269 bool HasSource(BeginFrameSource* source); |
| 270 bool IsIncreasing(const BeginFrameArgs& args); | 270 bool IsIncreasing(const BeginFrameArgs& args); |
| 271 | 271 |
| 272 base::TimeDelta minimum_interval_; | 272 base::TimeDelta minimum_interval_; |
| 273 | 273 |
| 274 BeginFrameSource* active_source_; | 274 BeginFrameSource* active_source_; |
| 275 std::set<BeginFrameSource*> source_list_; | 275 std::set<BeginFrameSource*> source_list_; |
| 276 }; | 276 }; |
| 277 | 277 |
| 278 } // namespace cc | 278 } // namespace cc |
| 279 | 279 |
| 280 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ | 280 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
| OLD | NEW |