| OLD | NEW |
| 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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 113 |
| 114 FakeExternalBeginFrameSource fake_begin_frame_source_; | 114 FakeExternalBeginFrameSource fake_begin_frame_source_; |
| 115 | 115 |
| 116 base::SimpleTestTickClock now_src_; | 116 base::SimpleTestTickClock now_src_; |
| 117 scoped_refptr<base::NullTaskRunner> task_runner_; | 117 scoped_refptr<base::NullTaskRunner> task_runner_; |
| 118 FakeDisplaySchedulerClient client_; | 118 FakeDisplaySchedulerClient client_; |
| 119 TestDisplayScheduler scheduler_; | 119 TestDisplayScheduler scheduler_; |
| 120 }; | 120 }; |
| 121 | 121 |
| 122 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { | 122 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { |
| 123 SurfaceId root_surface_id1(kArbitraryFrameSinkId, | 123 SurfaceId root_surface_id1( |
| 124 LocalFrameId(1, base::UnguessableToken::Create())); | 124 kArbitraryFrameSinkId, |
| 125 SurfaceId root_surface_id2(kArbitraryFrameSinkId, | 125 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 126 LocalFrameId(2, base::UnguessableToken::Create())); | 126 SurfaceId root_surface_id2( |
| 127 kArbitraryFrameSinkId, |
| 128 LocalSurfaceId(2, base::UnguessableToken::Create())); |
| 127 SurfaceId sid1(kArbitraryFrameSinkId, | 129 SurfaceId sid1(kArbitraryFrameSinkId, |
| 128 LocalFrameId(3, base::UnguessableToken::Create())); | 130 LocalSurfaceId(3, base::UnguessableToken::Create())); |
| 129 base::TimeTicks late_deadline; | 131 base::TimeTicks late_deadline; |
| 130 | 132 |
| 131 scheduler_.SetVisible(true); | 133 scheduler_.SetVisible(true); |
| 132 | 134 |
| 133 // Go trough an initial BeginFrame cycle with the root surface. | 135 // Go trough an initial BeginFrame cycle with the root surface. |
| 134 AdvanceTimeAndBeginFrameForTest(); | 136 AdvanceTimeAndBeginFrameForTest(); |
| 135 scheduler_.SetNewRootSurface(root_surface_id1); | 137 scheduler_.SetNewRootSurface(root_surface_id1); |
| 136 scheduler_.BeginFrameDeadlineForTest(); | 138 scheduler_.BeginFrameDeadlineForTest(); |
| 137 | 139 |
| 138 // Resize on the next begin frame cycle should cause the deadline to wait | 140 // Resize on the next begin frame cycle should cause the deadline to wait |
| (...skipping 14 matching lines...) Expand all Loading... |
| 153 AdvanceTimeAndBeginFrameForTest(); | 155 AdvanceTimeAndBeginFrameForTest(); |
| 154 scheduler_.SurfaceDamaged(sid1); | 156 scheduler_.SurfaceDamaged(sid1); |
| 155 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 157 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 156 scheduler_.SurfaceDamaged(root_surface_id2); | 158 scheduler_.SurfaceDamaged(root_surface_id2); |
| 157 EXPECT_GE(now_src().NowTicks(), | 159 EXPECT_GE(now_src().NowTicks(), |
| 158 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 160 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 159 scheduler_.BeginFrameDeadlineForTest(); | 161 scheduler_.BeginFrameDeadlineForTest(); |
| 160 } | 162 } |
| 161 | 163 |
| 162 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { | 164 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { |
| 163 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 165 SurfaceId root_surface_id( |
| 164 LocalFrameId(1, base::UnguessableToken::Create())); | 166 kArbitraryFrameSinkId, |
| 167 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 165 SurfaceId sid1(kArbitraryFrameSinkId, | 168 SurfaceId sid1(kArbitraryFrameSinkId, |
| 166 LocalFrameId(2, base::UnguessableToken::Create())); | 169 LocalSurfaceId(2, base::UnguessableToken::Create())); |
| 167 base::TimeTicks late_deadline; | 170 base::TimeTicks late_deadline; |
| 168 | 171 |
| 169 scheduler_.SetVisible(true); | 172 scheduler_.SetVisible(true); |
| 170 | 173 |
| 171 // Go trough an initial BeginFrame cycle with the root surface. | 174 // Go trough an initial BeginFrame cycle with the root surface. |
| 172 AdvanceTimeAndBeginFrameForTest(); | 175 AdvanceTimeAndBeginFrameForTest(); |
| 173 scheduler_.SetNewRootSurface(root_surface_id); | 176 scheduler_.SetNewRootSurface(root_surface_id); |
| 174 scheduler_.BeginFrameDeadlineForTest(); | 177 scheduler_.BeginFrameDeadlineForTest(); |
| 175 | 178 |
| 176 // Resize on the next begin frame cycle should cause the deadline to wait | 179 // Resize on the next begin frame cycle should cause the deadline to wait |
| (...skipping 14 matching lines...) Expand all Loading... |
| 191 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); | 194 late_deadline = now_src().NowTicks() + BeginFrameArgs::DefaultInterval(); |
| 192 scheduler_.SurfaceDamaged(sid1); | 195 scheduler_.SurfaceDamaged(sid1); |
| 193 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 196 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 194 scheduler_.SurfaceDamaged(root_surface_id); | 197 scheduler_.SurfaceDamaged(root_surface_id); |
| 195 EXPECT_GE(now_src().NowTicks(), | 198 EXPECT_GE(now_src().NowTicks(), |
| 196 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 199 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 197 scheduler_.BeginFrameDeadlineForTest(); | 200 scheduler_.BeginFrameDeadlineForTest(); |
| 198 } | 201 } |
| 199 | 202 |
| 200 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { | 203 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
| 201 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 204 SurfaceId root_surface_id( |
| 202 LocalFrameId(0, base::UnguessableToken::Create())); | 205 kArbitraryFrameSinkId, |
| 206 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 203 SurfaceId sid1(kArbitraryFrameSinkId, | 207 SurfaceId sid1(kArbitraryFrameSinkId, |
| 204 LocalFrameId(1, base::UnguessableToken::Create())); | 208 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 205 SurfaceId sid2(kArbitraryFrameSinkId, | 209 SurfaceId sid2(kArbitraryFrameSinkId, |
| 206 LocalFrameId(2, base::UnguessableToken::Create())); | 210 LocalSurfaceId(2, base::UnguessableToken::Create())); |
| 207 | 211 |
| 208 scheduler_.SetVisible(true); | 212 scheduler_.SetVisible(true); |
| 209 | 213 |
| 210 // Set the root surface | 214 // Set the root surface |
| 211 scheduler_.SetNewRootSurface(root_surface_id); | 215 scheduler_.SetNewRootSurface(root_surface_id); |
| 212 | 216 |
| 213 // Get scheduler to detect surface 1 as active by drawing | 217 // Get scheduler to detect surface 1 as active by drawing |
| 214 // two frames in a row with damage from surface 1. | 218 // two frames in a row with damage from surface 1. |
| 215 AdvanceTimeAndBeginFrameForTest(); | 219 AdvanceTimeAndBeginFrameForTest(); |
| 216 scheduler_.SurfaceDamaged(sid1); | 220 scheduler_.SurfaceDamaged(sid1); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 // we get damage on the root surface. | 263 // we get damage on the root surface. |
| 260 AdvanceTimeAndBeginFrameForTest(); | 264 AdvanceTimeAndBeginFrameForTest(); |
| 261 EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval()); | 265 EXPECT_FALSE(scheduler_.inside_begin_frame_deadline_interval()); |
| 262 scheduler_.SurfaceDamaged(root_surface_id); | 266 scheduler_.SurfaceDamaged(root_surface_id); |
| 263 EXPECT_GE(now_src().NowTicks(), | 267 EXPECT_GE(now_src().NowTicks(), |
| 264 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 268 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 265 scheduler_.BeginFrameDeadlineForTest(); | 269 scheduler_.BeginFrameDeadlineForTest(); |
| 266 } | 270 } |
| 267 | 271 |
| 268 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { | 272 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { |
| 269 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 273 SurfaceId root_surface_id( |
| 270 LocalFrameId(0, base::UnguessableToken::Create())); | 274 kArbitraryFrameSinkId, |
| 275 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 271 SurfaceId sid1(kArbitraryFrameSinkId, | 276 SurfaceId sid1(kArbitraryFrameSinkId, |
| 272 LocalFrameId(1, base::UnguessableToken::Create())); | 277 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 273 | 278 |
| 274 scheduler_.SetVisible(true); | 279 scheduler_.SetVisible(true); |
| 275 | 280 |
| 276 // Set the root surface | 281 // Set the root surface |
| 277 scheduler_.SetNewRootSurface(root_surface_id); | 282 scheduler_.SetNewRootSurface(root_surface_id); |
| 278 | 283 |
| 279 // DrawAndSwap normally. | 284 // DrawAndSwap normally. |
| 280 AdvanceTimeAndBeginFrameForTest(); | 285 AdvanceTimeAndBeginFrameForTest(); |
| 281 EXPECT_LT(now_src().NowTicks(), | 286 EXPECT_LT(now_src().NowTicks(), |
| 282 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 287 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 294 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 299 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 295 | 300 |
| 296 // Deadline does not DrawAndSwap after OutputSurfaceLost. | 301 // Deadline does not DrawAndSwap after OutputSurfaceLost. |
| 297 EXPECT_EQ(1, client_.draw_and_swap_count()); | 302 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 298 scheduler_.SurfaceDamaged(sid1); | 303 scheduler_.SurfaceDamaged(sid1); |
| 299 scheduler_.BeginFrameDeadlineForTest(); | 304 scheduler_.BeginFrameDeadlineForTest(); |
| 300 EXPECT_EQ(1, client_.draw_and_swap_count()); | 305 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 301 } | 306 } |
| 302 | 307 |
| 303 TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) { | 308 TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) { |
| 304 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 309 SurfaceId root_surface_id( |
| 305 LocalFrameId(0, base::UnguessableToken::Create())); | 310 kArbitraryFrameSinkId, |
| 311 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 306 SurfaceId sid1(kArbitraryFrameSinkId, | 312 SurfaceId sid1(kArbitraryFrameSinkId, |
| 307 LocalFrameId(1, base::UnguessableToken::Create())); | 313 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 308 | 314 |
| 309 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 315 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 310 scheduler_.SetVisible(true); | 316 scheduler_.SetVisible(true); |
| 311 | 317 |
| 312 // When becoming visible, don't start listening for begin frames until there | 318 // When becoming visible, don't start listening for begin frames until there |
| 313 // is some damage. | 319 // is some damage. |
| 314 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 320 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 315 scheduler_.SetNewRootSurface(root_surface_id); | 321 scheduler_.SetNewRootSurface(root_surface_id); |
| 316 | 322 |
| 317 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 323 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 318 } | 324 } |
| 319 | 325 |
| 320 TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { | 326 TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { |
| 321 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 327 SurfaceId root_surface_id( |
| 322 LocalFrameId(0, base::UnguessableToken::Create())); | 328 kArbitraryFrameSinkId, |
| 329 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 323 SurfaceId sid1(kArbitraryFrameSinkId, | 330 SurfaceId sid1(kArbitraryFrameSinkId, |
| 324 LocalFrameId(1, base::UnguessableToken::Create())); | 331 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 325 | 332 |
| 326 scheduler_.SetNewRootSurface(root_surface_id); | 333 scheduler_.SetNewRootSurface(root_surface_id); |
| 327 | 334 |
| 328 // When there is damage, start listening for begin frames once becoming | 335 // When there is damage, start listening for begin frames once becoming |
| 329 // visible. | 336 // visible. |
| 330 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 337 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 331 scheduler_.SetVisible(true); | 338 scheduler_.SetVisible(true); |
| 332 | 339 |
| 333 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 340 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 334 } | 341 } |
| 335 | 342 |
| 336 TEST_F(DisplaySchedulerTest, Visibility) { | 343 TEST_F(DisplaySchedulerTest, Visibility) { |
| 337 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 344 SurfaceId root_surface_id( |
| 338 LocalFrameId(0, base::UnguessableToken::Create())); | 345 kArbitraryFrameSinkId, |
| 346 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 339 SurfaceId sid1(kArbitraryFrameSinkId, | 347 SurfaceId sid1(kArbitraryFrameSinkId, |
| 340 LocalFrameId(1, base::UnguessableToken::Create())); | 348 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 341 | 349 |
| 342 scheduler_.SetNewRootSurface(root_surface_id); | 350 scheduler_.SetNewRootSurface(root_surface_id); |
| 343 scheduler_.SetVisible(true); | 351 scheduler_.SetVisible(true); |
| 344 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 352 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 345 | 353 |
| 346 // DrawAndSwap normally. | 354 // DrawAndSwap normally. |
| 347 AdvanceTimeAndBeginFrameForTest(); | 355 AdvanceTimeAndBeginFrameForTest(); |
| 348 EXPECT_LT(now_src().NowTicks(), | 356 EXPECT_LT(now_src().NowTicks(), |
| 349 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 357 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 350 EXPECT_EQ(0, client_.draw_and_swap_count()); | 358 EXPECT_EQ(0, client_.draw_and_swap_count()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 378 // Does not start listening for begin frames when damage arrives. | 386 // Does not start listening for begin frames when damage arrives. |
| 379 scheduler_.SurfaceDamaged(sid1); | 387 scheduler_.SurfaceDamaged(sid1); |
| 380 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 388 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 381 | 389 |
| 382 // But does when becoming visible with damage again. | 390 // But does when becoming visible with damage again. |
| 383 scheduler_.SetVisible(true); | 391 scheduler_.SetVisible(true); |
| 384 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 392 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 385 } | 393 } |
| 386 | 394 |
| 387 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { | 395 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { |
| 388 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 396 SurfaceId root_surface_id( |
| 389 LocalFrameId(0, base::UnguessableToken::Create())); | 397 kArbitraryFrameSinkId, |
| 398 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 390 SurfaceId sid1(kArbitraryFrameSinkId, | 399 SurfaceId sid1(kArbitraryFrameSinkId, |
| 391 LocalFrameId(1, base::UnguessableToken::Create())); | 400 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 392 | 401 |
| 393 scheduler_.SetVisible(true); | 402 scheduler_.SetVisible(true); |
| 394 | 403 |
| 395 // Set the root surface | 404 // Set the root surface |
| 396 scheduler_.SetNewRootSurface(root_surface_id); | 405 scheduler_.SetNewRootSurface(root_surface_id); |
| 397 | 406 |
| 398 // DrawAndSwap normally. | 407 // DrawAndSwap normally. |
| 399 AdvanceTimeAndBeginFrameForTest(); | 408 AdvanceTimeAndBeginFrameForTest(); |
| 400 EXPECT_LT(now_src().NowTicks(), | 409 EXPECT_LT(now_src().NowTicks(), |
| 401 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 410 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 402 EXPECT_EQ(0, client_.draw_and_swap_count()); | 411 EXPECT_EQ(0, client_.draw_and_swap_count()); |
| 403 scheduler_.SurfaceDamaged(sid1); | 412 scheduler_.SurfaceDamaged(sid1); |
| 404 scheduler_.BeginFrameDeadlineForTest(); | 413 scheduler_.BeginFrameDeadlineForTest(); |
| 405 EXPECT_EQ(1, client_.draw_and_swap_count()); | 414 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 406 | 415 |
| 407 scheduler_.DisplayResized(); | 416 scheduler_.DisplayResized(); |
| 408 AdvanceTimeAndBeginFrameForTest(); | 417 AdvanceTimeAndBeginFrameForTest(); |
| 409 // DisplayResized should trigger a swap to happen. | 418 // DisplayResized should trigger a swap to happen. |
| 410 scheduler_.BeginFrameDeadlineForTest(); | 419 scheduler_.BeginFrameDeadlineForTest(); |
| 411 EXPECT_EQ(2, client_.draw_and_swap_count()); | 420 EXPECT_EQ(2, client_.draw_and_swap_count()); |
| 412 } | 421 } |
| 413 | 422 |
| 414 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { | 423 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { |
| 415 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 424 SurfaceId root_surface_id( |
| 416 LocalFrameId(0, base::UnguessableToken::Create())); | 425 kArbitraryFrameSinkId, |
| 426 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 417 SurfaceId sid1(kArbitraryFrameSinkId, | 427 SurfaceId sid1(kArbitraryFrameSinkId, |
| 418 LocalFrameId(1, base::UnguessableToken::Create())); | 428 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 419 base::TimeTicks late_deadline; | 429 base::TimeTicks late_deadline; |
| 420 | 430 |
| 421 scheduler_.SetVisible(true); | 431 scheduler_.SetVisible(true); |
| 422 | 432 |
| 423 // Set the root surface | 433 // Set the root surface |
| 424 scheduler_.SetNewRootSurface(root_surface_id); | 434 scheduler_.SetNewRootSurface(root_surface_id); |
| 425 | 435 |
| 426 // DrawAndSwap normally. | 436 // DrawAndSwap normally. |
| 427 AdvanceTimeAndBeginFrameForTest(); | 437 AdvanceTimeAndBeginFrameForTest(); |
| 428 EXPECT_LT(now_src().NowTicks(), | 438 EXPECT_LT(now_src().NowTicks(), |
| (...skipping 26 matching lines...) Expand all Loading... |
| 455 scheduler_.SurfaceDamaged(root_surface_id); | 465 scheduler_.SurfaceDamaged(root_surface_id); |
| 456 EXPECT_EQ(base::TimeTicks(), | 466 EXPECT_EQ(base::TimeTicks(), |
| 457 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 467 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 458 | 468 |
| 459 EXPECT_EQ(1, client_.draw_and_swap_count()); | 469 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 460 scheduler_.BeginFrameDeadlineForTest(); | 470 scheduler_.BeginFrameDeadlineForTest(); |
| 461 EXPECT_EQ(2, client_.draw_and_swap_count()); | 471 EXPECT_EQ(2, client_.draw_and_swap_count()); |
| 462 } | 472 } |
| 463 | 473 |
| 464 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { | 474 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { |
| 465 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 475 SurfaceId root_surface_id( |
| 466 LocalFrameId(0, base::UnguessableToken::Create())); | 476 kArbitraryFrameSinkId, |
| 477 LocalSurfaceId(0, base::UnguessableToken::Create())); |
| 467 SurfaceId sid1(kArbitraryFrameSinkId, | 478 SurfaceId sid1(kArbitraryFrameSinkId, |
| 468 LocalFrameId(1, base::UnguessableToken::Create())); | 479 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 469 SurfaceId sid2(kArbitraryFrameSinkId, | 480 SurfaceId sid2(kArbitraryFrameSinkId, |
| 470 LocalFrameId(2, base::UnguessableToken::Create())); | 481 LocalSurfaceId(2, base::UnguessableToken::Create())); |
| 471 | 482 |
| 472 scheduler_.SetVisible(true); | 483 scheduler_.SetVisible(true); |
| 473 | 484 |
| 474 // Set the root surface | 485 // Set the root surface |
| 475 scheduler_.SetNewRootSurface(root_surface_id); | 486 scheduler_.SetNewRootSurface(root_surface_id); |
| 476 | 487 |
| 477 // Get scheduler to detect surface 1 and 2 as active. | 488 // Get scheduler to detect surface 1 and 2 as active. |
| 478 AdvanceTimeAndBeginFrameForTest(); | 489 AdvanceTimeAndBeginFrameForTest(); |
| 479 scheduler_.SurfaceDamaged(sid1); | 490 scheduler_.SurfaceDamaged(sid1); |
| 480 scheduler_.SurfaceDamaged(sid2); | 491 scheduler_.SurfaceDamaged(sid2); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 base::TimeTicks()); | 536 base::TimeTicks()); |
| 526 // Draw and swap now that we aren't throttled. | 537 // Draw and swap now that we aren't throttled. |
| 527 EXPECT_EQ(3, client_.draw_and_swap_count()); | 538 EXPECT_EQ(3, client_.draw_and_swap_count()); |
| 528 scheduler_.BeginFrameDeadlineForTest(); | 539 scheduler_.BeginFrameDeadlineForTest(); |
| 529 EXPECT_EQ(4, client_.draw_and_swap_count()); | 540 EXPECT_EQ(4, client_.draw_and_swap_count()); |
| 530 } | 541 } |
| 531 | 542 |
| 532 // This test verfies that we try to reschedule the deadline | 543 // This test verfies that we try to reschedule the deadline |
| 533 // after any event that may change what deadline we want. | 544 // after any event that may change what deadline we want. |
| 534 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { | 545 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { |
| 535 SurfaceId root_surface_id(kArbitraryFrameSinkId, | 546 SurfaceId root_surface_id( |
| 536 LocalFrameId(1, base::UnguessableToken::Create())); | 547 kArbitraryFrameSinkId, |
| 548 LocalSurfaceId(1, base::UnguessableToken::Create())); |
| 537 SurfaceId sid1(kArbitraryFrameSinkId, | 549 SurfaceId sid1(kArbitraryFrameSinkId, |
| 538 LocalFrameId(2, base::UnguessableToken::Create())); | 550 LocalSurfaceId(2, base::UnguessableToken::Create())); |
| 539 int count = 1; | 551 int count = 1; |
| 540 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); | 552 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 541 | 553 |
| 542 scheduler_.SetVisible(true); | 554 scheduler_.SetVisible(true); |
| 543 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 555 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 544 | 556 |
| 545 scheduler_.SetVisible(true); | 557 scheduler_.SetVisible(true); |
| 546 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); | 558 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 547 | 559 |
| 548 scheduler_.SetVisible(false); | 560 scheduler_.SetVisible(false); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 | 593 |
| 582 scheduler_.SetRootSurfaceResourcesLocked(true); | 594 scheduler_.SetRootSurfaceResourcesLocked(true); |
| 583 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 595 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 584 | 596 |
| 585 scheduler_.OutputSurfaceLost(); | 597 scheduler_.OutputSurfaceLost(); |
| 586 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 598 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 587 } | 599 } |
| 588 | 600 |
| 589 } // namespace | 601 } // namespace |
| 590 } // namespace cc | 602 } // namespace cc |
| OLD | NEW |