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

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

Issue 1496103002: Reusing base::IdType<...> to implement SurfaceId. Base URL: https://chromium.googlesource.com/chromium/src.git@type-safe-id-base
Patch Set: Created 5 years 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/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.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 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 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 101
102 FakeBeginFrameSource fake_begin_frame_source_; 102 FakeBeginFrameSource fake_begin_frame_source_;
103 103
104 scoped_ptr<base::SimpleTestTickClock> now_src_; 104 scoped_ptr<base::SimpleTestTickClock> now_src_;
105 scoped_refptr<base::NullTaskRunner> task_runner_; 105 scoped_refptr<base::NullTaskRunner> task_runner_;
106 scoped_ptr<FakeDisplaySchedulerClient> client_; 106 scoped_ptr<FakeDisplaySchedulerClient> client_;
107 scoped_ptr<TestDisplayScheduler> scheduler_; 107 scoped_ptr<TestDisplayScheduler> scheduler_;
108 }; 108 };
109 109
110 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { 110 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) {
111 SurfaceId root_surface_id1(1); 111 SurfaceId root_surface_id1 = SurfaceId::FromUnsafeValue(1);
112 SurfaceId root_surface_id2(2); 112 SurfaceId root_surface_id2 = SurfaceId::FromUnsafeValue(2);
113 SurfaceId sid1(3); 113 SurfaceId sid1 = SurfaceId::FromUnsafeValue(3);
114 base::TimeTicks late_deadline; 114 base::TimeTicks late_deadline;
115 115
116 // Go trough an initial BeginFrame cycle with the root surface. 116 // Go trough an initial BeginFrame cycle with the root surface.
117 BeginFrameForTest(); 117 BeginFrameForTest();
118 scheduler_->SetNewRootSurface(root_surface_id1); 118 scheduler_->SetNewRootSurface(root_surface_id1);
119 scheduler_->BeginFrameDeadlineForTest(); 119 scheduler_->BeginFrameDeadlineForTest();
120 120
121 // Resize on the next begin frame cycle should cause the deadline to wait 121 // Resize on the next begin frame cycle should cause the deadline to wait
122 // for a new root surface. 122 // for a new root surface.
123 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 123 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
(...skipping 12 matching lines...) Expand all
136 BeginFrameForTest(); 136 BeginFrameForTest();
137 scheduler_->SurfaceDamaged(sid1); 137 scheduler_->SurfaceDamaged(sid1);
138 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 138 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest());
139 scheduler_->SurfaceDamaged(root_surface_id2); 139 scheduler_->SurfaceDamaged(root_surface_id2);
140 EXPECT_GE(now_src().NowTicks(), 140 EXPECT_GE(now_src().NowTicks(),
141 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 141 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
142 scheduler_->BeginFrameDeadlineForTest(); 142 scheduler_->BeginFrameDeadlineForTest();
143 } 143 }
144 144
145 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { 145 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) {
146 SurfaceId root_surface_id(1); 146 SurfaceId root_surface_id = SurfaceId::FromUnsafeValue(1);
147 SurfaceId sid1(2); 147 SurfaceId sid1 = SurfaceId::FromUnsafeValue(2);
148 base::TimeTicks late_deadline; 148 base::TimeTicks late_deadline;
149 149
150 // Go trough an initial BeginFrame cycle with the root surface. 150 // Go trough an initial BeginFrame cycle with the root surface.
151 BeginFrameForTest(); 151 BeginFrameForTest();
152 scheduler_->SetNewRootSurface(root_surface_id); 152 scheduler_->SetNewRootSurface(root_surface_id);
153 scheduler_->BeginFrameDeadlineForTest(); 153 scheduler_->BeginFrameDeadlineForTest();
154 154
155 // Resize on the next begin frame cycle should cause the deadline to wait 155 // Resize on the next begin frame cycle should cause the deadline to wait
156 // for a new root surface. 156 // for a new root surface.
157 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); 157 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval();
(...skipping 12 matching lines...) Expand all
170 BeginFrameForTest(); 170 BeginFrameForTest();
171 scheduler_->SurfaceDamaged(sid1); 171 scheduler_->SurfaceDamaged(sid1);
172 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 172 EXPECT_GT(late_deadline, scheduler_->DesiredBeginFrameDeadlineTimeForTest());
173 scheduler_->SurfaceDamaged(root_surface_id); 173 scheduler_->SurfaceDamaged(root_surface_id);
174 EXPECT_GE(now_src().NowTicks(), 174 EXPECT_GE(now_src().NowTicks(),
175 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 175 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
176 scheduler_->BeginFrameDeadlineForTest(); 176 scheduler_->BeginFrameDeadlineForTest();
177 } 177 }
178 178
179 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { 179 TEST_F(DisplaySchedulerTest, SurfaceDamaged) {
180 SurfaceId root_surface_id(0); 180 SurfaceId root_surface_id = SurfaceId::FromUnsafeValue(0);
181 SurfaceId sid1(1); 181 SurfaceId sid1 = SurfaceId::FromUnsafeValue(1);
182 SurfaceId sid2(2); 182 SurfaceId sid2 = SurfaceId::FromUnsafeValue(2);
183 183
184 // Set the root surface 184 // Set the root surface
185 scheduler_->SetNewRootSurface(root_surface_id); 185 scheduler_->SetNewRootSurface(root_surface_id);
186 186
187 // Get scheduler to detect surface 1 as active by drawing 187 // Get scheduler to detect surface 1 as active by drawing
188 // two frames in a row with damage from surface 1. 188 // two frames in a row with damage from surface 1.
189 BeginFrameForTest(); 189 BeginFrameForTest();
190 scheduler_->SurfaceDamaged(sid1); 190 scheduler_->SurfaceDamaged(sid1);
191 scheduler_->BeginFrameDeadlineForTest(); 191 scheduler_->BeginFrameDeadlineForTest();
192 BeginFrameForTest(); 192 BeginFrameForTest();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 BeginFrameForTest(); 234 BeginFrameForTest();
235 EXPECT_LT(now_src().NowTicks(), 235 EXPECT_LT(now_src().NowTicks(),
236 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 236 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
237 scheduler_->SurfaceDamaged(root_surface_id); 237 scheduler_->SurfaceDamaged(root_surface_id);
238 EXPECT_GE(now_src().NowTicks(), 238 EXPECT_GE(now_src().NowTicks(),
239 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 239 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
240 scheduler_->BeginFrameDeadlineForTest(); 240 scheduler_->BeginFrameDeadlineForTest();
241 } 241 }
242 242
243 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { 243 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) {
244 SurfaceId sid1(1); 244 SurfaceId sid1 = SurfaceId::FromUnsafeValue(1);
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 sid1(1); 271 SurfaceId sid1 = SurfaceId::FromUnsafeValue(1);
272 272
273 // DrawAndSwap normally. 273 // DrawAndSwap normally.
274 BeginFrameForTest(); 274 BeginFrameForTest();
275 EXPECT_LT(now_src().NowTicks(), 275 EXPECT_LT(now_src().NowTicks(),
276 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 276 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
277 EXPECT_EQ(0, client_->draw_and_swap_count()); 277 EXPECT_EQ(0, client_->draw_and_swap_count());
278 scheduler_->SurfaceDamaged(sid1); 278 scheduler_->SurfaceDamaged(sid1);
279 scheduler_->BeginFrameDeadlineForTest(); 279 scheduler_->BeginFrameDeadlineForTest();
280 EXPECT_EQ(1, client_->draw_and_swap_count()); 280 EXPECT_EQ(1, client_->draw_and_swap_count());
281 281
282 scheduler_->DisplayResized(); 282 scheduler_->DisplayResized();
283 BeginFrameForTest(); 283 BeginFrameForTest();
284 // DisplayResized should trigger a swap to happen. 284 // DisplayResized should trigger a swap to happen.
285 scheduler_->BeginFrameDeadlineForTest(); 285 scheduler_->BeginFrameDeadlineForTest();
286 EXPECT_EQ(2, client_->draw_and_swap_count()); 286 EXPECT_EQ(2, client_->draw_and_swap_count());
287 } 287 }
288 288
289 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { 289 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) {
290 SurfaceId sid1(1); 290 SurfaceId sid1 = SurfaceId::FromUnsafeValue(1);
291 base::TimeTicks late_deadline; 291 base::TimeTicks late_deadline;
292 292
293 // DrawAndSwap normally. 293 // DrawAndSwap normally.
294 BeginFrameForTest(); 294 BeginFrameForTest();
295 EXPECT_LT(now_src().NowTicks(), 295 EXPECT_LT(now_src().NowTicks(),
296 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 296 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
297 EXPECT_EQ(0, client_->draw_and_swap_count()); 297 EXPECT_EQ(0, client_->draw_and_swap_count());
298 scheduler_->SurfaceDamaged(sid1); 298 scheduler_->SurfaceDamaged(sid1);
299 scheduler_->BeginFrameDeadlineForTest(); 299 scheduler_->BeginFrameDeadlineForTest();
300 EXPECT_EQ(1, client_->draw_and_swap_count()); 300 EXPECT_EQ(1, client_->draw_and_swap_count());
(...skipping 20 matching lines...) Expand all
321 scheduler_->SetRootSurfaceResourcesLocked(false); 321 scheduler_->SetRootSurfaceResourcesLocked(false);
322 EXPECT_EQ(base::TimeTicks(), 322 EXPECT_EQ(base::TimeTicks(),
323 scheduler_->DesiredBeginFrameDeadlineTimeForTest()); 323 scheduler_->DesiredBeginFrameDeadlineTimeForTest());
324 324
325 EXPECT_EQ(1, client_->draw_and_swap_count()); 325 EXPECT_EQ(1, client_->draw_and_swap_count());
326 scheduler_->BeginFrameDeadlineForTest(); 326 scheduler_->BeginFrameDeadlineForTest();
327 EXPECT_EQ(2, client_->draw_and_swap_count()); 327 EXPECT_EQ(2, client_->draw_and_swap_count());
328 } 328 }
329 329
330 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { 330 TEST_F(DisplaySchedulerTest, DidSwapBuffers) {
331 SurfaceId sid1(1); 331 SurfaceId sid1 = SurfaceId::FromUnsafeValue(1);
332 SurfaceId sid2(2); 332 SurfaceId sid2 = SurfaceId::FromUnsafeValue(2);
333 333
334 // Get scheduler to detect surface 1 and 2 as active. 334 // Get scheduler to detect surface 1 and 2 as active.
335 BeginFrameForTest(); 335 BeginFrameForTest();
336 scheduler_->SurfaceDamaged(sid1); 336 scheduler_->SurfaceDamaged(sid1);
337 scheduler_->SurfaceDamaged(sid2); 337 scheduler_->SurfaceDamaged(sid2);
338 scheduler_->BeginFrameDeadlineForTest(); 338 scheduler_->BeginFrameDeadlineForTest();
339 BeginFrameForTest(); 339 BeginFrameForTest();
340 scheduler_->SurfaceDamaged(sid1); 340 scheduler_->SurfaceDamaged(sid1);
341 scheduler_->SurfaceDamaged(sid2); 341 scheduler_->SurfaceDamaged(sid2);
342 scheduler_->BeginFrameDeadlineForTest(); 342 scheduler_->BeginFrameDeadlineForTest();
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 base::TimeTicks()); 382 base::TimeTicks());
383 // Draw and swap now that we aren't throttled. 383 // Draw and swap now that we aren't throttled.
384 EXPECT_EQ(3, client_->draw_and_swap_count()); 384 EXPECT_EQ(3, client_->draw_and_swap_count());
385 scheduler_->BeginFrameDeadlineForTest(); 385 scheduler_->BeginFrameDeadlineForTest();
386 EXPECT_EQ(4, client_->draw_and_swap_count()); 386 EXPECT_EQ(4, client_->draw_and_swap_count());
387 } 387 }
388 388
389 // This test verfies that we try to reschedule the deadline 389 // This test verfies that we try to reschedule the deadline
390 // after any event that may change what deadline we want. 390 // after any event that may change what deadline we want.
391 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { 391 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) {
392 SurfaceId root_surface_id(1); 392 SurfaceId root_surface_id = SurfaceId::FromUnsafeValue(1);
393 SurfaceId sid1(2); 393 SurfaceId sid1 = SurfaceId::FromUnsafeValue(2);
394 int count = 1; 394 int count = 1;
395 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 395 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
396 396
397 BeginFrameForTest(); 397 BeginFrameForTest();
398 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 398 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
399 399
400 scheduler_->BeginFrameDeadlineForTest(); 400 scheduler_->BeginFrameDeadlineForTest();
401 scheduler_->DidSwapBuffers(); 401 scheduler_->DidSwapBuffers();
402 BeginFrameForTest(); 402 BeginFrameForTest();
403 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 403 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
(...skipping 12 matching lines...) Expand all
416 416
417 scheduler_->SetRootSurfaceResourcesLocked(true); 417 scheduler_->SetRootSurfaceResourcesLocked(true);
418 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 418 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
419 419
420 scheduler_->OutputSurfaceLost(); 420 scheduler_->OutputSurfaceLost();
421 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count()); 421 EXPECT_EQ(count++, scheduler_->scheduler_begin_frame_deadline_count());
422 } 422 }
423 423
424 } // namespace 424 } // namespace
425 } // namespace cc 425 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698