Chromium Code Reviews| 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 ~SyntheticBeginFrameSource() override; | 129 ~SyntheticBeginFrameSource() override; |
| 130 | 130 |
| 131 virtual void OnUpdateVSyncParameters(base::TimeTicks timebase, | 131 virtual void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| 132 base::TimeDelta interval) = 0; | 132 base::TimeDelta interval) = 0; |
| 133 // This overrides any past or future interval from updating vsync parameters. | 133 // This overrides any past or future interval from updating vsync parameters. |
| 134 virtual void SetAuthoritativeVSyncInterval(base::TimeDelta interval) = 0; | 134 virtual void SetAuthoritativeVSyncInterval(base::TimeDelta interval) = 0; |
| 135 }; | 135 }; |
| 136 | 136 |
| 137 // A frame source which calls BeginFrame (at the next possible time) as soon as | 137 // A frame source which calls BeginFrame (at the next possible time) as soon as |
| 138 // remaining frames reaches zero. | 138 // remaining frames reaches zero. |
| 139 class CC_EXPORT BackToBackBeginFrameSource : public SyntheticBeginFrameSource, | 139 class CC_EXPORT BackToBackBeginFrameSource : public SyntheticBeginFrameSource { |
| 140 public DelayBasedTimeSourceClient { | |
| 141 public: | 140 public: |
| 142 explicit BackToBackBeginFrameSource( | 141 explicit BackToBackBeginFrameSource( |
| 143 std::unique_ptr<DelayBasedTimeSource> time_source); | 142 base::SingleThreadTaskRunner* task_runner); |
| 143 // For testing. | |
|
danakj
2016/07/13 21:00:59
Can we avoid reintroducing for-testing constructor
| |
| 144 BackToBackBeginFrameSource(base::SingleThreadTaskRunner* task_runner, | |
| 145 base::TickClock* clock); | |
| 144 ~BackToBackBeginFrameSource() override; | 146 ~BackToBackBeginFrameSource() override; |
| 145 | 147 |
| 146 // BeginFrameSource implementation. | 148 // BeginFrameSource implementation. |
| 147 void AddObserver(BeginFrameObserver* obs) override; | 149 void AddObserver(BeginFrameObserver* obs) override; |
| 148 void RemoveObserver(BeginFrameObserver* obs) override; | 150 void RemoveObserver(BeginFrameObserver* obs) override; |
| 149 void DidFinishFrame(BeginFrameObserver* obs, | 151 void DidFinishFrame(BeginFrameObserver* obs, |
| 150 size_t remaining_frames) override; | 152 size_t remaining_frames) override; |
| 151 | 153 |
| 152 // SyntheticBeginFrameSource implementation. | 154 // SyntheticBeginFrameSource implementation. |
| 153 void OnUpdateVSyncParameters(base::TimeTicks timebase, | 155 void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| 154 base::TimeDelta interval) override {} | 156 base::TimeDelta interval) override {} |
| 155 void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override {} | 157 void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override {} |
| 156 | 158 |
| 157 // DelayBasedTimeSourceClient implementation. | 159 private: |
| 158 void OnTimerTick() override; | 160 void SendBeginFrame(); |
| 159 | 161 |
| 160 private: | 162 base::SingleThreadTaskRunner* task_runner_; |
| 161 std::unique_ptr<DelayBasedTimeSource> time_source_; | 163 base::TickClock* clock_; |
| 164 base::CancelableClosure begin_frame_callback_; | |
| 162 std::unordered_set<BeginFrameObserver*> observers_; | 165 std::unordered_set<BeginFrameObserver*> observers_; |
| 163 std::unordered_set<BeginFrameObserver*> pending_begin_frame_observers_; | 166 std::unordered_set<BeginFrameObserver*> pending_observers_; |
| 164 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; | 167 base::WeakPtrFactory<BackToBackBeginFrameSource> weak_factory_; |
| 165 | 168 |
| 166 DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); | 169 DISALLOW_COPY_AND_ASSIGN(BackToBackBeginFrameSource); |
| 167 }; | 170 }; |
| 168 | 171 |
| 169 // A frame source which is locked to an external parameters provides from a | 172 // A frame source which is locked to an external parameters provides from a |
| 170 // vsync source and generates BeginFrameArgs for it. | 173 // vsync source and generates BeginFrameArgs for it. |
| 171 class CC_EXPORT DelayBasedBeginFrameSource : public SyntheticBeginFrameSource, | 174 class CC_EXPORT DelayBasedBeginFrameSource : public SyntheticBeginFrameSource, |
| 172 public DelayBasedTimeSourceClient { | 175 public DelayBasedTimeSourceClient { |
| 173 public: | 176 public: |
| 174 explicit DelayBasedBeginFrameSource( | 177 explicit DelayBasedBeginFrameSource( |
| 175 std::unique_ptr<DelayBasedTimeSource> time_source); | 178 base::SingleThreadTaskRunner* task_runner); |
| 179 // For testing. | |
| 180 DelayBasedBeginFrameSource(base::SingleThreadTaskRunner* task_runner, | |
| 181 base::TickClock* clock); | |
| 176 ~DelayBasedBeginFrameSource() override; | 182 ~DelayBasedBeginFrameSource() override; |
| 177 | 183 |
| 178 // BeginFrameSource implementation. | 184 // BeginFrameSource implementation. |
| 179 void AddObserver(BeginFrameObserver* obs) override; | 185 void AddObserver(BeginFrameObserver* obs) override; |
| 180 void RemoveObserver(BeginFrameObserver* obs) override; | 186 void RemoveObserver(BeginFrameObserver* obs) override; |
| 181 void DidFinishFrame(BeginFrameObserver* obs, | 187 void DidFinishFrame(BeginFrameObserver* obs, |
| 182 size_t remaining_frames) override {} | 188 size_t remaining_frames) override {} |
| 183 | 189 |
| 184 // SyntheticBeginFrameSource implementation. | 190 // SyntheticBeginFrameSource implementation. |
| 185 void OnUpdateVSyncParameters(base::TimeTicks timebase, | 191 void OnUpdateVSyncParameters(base::TimeTicks timebase, |
| 186 base::TimeDelta interval) override; | 192 base::TimeDelta interval) override; |
| 187 void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override; | 193 void SetAuthoritativeVSyncInterval(base::TimeDelta interval) override; |
| 188 | 194 |
| 189 // DelayBasedTimeSourceClient implementation. | 195 // DelayBasedTimeSourceClient implementation. |
| 190 void OnTimerTick() override; | 196 void OnTimerTick() override; |
| 191 | 197 |
| 192 private: | 198 private: |
| 193 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, | 199 BeginFrameArgs CreateBeginFrameArgs(base::TimeTicks frame_time, |
| 194 BeginFrameArgs::BeginFrameArgsType type); | 200 BeginFrameArgs::BeginFrameArgsType type); |
| 201 void SendMissedBeginFrame(); | |
| 195 | 202 |
| 196 std::unique_ptr<DelayBasedTimeSource> time_source_; | 203 std::unique_ptr<DelayBasedTimeSource> time_source_; |
| 204 base::SingleThreadTaskRunner* task_runner_; | |
| 205 base::CancelableClosure missed_frame_callback_; | |
| 197 std::unordered_set<BeginFrameObserver*> observers_; | 206 std::unordered_set<BeginFrameObserver*> observers_; |
| 207 std::unordered_set<BeginFrameObserver*> missed_frame_observers_; | |
| 198 base::TimeTicks last_timebase_; | 208 base::TimeTicks last_timebase_; |
| 199 base::TimeDelta authoritative_interval_; | 209 base::TimeDelta authoritative_interval_; |
| 210 base::WeakPtrFactory<DelayBasedBeginFrameSource> weak_factory_; | |
| 200 | 211 |
| 201 DISALLOW_COPY_AND_ASSIGN(DelayBasedBeginFrameSource); | 212 DISALLOW_COPY_AND_ASSIGN(DelayBasedBeginFrameSource); |
| 202 }; | 213 }; |
| 203 | 214 |
| 204 } // namespace cc | 215 } // namespace cc |
| 205 | 216 |
| 206 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ | 217 #endif // CC_SCHEDULER_BEGIN_FRAME_SOURCE_H_ |
| OLD | NEW |