| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 } | 422 } |
| 423 | 423 |
| 424 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, | 424 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, |
| 425 WebThread* testThread, | 425 WebThread* testThread, |
| 426 Canvas2DLayerBridgePtr* bridgePtr, | 426 Canvas2DLayerBridgePtr* bridgePtr, |
| 427 gpu::gles2::GLES2Interface* gl, | 427 gpu::gles2::GLES2Interface* gl, |
| 428 Canvas2DLayerBridgeTest* testHost) { | 428 Canvas2DLayerBridgeTest* testHost) { |
| 429 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = | 429 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = |
| 430 WTF::makeUnique<WaitableEvent>(); | 430 WTF::makeUnique<WaitableEvent>(); |
| 431 testThread->getWebTaskRunner()->postTask( | 431 testThread->getWebTaskRunner()->postTask( |
| 432 location, crossThreadBind( | 432 location, |
| 433 &runCreateBridgeTask, crossThreadUnretained(bridgePtr), | 433 crossThreadBind(&runCreateBridgeTask, crossThreadUnretained(bridgePtr), |
| 434 crossThreadUnretained(gl), crossThreadUnretained(testHost), | 434 crossThreadUnretained(gl), |
| 435 crossThreadUnretained(bridgeCreatedEvent.get()))); | 435 crossThreadUnretained(testHost), |
| 436 crossThreadUnretained(bridgeCreatedEvent.get()))); |
| 436 bridgeCreatedEvent->wait(); | 437 bridgeCreatedEvent->wait(); |
| 437 } | 438 } |
| 438 | 439 |
| 439 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, | 440 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, |
| 440 WaitableEvent* doneEvent) { | 441 WaitableEvent* doneEvent) { |
| 441 bridgePtr->clear(); | 442 bridgePtr->clear(); |
| 442 if (doneEvent) | 443 if (doneEvent) |
| 443 doneEvent->signal(); | 444 doneEvent->signal(); |
| 444 } | 445 } |
| 445 | 446 |
| 446 void postDestroyBridgeTask(const WebTraceLocation& location, | 447 void postDestroyBridgeTask(const WebTraceLocation& location, |
| 447 WebThread* testThread, | 448 WebThread* testThread, |
| 448 Canvas2DLayerBridgePtr* bridgePtr) { | 449 Canvas2DLayerBridgePtr* bridgePtr) { |
| 449 testThread->getWebTaskRunner()->postTask( | 450 testThread->getWebTaskRunner()->postTask( |
| 450 location, crossThreadBind(&runDestroyBridgeTask, | 451 location, |
| 451 crossThreadUnretained(bridgePtr), nullptr)); | 452 crossThreadBind(&runDestroyBridgeTask, crossThreadUnretained(bridgePtr), |
| 453 nullptr)); |
| 452 } | 454 } |
| 453 | 455 |
| 454 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, | 456 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, |
| 455 WebThread* testThread, | 457 WebThread* testThread, |
| 456 Canvas2DLayerBridgePtr* bridgePtr) { | 458 Canvas2DLayerBridgePtr* bridgePtr) { |
| 457 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = | 459 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = |
| 458 WTF::makeUnique<WaitableEvent>(); | 460 WTF::makeUnique<WaitableEvent>(); |
| 459 testThread->getWebTaskRunner()->postTask( | 461 testThread->getWebTaskRunner()->postTask( |
| 460 location, | 462 location, |
| 461 crossThreadBind(&runDestroyBridgeTask, crossThreadUnretained(bridgePtr), | 463 crossThreadBind(&runDestroyBridgeTask, crossThreadUnretained(bridgePtr), |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 519 this); | 521 this); |
| 520 | 522 |
| 521 // Register an alternate Logger for tracking hibernation events | 523 // Register an alternate Logger for tracking hibernation events |
| 522 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 524 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 523 MockLogger* mockLoggerPtr = mockLogger.get(); | 525 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 524 bridge->setLoggerForTesting(std::move(mockLogger)); | 526 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 525 | 527 |
| 526 // Test entering hibernation | 528 // Test entering hibernation |
| 527 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 529 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 528 WTF::makeUnique<WaitableEvent>(); | 530 WTF::makeUnique<WaitableEvent>(); |
| 529 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 531 EXPECT_CALL( |
| 530 Canvas2DLayerBridge::HibernationScheduled)); | 532 *mockLoggerPtr, |
| 533 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 531 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 534 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 532 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 535 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 533 &WaitableEvent::signal)); | 536 &WaitableEvent::signal)); |
| 534 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 537 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 535 hibernationStartedEvent->wait(); | 538 hibernationStartedEvent->wait(); |
| 536 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 539 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 537 EXPECT_FALSE(bridge->isAccelerated()); | 540 EXPECT_FALSE(bridge->isAccelerated()); |
| 538 EXPECT_TRUE(bridge->isHibernating()); | 541 EXPECT_TRUE(bridge->isHibernating()); |
| 539 EXPECT_TRUE(bridge->checkSurfaceValid()); | 542 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 540 | 543 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 571 this); | 574 this); |
| 572 | 575 |
| 573 // Register an alternate Logger for tracking hibernation events | 576 // Register an alternate Logger for tracking hibernation events |
| 574 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 577 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 575 MockLogger* mockLoggerPtr = mockLogger.get(); | 578 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 576 bridge->setLoggerForTesting(std::move(mockLogger)); | 579 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 577 | 580 |
| 578 // Test entering hibernation | 581 // Test entering hibernation |
| 579 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 582 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 580 WTF::makeUnique<WaitableEvent>(); | 583 WTF::makeUnique<WaitableEvent>(); |
| 581 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 584 EXPECT_CALL( |
| 582 Canvas2DLayerBridge::HibernationScheduled)); | 585 *mockLoggerPtr, |
| 586 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 583 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 587 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 584 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 588 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 585 &WaitableEvent::signal)); | 589 &WaitableEvent::signal)); |
| 586 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 590 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 587 // Toggle visibility before the task that enters hibernation gets a | 591 // Toggle visibility before the task that enters hibernation gets a |
| 588 // chance to run. | 592 // chance to run. |
| 589 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 593 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
| 590 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 594 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 591 | 595 |
| 592 hibernationStartedEvent->wait(); | 596 hibernationStartedEvent->wait(); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 bridge->setImageBuffer(&mockImageBuffer); | 638 bridge->setImageBuffer(&mockImageBuffer); |
| 635 | 639 |
| 636 // Register an alternate Logger for tracking hibernation events | 640 // Register an alternate Logger for tracking hibernation events |
| 637 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 641 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 638 MockLogger* mockLoggerPtr = mockLogger.get(); | 642 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 639 bridge->setLoggerForTesting(std::move(mockLogger)); | 643 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 640 | 644 |
| 641 // Test entering hibernation | 645 // Test entering hibernation |
| 642 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 646 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 643 WTF::makeUnique<WaitableEvent>(); | 647 WTF::makeUnique<WaitableEvent>(); |
| 644 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 648 EXPECT_CALL( |
| 645 Canvas2DLayerBridge::HibernationScheduled)); | 649 *mockLoggerPtr, |
| 650 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 646 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 651 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 647 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 652 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 648 &WaitableEvent::signal)); | 653 &WaitableEvent::signal)); |
| 649 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 654 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 650 hibernationStartedEvent->wait(); | 655 hibernationStartedEvent->wait(); |
| 651 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 656 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 652 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 657 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| 653 EXPECT_FALSE(bridge->isAccelerated()); | 658 EXPECT_FALSE(bridge->isAccelerated()); |
| 654 EXPECT_TRUE(bridge->isHibernating()); | 659 EXPECT_TRUE(bridge->isHibernating()); |
| 655 EXPECT_TRUE(bridge->checkSurfaceValid()); | 660 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 this); | 713 this); |
| 709 | 714 |
| 710 // Register an alternate Logger for tracking hibernation events | 715 // Register an alternate Logger for tracking hibernation events |
| 711 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 716 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 712 MockLogger* mockLoggerPtr = mockLogger.get(); | 717 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 713 bridge->setLoggerForTesting(std::move(mockLogger)); | 718 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 714 | 719 |
| 715 // Test entering hibernation | 720 // Test entering hibernation |
| 716 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 721 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 717 WTF::makeUnique<WaitableEvent>(); | 722 WTF::makeUnique<WaitableEvent>(); |
| 718 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 723 EXPECT_CALL( |
| 719 Canvas2DLayerBridge::HibernationScheduled)); | 724 *mockLoggerPtr, |
| 725 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 720 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 726 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 721 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 727 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 722 &WaitableEvent::signal)); | 728 &WaitableEvent::signal)); |
| 723 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 729 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 724 hibernationStartedEvent->wait(); | 730 hibernationStartedEvent->wait(); |
| 725 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 731 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 726 EXPECT_FALSE(bridge->isAccelerated()); | 732 EXPECT_FALSE(bridge->isAccelerated()); |
| 727 EXPECT_TRUE(bridge->isHibernating()); | 733 EXPECT_TRUE(bridge->isHibernating()); |
| 728 EXPECT_TRUE(bridge->checkSurfaceValid()); | 734 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 729 | 735 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 776 bridge->disableDeferral(DisableDeferralReasonUnknown); | 782 bridge->disableDeferral(DisableDeferralReasonUnknown); |
| 777 | 783 |
| 778 // Register an alternate Logger for tracking hibernation events | 784 // Register an alternate Logger for tracking hibernation events |
| 779 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 785 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 780 MockLogger* mockLoggerPtr = mockLogger.get(); | 786 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 781 bridge->setLoggerForTesting(std::move(mockLogger)); | 787 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 782 | 788 |
| 783 // Test entering hibernation | 789 // Test entering hibernation |
| 784 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 790 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 785 WTF::makeUnique<WaitableEvent>(); | 791 WTF::makeUnique<WaitableEvent>(); |
| 786 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 792 EXPECT_CALL( |
| 787 Canvas2DLayerBridge::HibernationScheduled)); | 793 *mockLoggerPtr, |
| 794 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 788 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 795 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 789 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 796 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 790 &WaitableEvent::signal)); | 797 &WaitableEvent::signal)); |
| 791 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 798 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 792 hibernationStartedEvent->wait(); | 799 hibernationStartedEvent->wait(); |
| 793 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 800 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 794 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 801 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| 795 EXPECT_FALSE(bridge->isAccelerated()); | 802 EXPECT_FALSE(bridge->isAccelerated()); |
| 796 EXPECT_TRUE(bridge->isHibernating()); | 803 EXPECT_TRUE(bridge->isHibernating()); |
| 797 EXPECT_TRUE(bridge->checkSurfaceValid()); | 804 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 847 bridge->setImageBuffer(&mockImageBuffer); | 854 bridge->setImageBuffer(&mockImageBuffer); |
| 848 | 855 |
| 849 // Register an alternate Logger for tracking hibernation events | 856 // Register an alternate Logger for tracking hibernation events |
| 850 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 857 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 851 MockLogger* mockLoggerPtr = mockLogger.get(); | 858 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 852 bridge->setLoggerForTesting(std::move(mockLogger)); | 859 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 853 | 860 |
| 854 // Test entering hibernation | 861 // Test entering hibernation |
| 855 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 862 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 856 WTF::makeUnique<WaitableEvent>(); | 863 WTF::makeUnique<WaitableEvent>(); |
| 857 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 864 EXPECT_CALL( |
| 858 Canvas2DLayerBridge::HibernationScheduled)); | 865 *mockLoggerPtr, |
| 866 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 859 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 867 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 860 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 868 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 861 &WaitableEvent::signal)); | 869 &WaitableEvent::signal)); |
| 862 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 870 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 863 hibernationStartedEvent->wait(); | 871 hibernationStartedEvent->wait(); |
| 864 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 872 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 865 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); | 873 ::testing::Mock::VerifyAndClearExpectations(&mockImageBuffer); |
| 866 EXPECT_FALSE(bridge->isAccelerated()); | 874 EXPECT_FALSE(bridge->isAccelerated()); |
| 867 EXPECT_TRUE(bridge->isHibernating()); | 875 EXPECT_TRUE(bridge->isHibernating()); |
| 868 EXPECT_TRUE(bridge->checkSurfaceValid()); | 876 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 914 this); | 922 this); |
| 915 | 923 |
| 916 // Register an alternate Logger for tracking hibernation events | 924 // Register an alternate Logger for tracking hibernation events |
| 917 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 925 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 918 MockLogger* mockLoggerPtr = mockLogger.get(); | 926 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 919 bridge->setLoggerForTesting(std::move(mockLogger)); | 927 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 920 | 928 |
| 921 // Test entering hibernation | 929 // Test entering hibernation |
| 922 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 930 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 923 WTF::makeUnique<WaitableEvent>(); | 931 WTF::makeUnique<WaitableEvent>(); |
| 924 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 932 EXPECT_CALL( |
| 925 Canvas2DLayerBridge::HibernationScheduled)); | 933 *mockLoggerPtr, |
| 934 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 926 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 935 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 927 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 936 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 928 &WaitableEvent::signal)); | 937 &WaitableEvent::signal)); |
| 929 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 938 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 930 hibernationStartedEvent->wait(); | 939 hibernationStartedEvent->wait(); |
| 931 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 940 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 932 EXPECT_FALSE(bridge->isAccelerated()); | 941 EXPECT_FALSE(bridge->isAccelerated()); |
| 933 EXPECT_TRUE(bridge->isHibernating()); | 942 EXPECT_TRUE(bridge->isHibernating()); |
| 934 EXPECT_TRUE(bridge->checkSurfaceValid()); | 943 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 935 | 944 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 957 this); | 966 this); |
| 958 | 967 |
| 959 // Register an alternate Logger for tracking hibernation events | 968 // Register an alternate Logger for tracking hibernation events |
| 960 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 969 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 961 MockLogger* mockLoggerPtr = mockLogger.get(); | 970 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 962 bridge->setLoggerForTesting(std::move(mockLogger)); | 971 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 963 | 972 |
| 964 // Test entering hibernation | 973 // Test entering hibernation |
| 965 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 974 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 966 WTF::makeUnique<WaitableEvent>(); | 975 WTF::makeUnique<WaitableEvent>(); |
| 967 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 976 EXPECT_CALL( |
| 968 Canvas2DLayerBridge::HibernationScheduled)); | 977 *mockLoggerPtr, |
| 978 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 969 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 979 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 970 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 980 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 971 &WaitableEvent::signal)); | 981 &WaitableEvent::signal)); |
| 972 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 982 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 973 hibernationStartedEvent->wait(); | 983 hibernationStartedEvent->wait(); |
| 974 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 984 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 975 EXPECT_FALSE(bridge->isAccelerated()); | 985 EXPECT_FALSE(bridge->isAccelerated()); |
| 976 EXPECT_TRUE(bridge->isHibernating()); | 986 EXPECT_TRUE(bridge->isHibernating()); |
| 977 EXPECT_TRUE(bridge->checkSurfaceValid()); | 987 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 978 | 988 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1019 this); | 1029 this); |
| 1020 | 1030 |
| 1021 // Register an alternate Logger for tracking hibernation events | 1031 // Register an alternate Logger for tracking hibernation events |
| 1022 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1032 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1023 MockLogger* mockLoggerPtr = mockLogger.get(); | 1033 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1024 bridge->setLoggerForTesting(std::move(mockLogger)); | 1034 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1025 | 1035 |
| 1026 // Test entering hibernation | 1036 // Test entering hibernation |
| 1027 std::unique_ptr<WaitableEvent> hibernationScheduledEvent = | 1037 std::unique_ptr<WaitableEvent> hibernationScheduledEvent = |
| 1028 WTF::makeUnique<WaitableEvent>(); | 1038 WTF::makeUnique<WaitableEvent>(); |
| 1029 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1039 EXPECT_CALL( |
| 1030 Canvas2DLayerBridge::HibernationScheduled)); | 1040 *mockLoggerPtr, |
| 1041 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1031 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, | 1042 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true, |
| 1032 hibernationScheduledEvent.get()); | 1043 hibernationScheduledEvent.get()); |
| 1033 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1044 postDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 1034 // In production, we would expect a | 1045 // In production, we would expect a |
| 1035 // HibernationAbortedDueToDestructionWhileHibernatePending event to be | 1046 // HibernationAbortedDueToDestructionWhileHibernatePending event to be |
| 1036 // fired, but that signal is lost in the unit test due to no longer having | 1047 // fired, but that signal is lost in the unit test due to no longer having |
| 1037 // a bridge to hold the mockLogger. | 1048 // a bridge to hold the mockLogger. |
| 1038 hibernationScheduledEvent->wait(); | 1049 hibernationScheduledEvent->wait(); |
| 1039 // Once we know the hibernation task is scheduled, we can schedule a fence. | 1050 // Once we know the hibernation task is scheduled, we can schedule a fence. |
| 1040 // Assuming tasks are guaranteed to run in the order they were | 1051 // Assuming tasks are guaranteed to run in the order they were |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1066 this); | 1077 this); |
| 1067 | 1078 |
| 1068 // Register an alternate Logger for tracking hibernation events | 1079 // Register an alternate Logger for tracking hibernation events |
| 1069 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1080 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1070 MockLogger* mockLoggerPtr = mockLogger.get(); | 1081 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1071 bridge->setLoggerForTesting(std::move(mockLogger)); | 1082 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1072 | 1083 |
| 1073 // Test entering hibernation | 1084 // Test entering hibernation |
| 1074 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1085 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
| 1075 WTF::makeUnique<WaitableEvent>(); | 1086 WTF::makeUnique<WaitableEvent>(); |
| 1076 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1087 EXPECT_CALL( |
| 1077 Canvas2DLayerBridge::HibernationScheduled)); | 1088 *mockLoggerPtr, |
| 1089 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1078 EXPECT_CALL( | 1090 EXPECT_CALL( |
| 1079 *mockLoggerPtr, | 1091 *mockLoggerPtr, |
| 1080 reportHibernationEvent( | 1092 reportHibernationEvent( |
| 1081 Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction)) | 1093 Canvas2DLayerBridge::HibernationAbortedDueToPendingDestruction)) |
| 1082 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1094 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
| 1083 &WaitableEvent::signal)); | 1095 &WaitableEvent::signal)); |
| 1084 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1096 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1085 testThread->getWebTaskRunner()->postTask( | 1097 testThread->getWebTaskRunner()->postTask( |
| 1086 BLINK_FROM_HERE, crossThreadBind(&Canvas2DLayerBridge::beginDestruction, | 1098 BLINK_FROM_HERE, |
| 1087 crossThreadUnretained(bridge.get()))); | 1099 crossThreadBind(&Canvas2DLayerBridge::beginDestruction, |
| 1100 crossThreadUnretained(bridge.get()))); |
| 1088 hibernationAbortedEvent->wait(); | 1101 hibernationAbortedEvent->wait(); |
| 1089 | 1102 |
| 1090 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1103 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1091 | 1104 |
| 1092 // Tear down bridge on thread | 1105 // Tear down bridge on thread |
| 1093 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1106 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 1094 } | 1107 } |
| 1095 | 1108 |
| 1096 #if CANVAS2D_HIBERNATION_ENABLED | 1109 #if CANVAS2D_HIBERNATION_ENABLED |
| 1097 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) | 1110 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1111 this); | 1124 this); |
| 1112 | 1125 |
| 1113 // Register an alternate Logger for tracking hibernation events | 1126 // Register an alternate Logger for tracking hibernation events |
| 1114 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1127 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1115 MockLogger* mockLoggerPtr = mockLogger.get(); | 1128 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1116 bridge->setLoggerForTesting(std::move(mockLogger)); | 1129 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1117 | 1130 |
| 1118 // Test entering hibernation | 1131 // Test entering hibernation |
| 1119 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1132 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
| 1120 WTF::makeUnique<WaitableEvent>(); | 1133 WTF::makeUnique<WaitableEvent>(); |
| 1121 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1134 EXPECT_CALL( |
| 1122 Canvas2DLayerBridge::HibernationScheduled)); | 1135 *mockLoggerPtr, |
| 1136 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1123 EXPECT_CALL(*mockLoggerPtr, | 1137 EXPECT_CALL(*mockLoggerPtr, |
| 1124 reportHibernationEvent( | 1138 reportHibernationEvent( |
| 1125 Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange)) | 1139 Canvas2DLayerBridge::HibernationAbortedDueToVisibilityChange)) |
| 1126 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1140 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
| 1127 &WaitableEvent::signal)); | 1141 &WaitableEvent::signal)); |
| 1128 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1142 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1129 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); | 1143 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), false); |
| 1130 hibernationAbortedEvent->wait(); | 1144 hibernationAbortedEvent->wait(); |
| 1131 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1145 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1132 EXPECT_TRUE(bridge->isAccelerated()); | 1146 EXPECT_TRUE(bridge->isAccelerated()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1156 | 1170 |
| 1157 // Register an alternate Logger for tracking hibernation events | 1171 // Register an alternate Logger for tracking hibernation events |
| 1158 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1172 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1159 MockLogger* mockLoggerPtr = mockLogger.get(); | 1173 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1160 bridge->setLoggerForTesting(std::move(mockLogger)); | 1174 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1161 | 1175 |
| 1162 gl.setIsContextLost(true); | 1176 gl.setIsContextLost(true); |
| 1163 // Test entering hibernation | 1177 // Test entering hibernation |
| 1164 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = | 1178 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = |
| 1165 WTF::makeUnique<WaitableEvent>(); | 1179 WTF::makeUnique<WaitableEvent>(); |
| 1166 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1180 EXPECT_CALL( |
| 1167 Canvas2DLayerBridge::HibernationScheduled)); | 1181 *mockLoggerPtr, |
| 1182 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1168 EXPECT_CALL(*mockLoggerPtr, | 1183 EXPECT_CALL(*mockLoggerPtr, |
| 1169 reportHibernationEvent( | 1184 reportHibernationEvent( |
| 1170 Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss)) | 1185 Canvas2DLayerBridge::HibernationAbortedDueGpuContextLoss)) |
| 1171 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), | 1186 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), |
| 1172 &WaitableEvent::signal)); | 1187 &WaitableEvent::signal)); |
| 1173 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1188 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1174 hibernationAbortedEvent->wait(); | 1189 hibernationAbortedEvent->wait(); |
| 1175 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1190 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1176 EXPECT_FALSE(bridge->isHibernating()); | 1191 EXPECT_FALSE(bridge->isHibernating()); |
| 1177 | 1192 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1197 this); | 1212 this); |
| 1198 | 1213 |
| 1199 // Register an alternate Logger for tracking hibernation events | 1214 // Register an alternate Logger for tracking hibernation events |
| 1200 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1215 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1201 MockLogger* mockLoggerPtr = mockLogger.get(); | 1216 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1202 bridge->setLoggerForTesting(std::move(mockLogger)); | 1217 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1203 | 1218 |
| 1204 // Test entering hibernation | 1219 // Test entering hibernation |
| 1205 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 1220 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 1206 WTF::makeUnique<WaitableEvent>(); | 1221 WTF::makeUnique<WaitableEvent>(); |
| 1207 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1222 EXPECT_CALL( |
| 1208 Canvas2DLayerBridge::HibernationScheduled)); | 1223 *mockLoggerPtr, |
| 1224 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1209 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1225 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 1210 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 1226 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 1211 &WaitableEvent::signal)); | 1227 &WaitableEvent::signal)); |
| 1212 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1228 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1213 hibernationStartedEvent->wait(); | 1229 hibernationStartedEvent->wait(); |
| 1214 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1230 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1215 | 1231 |
| 1216 // Test prepareMailbox while hibernating | 1232 // Test prepareMailbox while hibernating |
| 1217 cc::TextureMailbox textureMailbox; | 1233 cc::TextureMailbox textureMailbox; |
| 1218 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 1234 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1245 this); | 1261 this); |
| 1246 | 1262 |
| 1247 // Register an alternate Logger for tracking hibernation events | 1263 // Register an alternate Logger for tracking hibernation events |
| 1248 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); | 1264 std::unique_ptr<MockLogger> mockLogger = WTF::wrapUnique(new MockLogger); |
| 1249 MockLogger* mockLoggerPtr = mockLogger.get(); | 1265 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 1250 bridge->setLoggerForTesting(std::move(mockLogger)); | 1266 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 1251 | 1267 |
| 1252 // Test entering hibernation | 1268 // Test entering hibernation |
| 1253 std::unique_ptr<WaitableEvent> hibernationStartedEvent = | 1269 std::unique_ptr<WaitableEvent> hibernationStartedEvent = |
| 1254 WTF::makeUnique<WaitableEvent>(); | 1270 WTF::makeUnique<WaitableEvent>(); |
| 1255 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent( | 1271 EXPECT_CALL( |
| 1256 Canvas2DLayerBridge::HibernationScheduled)); | 1272 *mockLoggerPtr, |
| 1273 reportHibernationEvent(Canvas2DLayerBridge::HibernationScheduled)); |
| 1257 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) | 1274 EXPECT_CALL(*mockLoggerPtr, didStartHibernating()) |
| 1258 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), | 1275 .WillOnce(testing::Invoke(hibernationStartedEvent.get(), |
| 1259 &WaitableEvent::signal)); | 1276 &WaitableEvent::signal)); |
| 1260 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 1277 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 1261 hibernationStartedEvent->wait(); | 1278 hibernationStartedEvent->wait(); |
| 1262 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 1279 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 1263 | 1280 |
| 1264 // Rendering in the background -> temp switch to SW | 1281 // Rendering in the background -> temp switch to SW |
| 1265 EXPECT_CALL(*mockLoggerPtr, | 1282 EXPECT_CALL(*mockLoggerPtr, |
| 1266 reportHibernationEvent( | 1283 reportHibernationEvent( |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); | 1385 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); |
| 1369 ::testing::Mock::VerifyAndClearExpectations(&gl); | 1386 ::testing::Mock::VerifyAndClearExpectations(&gl); |
| 1370 | 1387 |
| 1371 EXPECT_CALL(gl, Flush()).Times(1); | 1388 EXPECT_CALL(gl, Flush()).Times(1); |
| 1372 bridge->flushGpu(); | 1389 bridge->flushGpu(); |
| 1373 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); | 1390 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); |
| 1374 ::testing::Mock::VerifyAndClearExpectations(&gl); | 1391 ::testing::Mock::VerifyAndClearExpectations(&gl); |
| 1375 } | 1392 } |
| 1376 | 1393 |
| 1377 } // namespace blink | 1394 } // namespace blink |
| OLD | NEW |