| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/layers/texture_layer.h" | 5 #include "cc/layers/texture_layer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 test_layer->SetTextureMailbox( | 333 test_layer->SetTextureMailbox( |
| 334 test_data_.mailbox1_, | 334 test_data_.mailbox1_, |
| 335 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); | 335 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); |
| 336 } | 336 } |
| 337 | 337 |
| 338 class TextureLayerMailboxHolderTest : public TextureLayerTest { | 338 class TextureLayerMailboxHolderTest : public TextureLayerTest { |
| 339 public: | 339 public: |
| 340 TextureLayerMailboxHolderTest() | 340 TextureLayerMailboxHolderTest() |
| 341 : main_thread_("MAIN") { | 341 : main_thread_("MAIN") { |
| 342 main_thread_.Start(); | 342 main_thread_.Start(); |
| 343 main_thread_.message_loop()->task_runner()->PostTask( | 343 main_thread_.task_runner()->PostTask( |
| 344 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::InitializeOnMain, | 344 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::InitializeOnMain, |
| 345 base::Unretained(this))); | 345 base::Unretained(this))); |
| 346 Wait(main_thread_); | 346 Wait(main_thread_); |
| 347 } | 347 } |
| 348 | 348 |
| 349 void Wait(const base::Thread& thread) { | 349 void Wait(const base::Thread& thread) { |
| 350 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, | 350 base::WaitableEvent event(base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 351 base::WaitableEvent::InitialState::NOT_SIGNALED); | 351 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 352 thread.message_loop()->task_runner()->PostTask( | 352 thread.task_runner()->PostTask( |
| 353 FROM_HERE, | 353 FROM_HERE, |
| 354 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event))); | 354 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event))); |
| 355 event.Wait(); | 355 event.Wait(); |
| 356 } | 356 } |
| 357 | 357 |
| 358 void CreateMainRef() { | 358 void CreateMainRef() { |
| 359 main_ref_ = TestMailboxHolder::Create( | 359 main_ref_ = TestMailboxHolder::Create( |
| 360 test_data_.mailbox1_, | 360 test_data_.mailbox1_, |
| 361 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); | 361 SingleReleaseCallback::Create(test_data_.release_mailbox1_)); |
| 362 } | 362 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 386 std::unique_ptr<TestMailboxHolder::MainThreadReference> main_ref_; | 386 std::unique_ptr<TestMailboxHolder::MainThreadReference> main_ref_; |
| 387 base::Thread main_thread_; | 387 base::Thread main_thread_; |
| 388 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_; | 388 std::unique_ptr<BlockingTaskRunner> main_thread_task_runner_; |
| 389 }; | 389 }; |
| 390 | 390 |
| 391 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) { | 391 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_BothReleaseThenMain) { |
| 392 scoped_refptr<TextureLayer> test_layer = | 392 scoped_refptr<TextureLayer> test_layer = |
| 393 TextureLayer::CreateForMailbox(nullptr); | 393 TextureLayer::CreateForMailbox(nullptr); |
| 394 ASSERT_TRUE(test_layer.get()); | 394 ASSERT_TRUE(test_layer.get()); |
| 395 | 395 |
| 396 main_thread_.message_loop()->task_runner()->PostTask( | 396 main_thread_.task_runner()->PostTask( |
| 397 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 397 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 398 base::Unretained(this))); | 398 base::Unretained(this))); |
| 399 | 399 |
| 400 Wait(main_thread_); | 400 Wait(main_thread_); |
| 401 | 401 |
| 402 // The texture layer is attached to compositor1, and passes a reference to its | 402 // The texture layer is attached to compositor1, and passes a reference to its |
| 403 // impl tree. | 403 // impl tree. |
| 404 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; | 404 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 405 main_thread_.message_loop()->task_runner()->PostTask( | 405 main_thread_.task_runner()->PostTask( |
| 406 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 406 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 407 base::Unretained(this), &compositor1)); | 407 base::Unretained(this), &compositor1)); |
| 408 | 408 |
| 409 // Then the texture layer is removed and attached to compositor2, and passes a | 409 // Then the texture layer is removed and attached to compositor2, and passes a |
| 410 // reference to its impl tree. | 410 // reference to its impl tree. |
| 411 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; | 411 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 412 main_thread_.message_loop()->task_runner()->PostTask( | 412 main_thread_.task_runner()->PostTask( |
| 413 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 413 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 414 base::Unretained(this), &compositor2)); | 414 base::Unretained(this), &compositor2)); |
| 415 | 415 |
| 416 Wait(main_thread_); | 416 Wait(main_thread_); |
| 417 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 417 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 418 | 418 |
| 419 // The compositors both destroy their impl trees before the main thread layer | 419 // The compositors both destroy their impl trees before the main thread layer |
| 420 // is destroyed. | 420 // is destroyed. |
| 421 compositor1->Run(SyncTokenFromUInt(100), false, | 421 compositor1->Run(SyncTokenFromUInt(100), false, |
| 422 main_thread_task_runner_.get()); | 422 main_thread_task_runner_.get()); |
| 423 compositor2->Run(SyncTokenFromUInt(200), false, | 423 compositor2->Run(SyncTokenFromUInt(200), false, |
| 424 main_thread_task_runner_.get()); | 424 main_thread_task_runner_.get()); |
| 425 | 425 |
| 426 Wait(main_thread_); | 426 Wait(main_thread_); |
| 427 | 427 |
| 428 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 428 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
| 429 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 429 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 430 | 430 |
| 431 // The main thread ref is the last one, so the mailbox is released back to the | 431 // The main thread ref is the last one, so the mailbox is released back to the |
| 432 // embedder, with the last sync point provided by the impl trees. | 432 // embedder, with the last sync point provided by the impl trees. |
| 433 EXPECT_CALL(test_data_.mock_callback_, | 433 EXPECT_CALL(test_data_.mock_callback_, |
| 434 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), false)) | 434 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), false)) |
| 435 .Times(1); | 435 .Times(1); |
| 436 | 436 |
| 437 main_thread_.message_loop()->task_runner()->PostTask( | 437 main_thread_.task_runner()->PostTask( |
| 438 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 438 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| 439 base::Unretained(this))); | 439 base::Unretained(this))); |
| 440 Wait(main_thread_); | 440 Wait(main_thread_); |
| 441 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 441 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 442 } | 442 } |
| 443 | 443 |
| 444 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) { | 444 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleaseBetween) { |
| 445 scoped_refptr<TextureLayer> test_layer = | 445 scoped_refptr<TextureLayer> test_layer = |
| 446 TextureLayer::CreateForMailbox(nullptr); | 446 TextureLayer::CreateForMailbox(nullptr); |
| 447 ASSERT_TRUE(test_layer.get()); | 447 ASSERT_TRUE(test_layer.get()); |
| 448 | 448 |
| 449 main_thread_.message_loop()->task_runner()->PostTask( | 449 main_thread_.task_runner()->PostTask( |
| 450 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 450 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 451 base::Unretained(this))); | 451 base::Unretained(this))); |
| 452 | 452 |
| 453 Wait(main_thread_); | 453 Wait(main_thread_); |
| 454 | 454 |
| 455 // The texture layer is attached to compositor1, and passes a reference to its | 455 // The texture layer is attached to compositor1, and passes a reference to its |
| 456 // impl tree. | 456 // impl tree. |
| 457 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; | 457 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 458 main_thread_.message_loop()->task_runner()->PostTask( | 458 main_thread_.task_runner()->PostTask( |
| 459 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 459 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 460 base::Unretained(this), &compositor1)); | 460 base::Unretained(this), &compositor1)); |
| 461 | 461 |
| 462 // Then the texture layer is removed and attached to compositor2, and passes a | 462 // Then the texture layer is removed and attached to compositor2, and passes a |
| 463 // reference to its impl tree. | 463 // reference to its impl tree. |
| 464 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; | 464 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 465 main_thread_.message_loop()->task_runner()->PostTask( | 465 main_thread_.task_runner()->PostTask( |
| 466 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 466 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 467 base::Unretained(this), &compositor2)); | 467 base::Unretained(this), &compositor2)); |
| 468 | 468 |
| 469 Wait(main_thread_); | 469 Wait(main_thread_); |
| 470 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 470 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 471 | 471 |
| 472 // One compositor destroys their impl tree. | 472 // One compositor destroys their impl tree. |
| 473 compositor1->Run(SyncTokenFromUInt(100), false, | 473 compositor1->Run(SyncTokenFromUInt(100), false, |
| 474 main_thread_task_runner_.get()); | 474 main_thread_task_runner_.get()); |
| 475 | 475 |
| 476 // Then the main thread reference is destroyed. | 476 // Then the main thread reference is destroyed. |
| 477 main_thread_.message_loop()->task_runner()->PostTask( | 477 main_thread_.task_runner()->PostTask( |
| 478 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 478 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| 479 base::Unretained(this))); | 479 base::Unretained(this))); |
| 480 | 480 |
| 481 Wait(main_thread_); | 481 Wait(main_thread_); |
| 482 | 482 |
| 483 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 483 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
| 484 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 484 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 485 | 485 |
| 486 // The second impl reference is destroyed last, causing the mailbox to be | 486 // The second impl reference is destroyed last, causing the mailbox to be |
| 487 // released back to the embedder with the last sync point from the impl tree. | 487 // released back to the embedder with the last sync point from the impl tree. |
| 488 EXPECT_CALL(test_data_.mock_callback_, | 488 EXPECT_CALL(test_data_.mock_callback_, |
| 489 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) | 489 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) |
| 490 .Times(1); | 490 .Times(1); |
| 491 | 491 |
| 492 compositor2->Run(SyncTokenFromUInt(200), true, | 492 compositor2->Run(SyncTokenFromUInt(200), true, |
| 493 main_thread_task_runner_.get()); | 493 main_thread_task_runner_.get()); |
| 494 Wait(main_thread_); | 494 Wait(main_thread_); |
| 495 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 495 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 496 } | 496 } |
| 497 | 497 |
| 498 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) { | 498 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_MainReleasedFirst) { |
| 499 scoped_refptr<TextureLayer> test_layer = | 499 scoped_refptr<TextureLayer> test_layer = |
| 500 TextureLayer::CreateForMailbox(nullptr); | 500 TextureLayer::CreateForMailbox(nullptr); |
| 501 ASSERT_TRUE(test_layer.get()); | 501 ASSERT_TRUE(test_layer.get()); |
| 502 | 502 |
| 503 main_thread_.message_loop()->task_runner()->PostTask( | 503 main_thread_.task_runner()->PostTask( |
| 504 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 504 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 505 base::Unretained(this))); | 505 base::Unretained(this))); |
| 506 | 506 |
| 507 Wait(main_thread_); | 507 Wait(main_thread_); |
| 508 | 508 |
| 509 // The texture layer is attached to compositor1, and passes a reference to its | 509 // The texture layer is attached to compositor1, and passes a reference to its |
| 510 // impl tree. | 510 // impl tree. |
| 511 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; | 511 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 512 main_thread_.message_loop()->task_runner()->PostTask( | 512 main_thread_.task_runner()->PostTask( |
| 513 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 513 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 514 base::Unretained(this), &compositor1)); | 514 base::Unretained(this), &compositor1)); |
| 515 | 515 |
| 516 // Then the texture layer is removed and attached to compositor2, and passes a | 516 // Then the texture layer is removed and attached to compositor2, and passes a |
| 517 // reference to its impl tree. | 517 // reference to its impl tree. |
| 518 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; | 518 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 519 main_thread_.message_loop()->task_runner()->PostTask( | 519 main_thread_.task_runner()->PostTask( |
| 520 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 520 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 521 base::Unretained(this), &compositor2)); | 521 base::Unretained(this), &compositor2)); |
| 522 | 522 |
| 523 Wait(main_thread_); | 523 Wait(main_thread_); |
| 524 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 524 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 525 | 525 |
| 526 // The main thread reference is destroyed first. | 526 // The main thread reference is destroyed first. |
| 527 main_thread_.message_loop()->task_runner()->PostTask( | 527 main_thread_.task_runner()->PostTask( |
| 528 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 528 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| 529 base::Unretained(this))); | 529 base::Unretained(this))); |
| 530 | 530 |
| 531 // One compositor destroys their impl tree. | 531 // One compositor destroys their impl tree. |
| 532 compositor2->Run(SyncTokenFromUInt(200), false, | 532 compositor2->Run(SyncTokenFromUInt(200), false, |
| 533 main_thread_task_runner_.get()); | 533 main_thread_task_runner_.get()); |
| 534 | 534 |
| 535 Wait(main_thread_); | 535 Wait(main_thread_); |
| 536 | 536 |
| 537 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); | 537 EXPECT_CALL(test_data_.mock_callback_, Release(_, _, _)).Times(0); |
| 538 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 538 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 539 | 539 |
| 540 // The second impl reference is destroyed last, causing the mailbox to be | 540 // The second impl reference is destroyed last, causing the mailbox to be |
| 541 // released back to the embedder with the last sync point from the impl tree. | 541 // released back to the embedder with the last sync point from the impl tree. |
| 542 EXPECT_CALL(test_data_.mock_callback_, | 542 EXPECT_CALL(test_data_.mock_callback_, |
| 543 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(100), true)) | 543 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(100), true)) |
| 544 .Times(1); | 544 .Times(1); |
| 545 | 545 |
| 546 compositor1->Run(SyncTokenFromUInt(100), true, | 546 compositor1->Run(SyncTokenFromUInt(100), true, |
| 547 main_thread_task_runner_.get()); | 547 main_thread_task_runner_.get()); |
| 548 Wait(main_thread_); | 548 Wait(main_thread_); |
| 549 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 549 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 550 } | 550 } |
| 551 | 551 |
| 552 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) { | 552 TEST_F(TextureLayerMailboxHolderTest, TwoCompositors_SecondImplRefShortcut) { |
| 553 scoped_refptr<TextureLayer> test_layer = | 553 scoped_refptr<TextureLayer> test_layer = |
| 554 TextureLayer::CreateForMailbox(nullptr); | 554 TextureLayer::CreateForMailbox(nullptr); |
| 555 ASSERT_TRUE(test_layer.get()); | 555 ASSERT_TRUE(test_layer.get()); |
| 556 | 556 |
| 557 main_thread_.message_loop()->task_runner()->PostTask( | 557 main_thread_.task_runner()->PostTask( |
| 558 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, | 558 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateMainRef, |
| 559 base::Unretained(this))); | 559 base::Unretained(this))); |
| 560 | 560 |
| 561 Wait(main_thread_); | 561 Wait(main_thread_); |
| 562 | 562 |
| 563 // The texture layer is attached to compositor1, and passes a reference to its | 563 // The texture layer is attached to compositor1, and passes a reference to its |
| 564 // impl tree. | 564 // impl tree. |
| 565 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; | 565 std::unique_ptr<SingleReleaseCallbackImpl> compositor1; |
| 566 main_thread_.message_loop()->task_runner()->PostTask( | 566 main_thread_.task_runner()->PostTask( |
| 567 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 567 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 568 base::Unretained(this), &compositor1)); | 568 base::Unretained(this), &compositor1)); |
| 569 | 569 |
| 570 // Then the texture layer is removed and attached to compositor2, and passes a | 570 // Then the texture layer is removed and attached to compositor2, and passes a |
| 571 // reference to its impl tree. | 571 // reference to its impl tree. |
| 572 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; | 572 std::unique_ptr<SingleReleaseCallbackImpl> compositor2; |
| 573 main_thread_.message_loop()->task_runner()->PostTask( | 573 main_thread_.task_runner()->PostTask( |
| 574 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, | 574 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::CreateImplRef, |
| 575 base::Unretained(this), &compositor2)); | 575 base::Unretained(this), &compositor2)); |
| 576 | 576 |
| 577 Wait(main_thread_); | 577 Wait(main_thread_); |
| 578 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); | 578 Mock::VerifyAndClearExpectations(&test_data_.mock_callback_); |
| 579 | 579 |
| 580 // The main thread reference is destroyed first. | 580 // The main thread reference is destroyed first. |
| 581 main_thread_.message_loop()->task_runner()->PostTask( | 581 main_thread_.task_runner()->PostTask( |
| 582 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, | 582 FROM_HERE, base::Bind(&TextureLayerMailboxHolderTest::ReleaseMainRef, |
| 583 base::Unretained(this))); | 583 base::Unretained(this))); |
| 584 | 584 |
| 585 EXPECT_CALL(test_data_.mock_callback_, | 585 EXPECT_CALL(test_data_.mock_callback_, |
| 586 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) | 586 Release(test_data_.mailbox_name1_, SyncTokenFromUInt(200), true)) |
| 587 .Times(1); | 587 .Times(1); |
| 588 | 588 |
| 589 base::WaitableEvent begin_capture( | 589 base::WaitableEvent begin_capture( |
| 590 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 590 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 591 base::WaitableEvent::InitialState::NOT_SIGNALED); | 591 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 592 base::WaitableEvent wait_for_capture( | 592 base::WaitableEvent wait_for_capture( |
| 593 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 593 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 594 base::WaitableEvent::InitialState::NOT_SIGNALED); | 594 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 595 base::WaitableEvent stop_capture( | 595 base::WaitableEvent stop_capture( |
| 596 base::WaitableEvent::ResetPolicy::AUTOMATIC, | 596 base::WaitableEvent::ResetPolicy::AUTOMATIC, |
| 597 base::WaitableEvent::InitialState::NOT_SIGNALED); | 597 base::WaitableEvent::InitialState::NOT_SIGNALED); |
| 598 | 598 |
| 599 // Post a task to start capturing tasks on the main thread. This will block | 599 // Post a task to start capturing tasks on the main thread. This will block |
| 600 // the main thread until we signal the |stop_capture| event. | 600 // the main thread until we signal the |stop_capture| event. |
| 601 main_thread_.message_loop()->task_runner()->PostTask( | 601 main_thread_.task_runner()->PostTask( |
| 602 FROM_HERE, | 602 FROM_HERE, |
| 603 base::Bind(&TextureLayerMailboxHolderTest::CapturePostTasksAndWait, | 603 base::Bind(&TextureLayerMailboxHolderTest::CapturePostTasksAndWait, |
| 604 base::Unretained(this), &begin_capture, &wait_for_capture, | 604 base::Unretained(this), &begin_capture, &wait_for_capture, |
| 605 &stop_capture)); | 605 &stop_capture)); |
| 606 | 606 |
| 607 // Before the main thread capturing starts, one compositor destroys their | 607 // Before the main thread capturing starts, one compositor destroys their |
| 608 // impl reference. Since capturing did not start, this gets post-tasked to | 608 // impl reference. Since capturing did not start, this gets post-tasked to |
| 609 // the main thread. | 609 // the main thread. |
| 610 compositor1->Run(SyncTokenFromUInt(100), false, | 610 compositor1->Run(SyncTokenFromUInt(100), false, |
| 611 main_thread_task_runner_.get()); | 611 main_thread_task_runner_.get()); |
| (...skipping 877 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1489 int callback_count_; | 1489 int callback_count_; |
| 1490 scoped_refptr<Layer> root_; | 1490 scoped_refptr<Layer> root_; |
| 1491 scoped_refptr<TextureLayer> layer_; | 1491 scoped_refptr<TextureLayer> layer_; |
| 1492 }; | 1492 }; |
| 1493 | 1493 |
| 1494 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( | 1494 SINGLE_AND_MULTI_THREAD_DIRECT_RENDERER_TEST_F( |
| 1495 TextureLayerWithMailboxImplThreadDeleted); | 1495 TextureLayerWithMailboxImplThreadDeleted); |
| 1496 | 1496 |
| 1497 } // namespace | 1497 } // namespace |
| 1498 } // namespace cc | 1498 } // namespace cc |
| OLD | NEW |