| 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 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 99 |
| 100 FakeExternalBeginFrameSource fake_begin_frame_source_; | 100 FakeExternalBeginFrameSource fake_begin_frame_source_; |
| 101 | 101 |
| 102 base::SimpleTestTickClock now_src_; | 102 base::SimpleTestTickClock now_src_; |
| 103 scoped_refptr<base::NullTaskRunner> task_runner_; | 103 scoped_refptr<base::NullTaskRunner> task_runner_; |
| 104 FakeDisplaySchedulerClient client_; | 104 FakeDisplaySchedulerClient client_; |
| 105 TestDisplayScheduler scheduler_; | 105 TestDisplayScheduler scheduler_; |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { | 108 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilNewRootSurface) { |
| 109 SurfaceId root_surface_id1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 109 SurfaceId root_surface_id1(kArbitraryFrameSinkId, |
| 110 SurfaceId root_surface_id2(kArbitraryFrameSinkId, LocalFrameId(2, 0)); | 110 LocalFrameId(1, base::UnguessableToken::Create())); |
| 111 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(3, 0)); | 111 SurfaceId root_surface_id2(kArbitraryFrameSinkId, |
| 112 LocalFrameId(2, base::UnguessableToken::Create())); |
| 113 SurfaceId sid1(kArbitraryFrameSinkId, |
| 114 LocalFrameId(3, base::UnguessableToken::Create())); |
| 112 base::TimeTicks late_deadline; | 115 base::TimeTicks late_deadline; |
| 113 | 116 |
| 114 scheduler_.SetVisible(true); | 117 scheduler_.SetVisible(true); |
| 115 | 118 |
| 116 // Go trough an initial BeginFrame cycle with the root surface. | 119 // Go trough an initial BeginFrame cycle with the root surface. |
| 117 BeginFrameForTest(); | 120 BeginFrameForTest(); |
| 118 scheduler_.SetNewRootSurface(root_surface_id1); | 121 scheduler_.SetNewRootSurface(root_surface_id1); |
| 119 scheduler_.BeginFrameDeadlineForTest(); | 122 scheduler_.BeginFrameDeadlineForTest(); |
| 120 | 123 |
| 121 // Resize on the next begin frame cycle should cause the deadline to wait | 124 // Resize on the next begin frame cycle should cause the deadline to wait |
| (...skipping 14 matching lines...) Expand all Loading... |
| 136 BeginFrameForTest(); | 139 BeginFrameForTest(); |
| 137 scheduler_.SurfaceDamaged(sid1); | 140 scheduler_.SurfaceDamaged(sid1); |
| 138 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 141 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 139 scheduler_.SurfaceDamaged(root_surface_id2); | 142 scheduler_.SurfaceDamaged(root_surface_id2); |
| 140 EXPECT_GE(now_src().NowTicks(), | 143 EXPECT_GE(now_src().NowTicks(), |
| 141 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 144 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 142 scheduler_.BeginFrameDeadlineForTest(); | 145 scheduler_.BeginFrameDeadlineForTest(); |
| 143 } | 146 } |
| 144 | 147 |
| 145 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { | 148 TEST_F(DisplaySchedulerTest, ResizeHasLateDeadlineUntilDamagedSurface) { |
| 146 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 149 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 147 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(2, 0)); | 150 LocalFrameId(1, base::UnguessableToken::Create())); |
| 151 SurfaceId sid1(kArbitraryFrameSinkId, |
| 152 LocalFrameId(2, base::UnguessableToken::Create())); |
| 148 base::TimeTicks late_deadline; | 153 base::TimeTicks late_deadline; |
| 149 | 154 |
| 150 scheduler_.SetVisible(true); | 155 scheduler_.SetVisible(true); |
| 151 | 156 |
| 152 // Go trough an initial BeginFrame cycle with the root surface. | 157 // Go trough an initial BeginFrame cycle with the root surface. |
| 153 BeginFrameForTest(); | 158 BeginFrameForTest(); |
| 154 scheduler_.SetNewRootSurface(root_surface_id); | 159 scheduler_.SetNewRootSurface(root_surface_id); |
| 155 scheduler_.BeginFrameDeadlineForTest(); | 160 scheduler_.BeginFrameDeadlineForTest(); |
| 156 | 161 |
| 157 // Resize on the next begin frame cycle should cause the deadline to wait | 162 // Resize on the next begin frame cycle should cause the deadline to wait |
| (...skipping 14 matching lines...) Expand all Loading... |
| 172 BeginFrameForTest(); | 177 BeginFrameForTest(); |
| 173 scheduler_.SurfaceDamaged(sid1); | 178 scheduler_.SurfaceDamaged(sid1); |
| 174 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 179 EXPECT_GT(late_deadline, scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 175 scheduler_.SurfaceDamaged(root_surface_id); | 180 scheduler_.SurfaceDamaged(root_surface_id); |
| 176 EXPECT_GE(now_src().NowTicks(), | 181 EXPECT_GE(now_src().NowTicks(), |
| 177 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 182 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 178 scheduler_.BeginFrameDeadlineForTest(); | 183 scheduler_.BeginFrameDeadlineForTest(); |
| 179 } | 184 } |
| 180 | 185 |
| 181 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { | 186 TEST_F(DisplaySchedulerTest, SurfaceDamaged) { |
| 182 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 187 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 183 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 188 LocalFrameId(0, base::UnguessableToken::Create())); |
| 184 SurfaceId sid2(kArbitraryFrameSinkId, LocalFrameId(2, 0)); | 189 SurfaceId sid1(kArbitraryFrameSinkId, |
| 190 LocalFrameId(1, base::UnguessableToken::Create())); |
| 191 SurfaceId sid2(kArbitraryFrameSinkId, |
| 192 LocalFrameId(2, base::UnguessableToken::Create())); |
| 185 | 193 |
| 186 scheduler_.SetVisible(true); | 194 scheduler_.SetVisible(true); |
| 187 | 195 |
| 188 // Set the root surface | 196 // Set the root surface |
| 189 scheduler_.SetNewRootSurface(root_surface_id); | 197 scheduler_.SetNewRootSurface(root_surface_id); |
| 190 | 198 |
| 191 // Get scheduler to detect surface 1 as active by drawing | 199 // Get scheduler to detect surface 1 as active by drawing |
| 192 // two frames in a row with damage from surface 1. | 200 // two frames in a row with damage from surface 1. |
| 193 BeginFrameForTest(); | 201 BeginFrameForTest(); |
| 194 scheduler_.SurfaceDamaged(sid1); | 202 scheduler_.SurfaceDamaged(sid1); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 BeginFrameForTest(); | 246 BeginFrameForTest(); |
| 239 EXPECT_LT(now_src().NowTicks(), | 247 EXPECT_LT(now_src().NowTicks(), |
| 240 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 248 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 241 scheduler_.SurfaceDamaged(root_surface_id); | 249 scheduler_.SurfaceDamaged(root_surface_id); |
| 242 EXPECT_GE(now_src().NowTicks(), | 250 EXPECT_GE(now_src().NowTicks(), |
| 243 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 251 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 244 scheduler_.BeginFrameDeadlineForTest(); | 252 scheduler_.BeginFrameDeadlineForTest(); |
| 245 } | 253 } |
| 246 | 254 |
| 247 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { | 255 TEST_F(DisplaySchedulerTest, OutputSurfaceLost) { |
| 248 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 256 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 249 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 257 LocalFrameId(0, base::UnguessableToken::Create())); |
| 258 SurfaceId sid1(kArbitraryFrameSinkId, |
| 259 LocalFrameId(1, base::UnguessableToken::Create())); |
| 250 | 260 |
| 251 scheduler_.SetVisible(true); | 261 scheduler_.SetVisible(true); |
| 252 | 262 |
| 253 // Set the root surface | 263 // Set the root surface |
| 254 scheduler_.SetNewRootSurface(root_surface_id); | 264 scheduler_.SetNewRootSurface(root_surface_id); |
| 255 | 265 |
| 256 // DrawAndSwap normally. | 266 // DrawAndSwap normally. |
| 257 BeginFrameForTest(); | 267 BeginFrameForTest(); |
| 258 EXPECT_LT(now_src().NowTicks(), | 268 EXPECT_LT(now_src().NowTicks(), |
| 259 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 269 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 271 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 281 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 272 | 282 |
| 273 // Deadline does not DrawAndSwap after OutputSurfaceLost. | 283 // Deadline does not DrawAndSwap after OutputSurfaceLost. |
| 274 EXPECT_EQ(1, client_.draw_and_swap_count()); | 284 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 275 scheduler_.SurfaceDamaged(sid1); | 285 scheduler_.SurfaceDamaged(sid1); |
| 276 scheduler_.BeginFrameDeadlineForTest(); | 286 scheduler_.BeginFrameDeadlineForTest(); |
| 277 EXPECT_EQ(1, client_.draw_and_swap_count()); | 287 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 278 } | 288 } |
| 279 | 289 |
| 280 TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) { | 290 TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) { |
| 281 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 291 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 282 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 292 LocalFrameId(0, base::UnguessableToken::Create())); |
| 293 SurfaceId sid1(kArbitraryFrameSinkId, |
| 294 LocalFrameId(1, base::UnguessableToken::Create())); |
| 283 | 295 |
| 284 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 296 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 285 scheduler_.SetVisible(true); | 297 scheduler_.SetVisible(true); |
| 286 | 298 |
| 287 // When becoming visible, don't start listening for begin frames until there | 299 // When becoming visible, don't start listening for begin frames until there |
| 288 // is some damage. | 300 // is some damage. |
| 289 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 301 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 290 scheduler_.SetNewRootSurface(root_surface_id); | 302 scheduler_.SetNewRootSurface(root_surface_id); |
| 291 | 303 |
| 292 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 304 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 293 } | 305 } |
| 294 | 306 |
| 295 TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { | 307 TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) { |
| 296 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 308 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 297 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 309 LocalFrameId(0, base::UnguessableToken::Create())); |
| 310 SurfaceId sid1(kArbitraryFrameSinkId, |
| 311 LocalFrameId(1, base::UnguessableToken::Create())); |
| 298 | 312 |
| 299 scheduler_.SetNewRootSurface(root_surface_id); | 313 scheduler_.SetNewRootSurface(root_surface_id); |
| 300 | 314 |
| 301 // When there is damage, start listening for begin frames once becoming | 315 // When there is damage, start listening for begin frames once becoming |
| 302 // visible. | 316 // visible. |
| 303 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 317 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 304 scheduler_.SetVisible(true); | 318 scheduler_.SetVisible(true); |
| 305 | 319 |
| 306 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 320 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 307 } | 321 } |
| 308 | 322 |
| 309 TEST_F(DisplaySchedulerTest, Visibility) { | 323 TEST_F(DisplaySchedulerTest, Visibility) { |
| 310 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 324 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 311 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 325 LocalFrameId(0, base::UnguessableToken::Create())); |
| 326 SurfaceId sid1(kArbitraryFrameSinkId, |
| 327 LocalFrameId(1, base::UnguessableToken::Create())); |
| 312 | 328 |
| 313 scheduler_.SetNewRootSurface(root_surface_id); | 329 scheduler_.SetNewRootSurface(root_surface_id); |
| 314 scheduler_.SetVisible(true); | 330 scheduler_.SetVisible(true); |
| 315 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 331 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 316 | 332 |
| 317 // DrawAndSwap normally. | 333 // DrawAndSwap normally. |
| 318 BeginFrameForTest(); | 334 BeginFrameForTest(); |
| 319 EXPECT_LT(now_src().NowTicks(), | 335 EXPECT_LT(now_src().NowTicks(), |
| 320 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 336 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 321 EXPECT_EQ(0, client_.draw_and_swap_count()); | 337 EXPECT_EQ(0, client_.draw_and_swap_count()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 349 // Does not start listening for begin frames when damage arrives. | 365 // Does not start listening for begin frames when damage arrives. |
| 350 scheduler_.SurfaceDamaged(sid1); | 366 scheduler_.SurfaceDamaged(sid1); |
| 351 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); | 367 EXPECT_EQ(0u, fake_begin_frame_source_.num_observers()); |
| 352 | 368 |
| 353 // But does when becoming visible with damage again. | 369 // But does when becoming visible with damage again. |
| 354 scheduler_.SetVisible(true); | 370 scheduler_.SetVisible(true); |
| 355 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); | 371 EXPECT_EQ(1u, fake_begin_frame_source_.num_observers()); |
| 356 } | 372 } |
| 357 | 373 |
| 358 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { | 374 TEST_F(DisplaySchedulerTest, ResizeCausesSwap) { |
| 359 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 375 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 360 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 376 LocalFrameId(0, base::UnguessableToken::Create())); |
| 377 SurfaceId sid1(kArbitraryFrameSinkId, |
| 378 LocalFrameId(1, base::UnguessableToken::Create())); |
| 361 | 379 |
| 362 scheduler_.SetVisible(true); | 380 scheduler_.SetVisible(true); |
| 363 | 381 |
| 364 // Set the root surface | 382 // Set the root surface |
| 365 scheduler_.SetNewRootSurface(root_surface_id); | 383 scheduler_.SetNewRootSurface(root_surface_id); |
| 366 | 384 |
| 367 // DrawAndSwap normally. | 385 // DrawAndSwap normally. |
| 368 BeginFrameForTest(); | 386 BeginFrameForTest(); |
| 369 EXPECT_LT(now_src().NowTicks(), | 387 EXPECT_LT(now_src().NowTicks(), |
| 370 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 388 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 371 EXPECT_EQ(0, client_.draw_and_swap_count()); | 389 EXPECT_EQ(0, client_.draw_and_swap_count()); |
| 372 scheduler_.SurfaceDamaged(sid1); | 390 scheduler_.SurfaceDamaged(sid1); |
| 373 scheduler_.BeginFrameDeadlineForTest(); | 391 scheduler_.BeginFrameDeadlineForTest(); |
| 374 EXPECT_EQ(1, client_.draw_and_swap_count()); | 392 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 375 | 393 |
| 376 scheduler_.DisplayResized(); | 394 scheduler_.DisplayResized(); |
| 377 BeginFrameForTest(); | 395 BeginFrameForTest(); |
| 378 // DisplayResized should trigger a swap to happen. | 396 // DisplayResized should trigger a swap to happen. |
| 379 scheduler_.BeginFrameDeadlineForTest(); | 397 scheduler_.BeginFrameDeadlineForTest(); |
| 380 EXPECT_EQ(2, client_.draw_and_swap_count()); | 398 EXPECT_EQ(2, client_.draw_and_swap_count()); |
| 381 } | 399 } |
| 382 | 400 |
| 383 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { | 401 TEST_F(DisplaySchedulerTest, RootSurfaceResourcesLocked) { |
| 384 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 402 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 385 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 403 LocalFrameId(0, base::UnguessableToken::Create())); |
| 404 SurfaceId sid1(kArbitraryFrameSinkId, |
| 405 LocalFrameId(1, base::UnguessableToken::Create())); |
| 386 base::TimeTicks late_deadline; | 406 base::TimeTicks late_deadline; |
| 387 | 407 |
| 388 scheduler_.SetVisible(true); | 408 scheduler_.SetVisible(true); |
| 389 | 409 |
| 390 // Set the root surface | 410 // Set the root surface |
| 391 scheduler_.SetNewRootSurface(root_surface_id); | 411 scheduler_.SetNewRootSurface(root_surface_id); |
| 392 | 412 |
| 393 // DrawAndSwap normally. | 413 // DrawAndSwap normally. |
| 394 BeginFrameForTest(); | 414 BeginFrameForTest(); |
| 395 EXPECT_LT(now_src().NowTicks(), | 415 EXPECT_LT(now_src().NowTicks(), |
| (...skipping 26 matching lines...) Expand all Loading... |
| 422 scheduler_.SurfaceDamaged(root_surface_id); | 442 scheduler_.SurfaceDamaged(root_surface_id); |
| 423 EXPECT_EQ(base::TimeTicks(), | 443 EXPECT_EQ(base::TimeTicks(), |
| 424 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); | 444 scheduler_.DesiredBeginFrameDeadlineTimeForTest()); |
| 425 | 445 |
| 426 EXPECT_EQ(1, client_.draw_and_swap_count()); | 446 EXPECT_EQ(1, client_.draw_and_swap_count()); |
| 427 scheduler_.BeginFrameDeadlineForTest(); | 447 scheduler_.BeginFrameDeadlineForTest(); |
| 428 EXPECT_EQ(2, client_.draw_and_swap_count()); | 448 EXPECT_EQ(2, client_.draw_and_swap_count()); |
| 429 } | 449 } |
| 430 | 450 |
| 431 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { | 451 TEST_F(DisplaySchedulerTest, DidSwapBuffers) { |
| 432 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(0, 0)); | 452 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 433 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 453 LocalFrameId(0, base::UnguessableToken::Create())); |
| 434 SurfaceId sid2(kArbitraryFrameSinkId, LocalFrameId(2, 0)); | 454 SurfaceId sid1(kArbitraryFrameSinkId, |
| 455 LocalFrameId(1, base::UnguessableToken::Create())); |
| 456 SurfaceId sid2(kArbitraryFrameSinkId, |
| 457 LocalFrameId(2, base::UnguessableToken::Create())); |
| 435 | 458 |
| 436 scheduler_.SetVisible(true); | 459 scheduler_.SetVisible(true); |
| 437 | 460 |
| 438 // Set the root surface | 461 // Set the root surface |
| 439 scheduler_.SetNewRootSurface(root_surface_id); | 462 scheduler_.SetNewRootSurface(root_surface_id); |
| 440 | 463 |
| 441 // Get scheduler to detect surface 1 and 2 as active. | 464 // Get scheduler to detect surface 1 and 2 as active. |
| 442 BeginFrameForTest(); | 465 BeginFrameForTest(); |
| 443 scheduler_.SurfaceDamaged(sid1); | 466 scheduler_.SurfaceDamaged(sid1); |
| 444 scheduler_.SurfaceDamaged(sid2); | 467 scheduler_.SurfaceDamaged(sid2); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 489 base::TimeTicks()); | 512 base::TimeTicks()); |
| 490 // Draw and swap now that we aren't throttled. | 513 // Draw and swap now that we aren't throttled. |
| 491 EXPECT_EQ(3, client_.draw_and_swap_count()); | 514 EXPECT_EQ(3, client_.draw_and_swap_count()); |
| 492 scheduler_.BeginFrameDeadlineForTest(); | 515 scheduler_.BeginFrameDeadlineForTest(); |
| 493 EXPECT_EQ(4, client_.draw_and_swap_count()); | 516 EXPECT_EQ(4, client_.draw_and_swap_count()); |
| 494 } | 517 } |
| 495 | 518 |
| 496 // This test verfies that we try to reschedule the deadline | 519 // This test verfies that we try to reschedule the deadline |
| 497 // after any event that may change what deadline we want. | 520 // after any event that may change what deadline we want. |
| 498 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { | 521 TEST_F(DisplaySchedulerTest, ScheduleBeginFrameDeadline) { |
| 499 SurfaceId root_surface_id(kArbitraryFrameSinkId, LocalFrameId(1, 0)); | 522 SurfaceId root_surface_id(kArbitraryFrameSinkId, |
| 500 SurfaceId sid1(kArbitraryFrameSinkId, LocalFrameId(2, 0)); | 523 LocalFrameId(1, base::UnguessableToken::Create())); |
| 524 SurfaceId sid1(kArbitraryFrameSinkId, |
| 525 LocalFrameId(2, base::UnguessableToken::Create())); |
| 501 int count = 1; | 526 int count = 1; |
| 502 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); | 527 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 503 | 528 |
| 504 scheduler_.SetVisible(true); | 529 scheduler_.SetVisible(true); |
| 505 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 530 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 506 | 531 |
| 507 scheduler_.SetVisible(true); | 532 scheduler_.SetVisible(true); |
| 508 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); | 533 EXPECT_EQ(count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 509 | 534 |
| 510 scheduler_.SetVisible(false); | 535 scheduler_.SetVisible(false); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 543 | 568 |
| 544 scheduler_.SetRootSurfaceResourcesLocked(true); | 569 scheduler_.SetRootSurfaceResourcesLocked(true); |
| 545 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 570 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 546 | 571 |
| 547 scheduler_.OutputSurfaceLost(); | 572 scheduler_.OutputSurfaceLost(); |
| 548 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); | 573 EXPECT_EQ(++count, scheduler_.scheduler_begin_frame_deadline_count()); |
| 549 } | 574 } |
| 550 | 575 |
| 551 } // namespace | 576 } // namespace |
| 552 } // namespace cc | 577 } // namespace cc |
| OLD | NEW |