Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(552)

Side by Side Diff: cc/scheduler/begin_frame_source.h

Issue 2150533004: cc: Send all begin frames using a PostTask. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scheduler_unittest_no_deadline
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | cc/scheduler/begin_frame_source.cc » ('j') | cc/scheduler/begin_frame_source.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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_
OLDNEW
« no previous file with comments | « no previous file | cc/scheduler/begin_frame_source.cc » ('j') | cc/scheduler/begin_frame_source.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698