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

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

Issue 2136413002: Update Surface ID Terminology (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix webkit_unit_tests 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
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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 97
98 FakeExternalBeginFrameSource fake_begin_frame_source_; 98 FakeExternalBeginFrameSource fake_begin_frame_source_;
99 99
100 base::SimpleTestTickClock now_src_; 100 base::SimpleTestTickClock now_src_;
101 scoped_refptr<base::NullTaskRunner> task_runner_; 101 scoped_refptr<base::NullTaskRunner> task_runner_;
102 FakeDisplaySchedulerClient client_; 102 FakeDisplaySchedulerClient client_;
103 TestDisplayScheduler scheduler_; 103 TestDisplayScheduler scheduler_;
104 }; 104 };
105 105
106 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { 106 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) {
107 SurfaceId root_surface_id1(0, 1, 0); 107 SurfaceId root_surface_id1(0, 0, 1, 0);
108 SurfaceId root_surface_id2(0, 2, 0); 108 SurfaceId root_surface_id2(0, 0, 2, 0);
109 SurfaceId sid1(0, 3, 0); 109 SurfaceId sid1(0, 0, 3, 0);
110 base::TimeTicks late_deadline; 110 base::TimeTicks late_deadline;
111 111
112 // Go trough an initial BeginFrame cycle with the root surface. 112 // Go trough an initial BeginFrame cycle with the root surface.
113 BeginFrameForTest(); 113 BeginFrameForTest();
114 scheduler_.SetNewRootSurface(root_surface_id1); 114 scheduler_.SetNewRootSurface(root_surface_id1);
115 scheduler_.BeginFrameDeadlineForTest(); 115 scheduler_.BeginFrameDeadlineForTest();
116 116
117 // Resize on the next begin frame cycle should cause the deadline to wait 117 // Resize on the next begin frame cycle should cause the deadline to wait
118 // for a new root surface. 118 // for a new root surface.
119 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 119 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
(...skipping 12 matching lines...) Expand all
132 BeginFrameForTest(); 132 BeginFrameForTest();
133 scheduler_.SurfaceDamaged(sid1); 133 scheduler_.SurfaceDamaged(sid1);
134 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 134 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
135 scheduler_.SurfaceDamaged(root_surface_id2); 135 scheduler_.SurfaceDamaged(root_surface_id2);
136 EXPECT_GE(now_src().NowTicks(), 136 EXPECT_GE(now_src().NowTicks(),
137 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 137 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
138 scheduler_.BeginFrameDeadlineForTest(); 138 scheduler_.BeginFrameDeadlineForTest();
139 } 139 }
140 140
141 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { 141 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) {
142 SurfaceId root_surface_id(0, 1, 0); 142 SurfaceId root_surface_id(0, 0, 1, 0);
143 SurfaceId sid1(0, 2, 0); 143 SurfaceId sid1(0, 0, 2, 0);
144 base::TimeTicks late_deadline; 144 base::TimeTicks late_deadline;
145 145
146 // Go trough an initial BeginFrame cycle with the root surface. 146 // Go trough an initial BeginFrame cycle with the root surface.
147 BeginFrameForTest(); 147 BeginFrameForTest();
148 scheduler_.SetNewRootSurface(root_surface_id); 148 scheduler_.SetNewRootSurface(root_surface_id);
149 scheduler_.BeginFrameDeadlineForTest(); 149 scheduler_.BeginFrameDeadlineForTest();
150 150
151 // Resize on the next begin frame cycle should cause the deadline to wait 151 // Resize on the next begin frame cycle should cause the deadline to wait
152 // for a new root surface. 152 // for a new root surface.
153 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 153 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
(...skipping 12 matching lines...) Expand all
166 BeginFrameForTest(); 166 BeginFrameForTest();
167 scheduler_.SurfaceDamaged(sid1); 167 scheduler_.SurfaceDamaged(sid1);
168 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 168 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest());
169 scheduler_.SurfaceDamaged(root_surface_id); 169 scheduler_.SurfaceDamaged(root_surface_id);
170 EXPECT_GE(now_src().NowTicks(), 170 EXPECT_GE(now_src().NowTicks(),
171 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 171 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
172 scheduler_.BeginFrameDeadlineForTest(); 172 scheduler_.BeginFrameDeadlineForTest();
173 } 173 }
174 174
175 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { 175 TEST_F(DisplaySchedulerTest, SurfaceDamaged) {
176 SurfaceId root_surface_id(0, 0, 0); 176 SurfaceId root_surface_id(0, 0, 0, 0);
177 SurfaceId sid1(0, 1, 0); 177 SurfaceId sid1(0, 0, 1, 0);
178 SurfaceId sid2(0, 2, 0); 178 SurfaceId sid2(0, 0, 2, 0);
179 179
180 // Set the root surface 180 // Set the root surface
181 scheduler_.SetNewRootSurface(root_surface_id); 181 scheduler_.SetNewRootSurface(root_surface_id);
182 182
183 // Get scheduler to detect surface 1 as active by drawing 183 // Get scheduler to detect surface 1 as active by drawing
184 // two frames in a row with damage from surface 1. 184 // two frames in a row with damage from surface 1.
185 BeginFrameForTest(); 185 BeginFrameForTest();
186 scheduler_.SurfaceDamaged(sid1); 186 scheduler_.SurfaceDamaged(sid1);
187 scheduler_.BeginFrameDeadlineForTest(); 187 scheduler_.BeginFrameDeadlineForTest();
188 BeginFrameForTest(); 188 BeginFrameForTest();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 BeginFrameForTest(); 230 BeginFrameForTest();
231 EXPECT_LT(now_src().NowTicks(), 231 EXPECT_LT(now_src().NowTicks(),
232 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 232 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
233 scheduler_.SurfaceDamaged(root_surface_id); 233 scheduler_.SurfaceDamaged(root_surface_id);
234 EXPECT_GE(now_src().NowTicks(), 234 EXPECT_GE(now_src().NowTicks(),
235 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 235 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
236 scheduler_.BeginFrameDeadlineForTest(); 236 scheduler_.BeginFrameDeadlineForTest();
237 } 237 }
238 238
239 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { 239 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
240 SurfaceId root_surface_id(0, 0, 0); 240 SurfaceId root_surface_id(0, 0, 0, 0);
241 SurfaceId sid1(0, 1, 0); 241 SurfaceId sid1(0, 0, 1, 0);
242 242
243 // Set the root surface 243 // Set the root surface
244 scheduler_.SetNewRootSurface(root_surface_id); 244 scheduler_.SetNewRootSurface(root_surface_id);
245 245
246 // DrawAndSwap normally. 246 // DrawAndSwap normally.
247 BeginFrameForTest(); 247 BeginFrameForTest();
248 EXPECT_LT(now_src().NowTicks(), 248 EXPECT_LT(now_src().NowTicks(),
249 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 249 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
250 EXPECT_EQ(0, client_.draw_and_swap_count()); 250 EXPECT_EQ(0, client_.draw_and_swap_count());
251 scheduler_.SurfaceDamaged(sid1); 251 scheduler_.SurfaceDamaged(sid1);
252 scheduler_.BeginFrameDeadlineForTest(); 252 scheduler_.BeginFrameDeadlineForTest();
253 EXPECT_EQ(1, client_.draw_and_swap_count()); 253 EXPECT_EQ(1, client_.draw_and_swap_count());
254 254
255 // Deadline triggers immediately on OutputSurfaceLost. 255 // Deadline triggers immediately on OutputSurfaceLost.
256 BeginFrameForTest(); 256 BeginFrameForTest();
257 EXPECT_LT(now_src().NowTicks(), 257 EXPECT_LT(now_src().NowTicks(),
258 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 258 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
259 scheduler_.OutputSurfaceLost(); 259 scheduler_.OutputSurfaceLost();
260 EXPECT_GE(now_src().NowTicks(), 260 EXPECT_GE(now_src().NowTicks(),
261 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 261 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
262 262
263 // Deadline does not DrawAndSwap after OutputSurfaceLost. 263 // Deadline does not DrawAndSwap after OutputSurfaceLost.
264 EXPECT_EQ(1, client_.draw_and_swap_count()); 264 EXPECT_EQ(1, client_.draw_and_swap_count());
265 scheduler_.SurfaceDamaged(sid1); 265 scheduler_.SurfaceDamaged(sid1);
266 scheduler_.BeginFrameDeadlineForTest(); 266 scheduler_.BeginFrameDeadlineForTest();
267 EXPECT_EQ(1, client_.draw_and_swap_count()); 267 EXPECT_EQ(1, client_.draw_and_swap_count());
268 } 268 }
269 269
270 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { 270 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) {
271 SurfaceId root_surface_id(0, 0, 0); 271 SurfaceId root_surface_id(0, 0, 0, 0);
272 SurfaceId sid1(0, 1, 0); 272 SurfaceId sid1(0, 0, 1, 0);
273 273
274 // Set the root surface 274 // Set the root surface
275 scheduler_.SetNewRootSurface(root_surface_id); 275 scheduler_.SetNewRootSurface(root_surface_id);
276 276
277 // DrawAndSwap normally. 277 // DrawAndSwap normally.
278 BeginFrameForTest(); 278 BeginFrameForTest();
279 EXPECT_LT(now_src().NowTicks(), 279 EXPECT_LT(now_src().NowTicks(),
280 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 280 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
281 EXPECT_EQ(0, client_.draw_and_swap_count()); 281 EXPECT_EQ(0, client_.draw_and_swap_count());
282 scheduler_.SurfaceDamaged(sid1); 282 scheduler_.SurfaceDamaged(sid1);
283 scheduler_.BeginFrameDeadlineForTest(); 283 scheduler_.BeginFrameDeadlineForTest();
284 EXPECT_EQ(1, client_.draw_and_swap_count()); 284 EXPECT_EQ(1, client_.draw_and_swap_count());
285 285
286 scheduler_.DisplayResized(); 286 scheduler_.DisplayResized();
287 BeginFrameForTest(); 287 BeginFrameForTest();
288 // DisplayResized should trigger a swap to happen. 288 // DisplayResized should trigger a swap to happen.
289 scheduler_.BeginFrameDeadlineForTest(); 289 scheduler_.BeginFrameDeadlineForTest();
290 EXPECT_EQ(2, client_.draw_and_swap_count()); 290 EXPECT_EQ(2, client_.draw_and_swap_count());
291 } 291 }
292 292
293 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { 293 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) {
294 SurfaceId root_surface_id(0, 0, 0); 294 SurfaceId root_surface_id(0, 0, 0, 0);
295 SurfaceId sid1(0, 1, 0); 295 SurfaceId sid1(0, 0, 1, 0);
296 base::TimeTicks late_deadline; 296 base::TimeTicks late_deadline;
297 297
298 // Set the root surface 298 // Set the root surface
299 scheduler_.SetNewRootSurface(root_surface_id); 299 scheduler_.SetNewRootSurface(root_surface_id);
300 300
301 // DrawAndSwap normally. 301 // DrawAndSwap normally.
302 BeginFrameForTest(); 302 BeginFrameForTest();
303 EXPECT_LT(now_src().NowTicks(), 303 EXPECT_LT(now_src().NowTicks(),
304 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 304 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
305 EXPECT_EQ(0, client_.draw_and_swap_count()); 305 EXPECT_EQ(0, client_.draw_and_swap_count());
(...skipping 24 matching lines...) Expand all
330 scheduler_.SurfaceDamaged(root_surface_id); 330 scheduler_.SurfaceDamaged(root_surface_id);
331 EXPECT_EQ(base::TimeTicks(), 331 EXPECT_EQ(base::TimeTicks(),
332 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); 332 scheduler_.DesiredBeginFrameDeadlineTimeForTest());
333 333
334 EXPECT_EQ(1, client_.draw_and_swap_count()); 334 EXPECT_EQ(1, client_.draw_and_swap_count());
335 scheduler_.BeginFrameDeadlineForTest(); 335 scheduler_.BeginFrameDeadlineForTest();
336 EXPECT_EQ(2, client_.draw_and_swap_count()); 336 EXPECT_EQ(2, client_.draw_and_swap_count());
337 } 337 }
338 338
339 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { 339 TEST_F(DisplaySchedulerTest, DidSwapBuffers) {
340 SurfaceId root_surface_id(0, 0, 0); 340 SurfaceId root_surface_id(0, 0, 0, 0);
341 SurfaceId sid1(0, 1, 0); 341 SurfaceId sid1(0, 0, 1, 0);
342 SurfaceId sid2(0, 2, 0); 342 SurfaceId sid2(0, 0, 2, 0);
343 343
344 // Set the root surface 344 // Set the root surface
345 scheduler_.SetNewRootSurface(root_surface_id); 345 scheduler_.SetNewRootSurface(root_surface_id);
346 346
347 // Get scheduler to detect surface 1 and 2 as active. 347 // Get scheduler to detect surface 1 and 2 as active.
348 BeginFrameForTest(); 348 BeginFrameForTest();
349 scheduler_.SurfaceDamaged(sid1); 349 scheduler_.SurfaceDamaged(sid1);
350 scheduler_.SurfaceDamaged(sid2); 350 scheduler_.SurfaceDamaged(sid2);
351 scheduler_.BeginFrameDeadlineForTest(); 351 scheduler_.BeginFrameDeadlineForTest();
352 BeginFrameForTest(); 352 BeginFrameForTest();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 base::TimeTicks()); 395 base::TimeTicks());
396 // Draw and swap now that we aren't throttled. 396 // Draw and swap now that we aren't throttled.
397 EXPECT_EQ(3, client_.draw_and_swap_count()); 397 EXPECT_EQ(3, client_.draw_and_swap_count());
398 scheduler_.BeginFrameDeadlineForTest(); 398 scheduler_.BeginFrameDeadlineForTest();
399 EXPECT_EQ(4, client_.draw_and_swap_count()); 399 EXPECT_EQ(4, client_.draw_and_swap_count());
400 } 400 }
401 401
402 // This test verfies that we try to reschedule the deadline 402 // This test verfies that we try to reschedule the deadline
403 // after any event that may change what deadline we want. 403 // after any event that may change what deadline we want.
404 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { 404 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) {
405 SurfaceId root_surface_id(0, 1, 0); 405 SurfaceId root_surface_id(0, 0, 1, 0);
406 SurfaceId sid1(0, 2, 0); 406 SurfaceId sid1(0, 0, 2, 0);
407 int count = 1; 407 int count = 1;
408 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count()); 408 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
409 409
410 // Set the root surface 410 // Set the root surface
411 scheduler_.SetNewRootSurface(root_surface_id); 411 scheduler_.SetNewRootSurface(root_surface_id);
412 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count()); 412 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
413 413
414 BeginFrameForTest(); 414 BeginFrameForTest();
415 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count()); 415 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
416 416
(...skipping 16 matching lines...) Expand all
433 433
434 scheduler_.SetRootSurfaceResourcesLocked(true); 434 scheduler_.SetRootSurfaceResourcesLocked(true);
435 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count()); 435 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
436 436
437 scheduler_.OutputSurfaceLost(); 437 scheduler_.OutputSurfaceLost();
438 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count()); 438 EXPECT_EQ(count++, scheduler_.scheduler_begin_frame_deadline_count());
439 } 439 }
440 440
441 } // namespace 441 } // namespace
442 } // namespace cc 442 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698