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 <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 private: | 171 private: |
172 bool inside_as_value_into_; | 172 bool inside_as_value_into_; |
173 | 173 |
174 DISALLOW_COPY_AND_ASSIGN(BeginFrameSourceBase); | 174 DISALLOW_COPY_AND_ASSIGN(BeginFrameSourceBase); |
175 }; | 175 }; |
176 | 176 |
177 // A frame source which calls BeginFrame (at the next possible time) as soon as | 177 // A frame source which calls BeginFrame (at the next possible time) as soon as |
178 // remaining frames reaches zero. | 178 // remaining frames reaches zero. |
179 class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase { | 179 class CC_EXPORT BackToBackBeginFrameSource : public BeginFrameSourceBase { |
180 public: | 180 public: |
181 static scoped_ptr<BackToBackBeginFrameSource> Create( | 181 explicit BackToBackBeginFrameSource( |
182 base::SingleThreadTaskRunner* task_runner); | 182 base::SingleThreadTaskRunner* task_runner); |
183 ~BackToBackBeginFrameSource() override; | 183 ~BackToBackBeginFrameSource() override; |
184 | 184 |
185 // BeginFrameSource | 185 // BeginFrameSource |
186 void DidFinishFrame(size_t remaining_frames) override; | 186 void DidFinishFrame(size_t remaining_frames) override; |
187 | 187 |
188 // BeginFrameSourceBase | 188 // BeginFrameSourceBase |
189 void AddObserver(BeginFrameObserver* obs) override; | 189 void AddObserver(BeginFrameObserver* obs) override; |
190 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; | 190 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; |
191 | 191 |
192 // Tracing | 192 // Tracing |
193 void AsValueInto(base::trace_event::TracedValue* dict) const override; | 193 void AsValueInto(base::trace_event::TracedValue* dict) const override; |
194 | 194 |
195 protected: | 195 protected: |
196 explicit BackToBackBeginFrameSource( | |
197 base::SingleThreadTaskRunner* task_runner); | |
198 virtual base::TimeTicks Now(); // Now overridable for testing | 196 virtual base::TimeTicks Now(); // Now overridable for testing |
199 | 197 |
200 base::SingleThreadTaskRunner* task_runner_; | 198 base::SingleThreadTaskRunner* task_runner_; |
201 base::CancelableClosure begin_frame_task_; | 199 base::CancelableClosure begin_frame_task_; |
202 | 200 |
203 void PostBeginFrame(); | 201 void PostBeginFrame(); |
204 void BeginFrame(); | 202 void BeginFrame(); |
205 | 203 |
206 private: | 204 private: |
207 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; | 205 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
208 | 206 |
209 DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); | 207 DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); |
210 }; | 208 }; |
211 | 209 |
212 // A frame source which is locked to an external parameters provides from a | 210 // A frame source which is locked to an external parameters provides from a |
213 // vsync source and generates BeginFrameArgs for it. | 211 // vsync source and generates BeginFrameArgs for it. |
214 class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase, | 212 class CC_EXPORT SyntheticBeginFrameSource : public BeginFrameSourceBase, |
215 public DelayBasedTimeSourceClient { | 213 public DelayBasedTimeSourceClient { |
216 public: | 214 public: |
217 static scoped_ptr<SyntheticBeginFrameSource> Create( | 215 explicit SyntheticBeginFrameSource(base::SingleThreadTaskRunner* task_runner, |
218 base::SingleThreadTaskRunner* task_runner, | 216 base::TimeDelta initial_vsync_interval); |
219 base::TimeDelta initial_vsync_interval); | 217 explicit SyntheticBeginFrameSource( |
| 218 scoped_ptr<DelayBasedTimeSource> time_source); |
220 ~SyntheticBeginFrameSource() override; | 219 ~SyntheticBeginFrameSource() override; |
221 | 220 |
222 void OnUpdateVSyncParameters(base::TimeTicks new_vsync_timebase, | 221 void OnUpdateVSyncParameters(base::TimeTicks new_vsync_timebase, |
223 base::TimeDelta new_vsync_interval); | 222 base::TimeDelta new_vsync_interval); |
224 | 223 |
225 // BeginFrameSourceBase | 224 // BeginFrameSourceBase |
226 void AddObserver(BeginFrameObserver* obs) override; | 225 void AddObserver(BeginFrameObserver* obs) override; |
227 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; | 226 void OnNeedsBeginFramesChanged(bool needs_begin_frames) override; |
228 | 227 |
229 // Tracing | 228 // Tracing |
230 void AsValueInto(base::trace_event::TracedValue* dict) const override; | 229 void AsValueInto(base::trace_event::TracedValue* dict) const override; |
231 | 230 |
232 // DelayBasedTimeSourceClient | 231 // DelayBasedTimeSourceClient |
233 void OnTimerTick() override; | 232 void OnTimerTick() override; |
234 | 233 |
235 protected: | 234 protected: |
236 explicit SyntheticBeginFrameSource( | |
237 scoped_ptr<DelayBasedTimeSource> time_source); | |
238 | |
239 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, | 235 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
240 BeginFrameArgs::BeginFrameArgsType type); | 236 BeginFrameArgs::BeginFrameArgsType type); |
241 | 237 |
242 scoped_ptr<DelayBasedTimeSource> time_source_; | 238 scoped_ptr<DelayBasedTimeSource> time_source_; |
243 | 239 |
244 private: | 240 private: |
245 DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource); | 241 DISALLOW_COPY_AND_ASSIGN(SyntheticBeginFrameSource); |
246 }; | 242 }; |
247 | 243 |
248 } // namespace cc | 244 } // namespace cc |
249 | 245 |
250 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ | 246 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
OLD | NEW |