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

Side by Side Diff: cc/surfaces/display_scheduler_unittest.cc

Issue 1251693002: cc: Consider Surface active if frame received recently (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: active_child_surface_ids_ Created 5 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/surfaces/display_scheduler.h" 5 #include "cc/surfaces/display_scheduler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/test/null_task_runner.h" 8 #include "base/test/null_task_runner.h"
9 #include "base/test/simple_test_tick_clock.h" 9 #include "base/test/simple_test_tick_clock.h"
10 #include "base/trace_event/trace_event.h" 10 #include "base/trace_event/trace_event.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 scheduler_->SurfaceDamaged(sid2); 162 scheduler_->SurfaceDamaged(sid2);
163 EXPECT_GE(now_src().NowTicks(), 163 EXPECT_GE(now_src().NowTicks(),
164 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 164 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
165 scheduler_->BeginFrameDeadlineForTest(); 165 scheduler_->BeginFrameDeadlineForTest();
166 166
167 // Make the system idle 167 // Make the system idle
168 BeginFrameForTest(); 168 BeginFrameForTest();
169 scheduler_->BeginFrameDeadlineForTest(); 169 scheduler_->BeginFrameDeadlineForTest();
170 BeginFrameForTest(); 170 BeginFrameForTest();
171 scheduler_->BeginFrameDeadlineForTest(); 171 scheduler_->BeginFrameDeadlineForTest();
172 BeginFrameForTest();
173 scheduler_->BeginFrameDeadlineForTest();
172 174
173 // Deadline should trigger early if child surfaces are idle and 175 // Deadline should trigger early if child surfaces are idle and
174 // we get damage on the root surface. 176 // we get damage on the root surface.
177 BeginFrameForTest();
178 EXPECT_LT(now_src().NowTicks(),
179 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
180 scheduler_->SurfaceDamaged(root_surface_id);
181 EXPECT_GE(now_src().NowTicks(),
182 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
183 scheduler_->BeginFrameDeadlineForTest();
184 }
185
186 TEST_F(DisplaySchedulerTest, SurfaceActiveAt30fps) {
187 SurfaceId root_surface_id(0);
188 SurfaceId sid1(1);
189 SurfaceId sid2(2);
190
191 // Set the root surface
192 scheduler_->EntireDisplayDamaged(root_surface_id);
193
194 // Get scheduler to detect surface 1 and 2 as active by drawing
195 // two frames in a row. First frame with damage only from surface 1
196 // and the second frame only with damage from surface 2.
197 BeginFrameForTest();
198 scheduler_->SurfaceDamaged(sid1);
199 scheduler_->BeginFrameDeadlineForTest();
200 BeginFrameForTest();
201 scheduler_->SurfaceDamaged(sid2);
202 scheduler_->BeginFrameDeadlineForTest();
203
204 // Deadline doesn't trigger early until surface 1 and 2 are both damaged.
205 BeginFrameForTest();
206 EXPECT_LT(now_src().NowTicks(),
207 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
208 scheduler_->SurfaceDamaged(sid1);
209 EXPECT_LT(now_src().NowTicks(),
210 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
211 scheduler_->SurfaceDamaged(sid2);
212 EXPECT_GE(now_src().NowTicks(),
213 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
214 scheduler_->BeginFrameDeadlineForTest();
215
216 // Make the system idle
217 BeginFrameForTest();
218 scheduler_->BeginFrameDeadlineForTest();
219 BeginFrameForTest();
220 scheduler_->BeginFrameDeadlineForTest();
221 BeginFrameForTest();
222 scheduler_->BeginFrameDeadlineForTest();
223
224 // Deadline should trigger early if child surfaces are idle and
225 // we get damage on the root surface.
226 BeginFrameForTest();
227 EXPECT_LT(now_src().NowTicks(),
228 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
229 scheduler_->SurfaceDamaged(root_surface_id);
230 EXPECT_GE(now_src().NowTicks(),
231 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
232 scheduler_->BeginFrameDeadlineForTest();
233 }
234
235 TEST_F(DisplaySchedulerTest, SurfaceActiveAt20fps) {
236 SurfaceId root_surface_id(0);
237 SurfaceId sid1(1);
238 SurfaceId sid2(2);
239 SurfaceId sid3(3);
240
241 // Set the root surface
242 scheduler_->EntireDisplayDamaged(root_surface_id);
243
244 // Get scheduler to detect surface 1, 2, and 3 as active by drawing
245 // 3 frames in a row. With damage from each surface in succession.
246 BeginFrameForTest();
247 scheduler_->SurfaceDamaged(sid1);
248 scheduler_->BeginFrameDeadlineForTest();
249 BeginFrameForTest();
250 scheduler_->SurfaceDamaged(sid2);
251 scheduler_->BeginFrameDeadlineForTest();
252 BeginFrameForTest();
253 scheduler_->SurfaceDamaged(sid3);
254 scheduler_->BeginFrameDeadlineForTest();
255
256 // Deadline doesn't trigger early until surface 1, 2, and 3 are all damaged.
257 BeginFrameForTest();
258 EXPECT_LT(now_src().NowTicks(),
259 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
260 scheduler_->SurfaceDamaged(sid1);
261 EXPECT_LT(now_src().NowTicks(),
262 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
263 scheduler_->SurfaceDamaged(sid2);
264 EXPECT_LT(now_src().NowTicks(),
265 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
266 scheduler_->SurfaceDamaged(sid3);
267 EXPECT_GE(now_src().NowTicks(),
268 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
269 scheduler_->BeginFrameDeadlineForTest();
270
271 // Make the system idle
272 BeginFrameForTest();
273 scheduler_->BeginFrameDeadlineForTest();
274 BeginFrameForTest();
275 scheduler_->BeginFrameDeadlineForTest();
276 BeginFrameForTest();
277 scheduler_->BeginFrameDeadlineForTest();
278
279 // Deadline should trigger early if child surfaces are idle and
280 // we get damage on the root surface.
281 BeginFrameForTest();
282 EXPECT_LT(now_src().NowTicks(),
283 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
284 scheduler_->SurfaceDamaged(root_surface_id);
285 EXPECT_GE(now_src().NowTicks(),
286 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
287 scheduler_->BeginFrameDeadlineForTest();
288 }
289
290 TEST_F(DisplaySchedulerTest, SurfaceActiveAt20fps_SingleSurface) {
291 SurfaceId root_surface_id(0);
292 SurfaceId sid1(1);
293 SurfaceId sid2(2);
294 SurfaceId sid3(3);
295
296 // Set the root surface
297 scheduler_->EntireDisplayDamaged(root_surface_id);
298
299 // Get scheduler to detect surface 1 as active even though
300 // it only swaps at 20fps.
301 BeginFrameForTest();
302 scheduler_->SurfaceDamaged(sid1);
303 scheduler_->BeginFrameDeadlineForTest();
304 BeginFrameForTest();
305 scheduler_->BeginFrameDeadlineForTest();
306 BeginFrameForTest();
307 scheduler_->BeginFrameDeadlineForTest();
308
309 // Deadline doesn't trigger early until surface 1 is damaged.
310 BeginFrameForTest();
311 EXPECT_LT(now_src().NowTicks(),
312 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
313 scheduler_->SurfaceDamaged(sid1);
314 EXPECT_GE(now_src().NowTicks(),
315 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
316 scheduler_->BeginFrameDeadlineForTest();
317
318 // Make the system idle
319 BeginFrameForTest();
320 scheduler_->BeginFrameDeadlineForTest();
321 BeginFrameForTest();
322 scheduler_->BeginFrameDeadlineForTest();
323 BeginFrameForTest();
324 scheduler_->BeginFrameDeadlineForTest();
325
326 // Deadline should trigger early if child surfaces are idle and
327 // we get damage on the root surface.
175 BeginFrameForTest(); 328 BeginFrameForTest();
176 EXPECT_LT(now_src().NowTicks(), 329 EXPECT_LT(now_src().NowTicks(),
177 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 330 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
178 scheduler_->SurfaceDamaged(root_surface_id); 331 scheduler_->SurfaceDamaged(root_surface_id);
179 EXPECT_GE(now_src().NowTicks(), 332 EXPECT_GE(now_src().NowTicks(),
180 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 333 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
181 scheduler_->BeginFrameDeadlineForTest(); 334 scheduler_->BeginFrameDeadlineForTest();
182 } 335 }
183 336
184 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { 337 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 488
336 scheduler_->SetRootSurfaceResourcesLocked(true); 489 scheduler_->SetRootSurfaceResourcesLocked(true);
337 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 490 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
338 491
339 scheduler_->OutputSurfaceLost(); 492 scheduler_->OutputSurfaceLost();
340 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 493 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
341 } 494 }
342 495
343 } // namespace 496 } // namespace
344 } // namespace cc 497 } // namespace cc
OLDNEW
« cc/surfaces/display_scheduler.cc ('K') | « cc/surfaces/display_scheduler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698