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

Side by Side Diff: cc/scheduler/begin_frame_source_unittest.cc

Issue 2897053002: [cc] Remove BeginFrameAck from BFS::DidFinishFrame and update tests. (Closed)
Patch Set: sync for PrimaryBFS Created 3 years, 6 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 | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 #include "cc/scheduler/begin_frame_source.h" 5 #include "cc/scheduler/begin_frame_source.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 66 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
67 source_->AddObserver(obs_.get()); 67 source_->AddObserver(obs_.get());
68 EXPECT_TRUE(task_runner_->HasPendingTasks()); 68 EXPECT_TRUE(task_runner_->HasPendingTasks());
69 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 69 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
70 1000 + kDeadline, kInterval); 70 1000 + kDeadline, kInterval);
71 task_runner_->RunPendingTasks(); 71 task_runner_->RunPendingTasks();
72 72
73 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100, 73 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
74 1100 + kDeadline, kInterval); 74 1100 + kDeadline, kInterval);
75 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 75 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
76 source_->DidFinishFrame(obs_.get(), 76 source_->DidFinishFrame(obs_.get());
77 BeginFrameAck(source_->source_id(), 1, 1, true));
78 task_runner_->RunPendingTasks(); 77 task_runner_->RunPendingTasks();
79 } 78 }
80 79
81 TEST_F(BackToBackBeginFrameSourceTest, 80 TEST_F(BackToBackBeginFrameSourceTest,
82 RemoveObserverThenDidFinishFrameProducesNoFrame) { 81 RemoveObserverThenDidFinishFrameProducesNoFrame) {
83 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 82 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
84 source_->AddObserver(obs_.get()); 83 source_->AddObserver(obs_.get());
85 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 84 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
86 1000 + kDeadline, kInterval); 85 1000 + kDeadline, kInterval);
87 task_runner_->RunPendingTasks(); 86 task_runner_->RunPendingTasks();
88 87
89 source_->RemoveObserver(obs_.get()); 88 source_->RemoveObserver(obs_.get());
90 source_->DidFinishFrame(obs_.get(), 89 source_->DidFinishFrame(obs_.get());
91 BeginFrameAck(source_->source_id(), 1, 1, true));
92 90
93 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the 91 // Verify no BeginFrame is sent to |obs_|. There is a pending task in the
94 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_| 92 // task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_|
95 // is removed. 93 // is removed.
96 task_runner_->RunPendingTasks(); 94 task_runner_->RunPendingTasks();
97 EXPECT_FALSE(task_runner_->HasPendingTasks()); 95 EXPECT_FALSE(task_runner_->HasPendingTasks());
98 } 96 }
99 97
100 TEST_F(BackToBackBeginFrameSourceTest, 98 TEST_F(BackToBackBeginFrameSourceTest,
101 DidFinishFrameThenRemoveObserverProducesNoFrame) { 99 DidFinishFrameThenRemoveObserverProducesNoFrame) {
102 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 100 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
103 source_->AddObserver(obs_.get()); 101 source_->AddObserver(obs_.get());
104 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 102 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
105 1000 + kDeadline, kInterval); 103 1000 + kDeadline, kInterval);
106 task_runner_->RunPendingTasks(); 104 task_runner_->RunPendingTasks();
107 105
108 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 106 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
109 source_->DidFinishFrame(obs_.get(), 107 source_->DidFinishFrame(obs_.get());
110 BeginFrameAck(source_->source_id(), 1, 1, true));
111 source_->RemoveObserver(obs_.get()); 108 source_->RemoveObserver(obs_.get());
112 109
113 EXPECT_TRUE(task_runner_->HasPendingTasks()); 110 EXPECT_TRUE(task_runner_->HasPendingTasks());
114 task_runner_->RunPendingTasks(); 111 task_runner_->RunPendingTasks();
115 } 112 }
116 113
117 TEST_F(BackToBackBeginFrameSourceTest, 114 TEST_F(BackToBackBeginFrameSourceTest,
118 TogglingObserverThenDidFinishFrameProducesCorrectFrame) { 115 TogglingObserverThenDidFinishFrameProducesCorrectFrame) {
119 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 116 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
120 source_->AddObserver(obs_.get()); 117 source_->AddObserver(obs_.get());
121 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 118 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
122 1000 + kDeadline, kInterval); 119 1000 + kDeadline, kInterval);
123 task_runner_->RunPendingTasks(); 120 task_runner_->RunPendingTasks();
124 121
125 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 122 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
126 source_->RemoveObserver(obs_.get()); 123 source_->RemoveObserver(obs_.get());
127 124
128 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 125 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
129 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 126 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
130 source_->AddObserver(obs_.get()); 127 source_->AddObserver(obs_.get());
131 128
132 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 129 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
133 source_->DidFinishFrame(obs_.get(), 130 source_->DidFinishFrame(obs_.get());
134 BeginFrameAck(source_->source_id(), 1, 1, true));
135 131
136 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 132 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
137 // The begin frame is posted at the time when the observer was added, 133 // The begin frame is posted at the time when the observer was added,
138 // so it ignores changes to "now" afterward. 134 // so it ignores changes to "now" afterward.
139 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1110, 135 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1110,
140 1110 + kDeadline, kInterval); 136 1110 + kDeadline, kInterval);
141 EXPECT_TRUE(task_runner_->HasPendingTasks()); 137 EXPECT_TRUE(task_runner_->HasPendingTasks());
142 task_runner_->RunPendingTasks(); 138 task_runner_->RunPendingTasks();
143 } 139 }
144 140
145 TEST_F(BackToBackBeginFrameSourceTest, 141 TEST_F(BackToBackBeginFrameSourceTest,
146 DidFinishFrameThenTogglingObserverProducesCorrectFrame) { 142 DidFinishFrameThenTogglingObserverProducesCorrectFrame) {
147 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 143 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
148 source_->AddObserver(obs_.get()); 144 source_->AddObserver(obs_.get());
149 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 145 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
150 1000 + kDeadline, kInterval); 146 1000 + kDeadline, kInterval);
151 task_runner_->RunPendingTasks(); 147 task_runner_->RunPendingTasks();
152 148
153 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 149 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
154 source_->DidFinishFrame(obs_.get(), 150 source_->DidFinishFrame(obs_.get());
155 BeginFrameAck(source_->source_id(), 1, 1, true));
156 151
157 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 152 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
158 source_->RemoveObserver(obs_.get()); 153 source_->RemoveObserver(obs_.get());
159 154
160 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 155 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
161 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 156 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
162 source_->AddObserver(obs_.get()); 157 source_->AddObserver(obs_.get());
163 158
164 now_src_->Advance(base::TimeDelta::FromMicroseconds(10)); 159 now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
165 // Ticks at the time at which the observer was added, ignoring the 160 // Ticks at the time at which the observer was added, ignoring the
166 // last change to "now". 161 // last change to "now".
167 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1120, 162 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1120,
168 1120 + kDeadline, kInterval); 163 1120 + kDeadline, kInterval);
169 EXPECT_TRUE(task_runner_->HasPendingTasks()); 164 EXPECT_TRUE(task_runner_->HasPendingTasks());
170 task_runner_->RunPendingTasks(); 165 task_runner_->RunPendingTasks();
171 } 166 }
172 167
173 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) { 168 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) {
174 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 169 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
175 source_->AddObserver(obs_.get()); 170 source_->AddObserver(obs_.get());
176 source_->RemoveObserver(obs_.get()); 171 source_->RemoveObserver(obs_.get());
177 source_->DidFinishFrame(obs_.get(), 172 source_->DidFinishFrame(obs_.get());
178 BeginFrameAck(source_->source_id(), 1, 1, true));
179 EXPECT_FALSE(task_runner_->RunPendingTasks()); 173 EXPECT_FALSE(task_runner_->RunPendingTasks());
180 } 174 }
181 175
182 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) { 176 TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) {
183 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 177 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
184 source_->AddObserver(obs_.get()); 178 source_->AddObserver(obs_.get());
185 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 179 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
186 1000 + kDeadline, kInterval); 180 1000 + kDeadline, kInterval);
187 task_runner_->RunPendingTasks(); 181 task_runner_->RunPendingTasks();
188 182
189 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 183 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
190 source_->DidFinishFrame(obs_.get(), 184 source_->DidFinishFrame(obs_.get());
191 BeginFrameAck(source_->source_id(), 1, 1, true)); 185 source_->DidFinishFrame(obs_.get());
192 source_->DidFinishFrame(obs_.get(), 186 source_->DidFinishFrame(obs_.get());
193 BeginFrameAck(source_->source_id(), 1, 1, true));
194 source_->DidFinishFrame(obs_.get(),
195 BeginFrameAck(source_->source_id(), 1, 1, true));
196 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100, 187 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
197 1100 + kDeadline, kInterval); 188 1100 + kDeadline, kInterval);
198 task_runner_->RunPendingTasks(); 189 task_runner_->RunPendingTasks();
199 190
200 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 191 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
201 source_->DidFinishFrame(obs_.get(), 192 source_->DidFinishFrame(obs_.get());
202 BeginFrameAck(source_->source_id(), 2, 2, true)); 193 source_->DidFinishFrame(obs_.get());
203 source_->DidFinishFrame(obs_.get(), 194 source_->DidFinishFrame(obs_.get());
204 BeginFrameAck(source_->source_id(), 2, 2, true));
205 source_->DidFinishFrame(obs_.get(),
206 BeginFrameAck(source_->source_id(), 2, 2, true));
207 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 1200, 195 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 1200,
208 1200 + kDeadline, kInterval); 196 1200 + kDeadline, kInterval);
209 task_runner_->RunPendingTasks(); 197 task_runner_->RunPendingTasks();
210 } 198 }
211 199
212 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) { 200 TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) {
213 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 201 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
214 source_->AddObserver(obs_.get()); 202 source_->AddObserver(obs_.get());
215 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000, 203 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
216 1000 + kDeadline, kInterval); 204 1000 + kDeadline, kInterval);
217 task_runner_->RunPendingTasks(); 205 task_runner_->RunPendingTasks();
218 206
219 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 207 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
220 source_->DidFinishFrame(obs_.get(), 208 source_->DidFinishFrame(obs_.get());
221 BeginFrameAck(source_->source_id(), 1, 1, true));
222 now_src_->Advance(base::TimeDelta::FromMicroseconds(50)); 209 now_src_->Advance(base::TimeDelta::FromMicroseconds(50));
223 // Ticks at the time the last frame finished, so ignores the last change to 210 // Ticks at the time the last frame finished, so ignores the last change to
224 // "now". 211 // "now".
225 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100, 212 EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
226 1100 + kDeadline, kInterval); 213 1100 + kDeadline, kInterval);
227 214
228 EXPECT_TRUE(task_runner_->HasPendingTasks()); 215 EXPECT_TRUE(task_runner_->HasPendingTasks());
229 task_runner_->RunPendingTasks(); 216 task_runner_->RunPendingTasks();
230 } 217 }
231 218
232 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) { 219 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) {
233 NiceMock<MockBeginFrameObserver> obs1, obs2; 220 NiceMock<MockBeginFrameObserver> obs1, obs2;
234 221
235 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 222 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
236 source_->AddObserver(&obs1); 223 source_->AddObserver(&obs1);
237 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 224 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
238 source_->AddObserver(&obs2); 225 source_->AddObserver(&obs2);
239 226
240 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 227 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
241 kInterval); 228 kInterval);
242 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline, 229 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
243 kInterval); 230 kInterval);
244 task_runner_->RunPendingTasks(); 231 task_runner_->RunPendingTasks();
245 232
246 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 233 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
247 source_->DidFinishFrame(&obs1, 234 source_->DidFinishFrame(&obs1);
248 BeginFrameAck(source_->source_id(), 1, 1, true)); 235 source_->DidFinishFrame(&obs2);
249 source_->DidFinishFrame(&obs2,
250 BeginFrameAck(source_->source_id(), 1, 1, true));
251 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline, 236 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
252 kInterval); 237 kInterval);
253 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline, 238 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
254 kInterval); 239 kInterval);
255 task_runner_->RunPendingTasks(); 240 task_runner_->RunPendingTasks();
256 241
257 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 242 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
258 source_->DidFinishFrame(&obs1, 243 source_->DidFinishFrame(&obs1);
259 BeginFrameAck(source_->source_id(), 2, 2, true)); 244 source_->DidFinishFrame(&obs2);
260 source_->DidFinishFrame(&obs2,
261 BeginFrameAck(source_->source_id(), 2, 2, true));
262 EXPECT_TRUE(task_runner_->HasPendingTasks()); 245 EXPECT_TRUE(task_runner_->HasPendingTasks());
263 source_->RemoveObserver(&obs1); 246 source_->RemoveObserver(&obs1);
264 source_->RemoveObserver(&obs2); 247 source_->RemoveObserver(&obs2);
265 task_runner_->RunPendingTasks(); 248 task_runner_->RunPendingTasks();
266 } 249 }
267 250
268 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) { 251 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) {
269 NiceMock<MockBeginFrameObserver> obs1, obs2; 252 NiceMock<MockBeginFrameObserver> obs1, obs2;
270 253
271 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 254 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
272 source_->AddObserver(&obs1); 255 source_->AddObserver(&obs1);
273 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 256 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
274 kInterval); 257 kInterval);
275 task_runner_->RunPendingTasks(); 258 task_runner_->RunPendingTasks();
276 259
277 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 260 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
278 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 261 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
279 source_->AddObserver(&obs2); 262 source_->AddObserver(&obs2);
280 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline, 263 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
281 kInterval); 264 kInterval);
282 task_runner_->RunPendingTasks(); 265 task_runner_->RunPendingTasks();
283 266
284 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 267 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
285 source_->DidFinishFrame(&obs1, 268 source_->DidFinishFrame(&obs1);
286 BeginFrameAck(source_->source_id(), 1, 1, true));
287 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 1200, 1200 + kDeadline, 269 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 1200, 1200 + kDeadline,
288 kInterval); 270 kInterval);
289 task_runner_->RunPendingTasks(); 271 task_runner_->RunPendingTasks();
290 272
291 source_->DidFinishFrame(&obs1, 273 source_->DidFinishFrame(&obs1);
292 BeginFrameAck(source_->source_id(), 3, 3, true));
293 source_->RemoveObserver(&obs1); 274 source_->RemoveObserver(&obs1);
294 // Removing all finished observers should disable the time source. 275 // Removing all finished observers should disable the time source.
295 EXPECT_FALSE(delay_based_time_source_->Active()); 276 EXPECT_FALSE(delay_based_time_source_->Active());
296 // Finishing the frame for |obs1| posts a begin frame task, which will be 277 // Finishing the frame for |obs1| posts a begin frame task, which will be
297 // aborted since |obs1| is removed. Clear that from the task runner. 278 // aborted since |obs1| is removed. Clear that from the task runner.
298 task_runner_->RunPendingTasks(); 279 task_runner_->RunPendingTasks();
299 280
300 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 281 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
301 source_->DidFinishFrame(&obs2, 282 source_->DidFinishFrame(&obs2);
302 BeginFrameAck(source_->source_id(), 2, 2, true));
303 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline, 283 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline,
304 kInterval); 284 kInterval);
305 task_runner_->RunPendingTasks(); 285 task_runner_->RunPendingTasks();
306 286
307 source_->DidFinishFrame(&obs2, 287 source_->DidFinishFrame(&obs2);
308 BeginFrameAck(source_->source_id(), 4, 4, true));
309 source_->RemoveObserver(&obs2); 288 source_->RemoveObserver(&obs2);
310 } 289 }
311 290
312 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) { 291 TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) {
313 NiceMock<MockBeginFrameObserver> obs1, obs2; 292 NiceMock<MockBeginFrameObserver> obs1, obs2;
314 293
315 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false); 294 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
316 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false); 295 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
317 source_->AddObserver(&obs1); 296 source_->AddObserver(&obs1);
318 source_->AddObserver(&obs2); 297 source_->AddObserver(&obs2);
319 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline, 298 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
320 kInterval); 299 kInterval);
321 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline, 300 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
322 kInterval); 301 kInterval);
323 task_runner_->RunPendingTasks(); 302 task_runner_->RunPendingTasks();
324 303
325 // |obs1| finishes first. 304 // |obs1| finishes first.
326 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 305 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
327 source_->DidFinishFrame(&obs1, 306 source_->DidFinishFrame(&obs1);
328 BeginFrameAck(source_->source_id(), 1, 1, true));
329 307
330 // |obs2| finishes also, before getting to the newly posted begin frame. 308 // |obs2| finishes also, before getting to the newly posted begin frame.
331 now_src_->Advance(base::TimeDelta::FromMicroseconds(100)); 309 now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
332 source_->DidFinishFrame(&obs2, 310 source_->DidFinishFrame(&obs2);
333 BeginFrameAck(source_->source_id(), 1, 1, true));
334 311
335 // Because the begin frame source already ticked when |obs1| finished, 312 // Because the begin frame source already ticked when |obs1| finished,
336 // we see it as the frame time for both observers. 313 // we see it as the frame time for both observers.
337 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline, 314 EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
338 kInterval); 315 kInterval);
339 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline, 316 EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
340 kInterval); 317 kInterval);
341 task_runner_->RunPendingTasks(); 318 task_runner_->RunPendingTasks();
342 319
343 source_->DidFinishFrame(&obs1, 320 source_->DidFinishFrame(&obs1);
344 BeginFrameAck(source_->source_id(), 2, 2, true));
345 source_->RemoveObserver(&obs1); 321 source_->RemoveObserver(&obs1);
346 source_->DidFinishFrame(&obs2, 322 source_->DidFinishFrame(&obs2);
347 BeginFrameAck(source_->source_id(), 2, 2, true));
348 source_->RemoveObserver(&obs2); 323 source_->RemoveObserver(&obs2);
349 } 324 }
350 325
351 // DelayBasedBeginFrameSource testing ------------------------------------------ 326 // DelayBasedBeginFrameSource testing ------------------------------------------
352 class DelayBasedBeginFrameSourceTest : public ::testing::Test { 327 class DelayBasedBeginFrameSourceTest : public ::testing::Test {
353 public: 328 public:
354 std::unique_ptr<base::SimpleTestTickClock> now_src_; 329 std::unique_ptr<base::SimpleTestTickClock> now_src_;
355 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 330 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
356 std::unique_ptr<DelayBasedBeginFrameSource> source_; 331 std::unique_ptr<DelayBasedBeginFrameSource> source_;
357 std::unique_ptr<MockBeginFrameObserver> obs_; 332 std::unique_ptr<MockBeginFrameObserver> obs_;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 // not notify observer. 568 // not notify observer.
594 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false); 569 EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
595 EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1); 570 EXPECT_CALL((*client_), OnNeedsBeginFrames(true)).Times(1);
596 ExternalBeginFrameSource source2(client_.get()); 571 ExternalBeginFrameSource source2(client_.get());
597 source2.AddObserver(obs_.get()); 572 source2.AddObserver(obs_.get());
598 source2.OnBeginFrame(args); 573 source2.OnBeginFrame(args);
599 } 574 }
600 575
601 } // namespace 576 } // namespace
602 } // namespace cc 577 } // namespace cc
OLDNEW
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698