| 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 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 (*bridgePtr)->flush(); | 354 (*bridgePtr)->flush(); |
| 355 doneEvent->signal(); | 355 doneEvent->signal(); |
| 356 } | 356 } |
| 357 | 357 |
| 358 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can
vas2DLayerBridgeTest* testHost) | 358 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, WebThread* te
stThread, Canvas2DLayerBridgePtr* bridgePtr, gpu::gles2::GLES2Interface* gl, Can
vas2DLayerBridgeTest* testHost) |
| 359 { | 359 { |
| 360 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = wrapUnique(new WaitableE
vent()); | 360 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = wrapUnique(new WaitableE
vent()); |
| 361 testThread->getWebTaskRunner()->postTask( | 361 testThread->getWebTaskRunner()->postTask( |
| 362 location, | 362 location, |
| 363 threadSafeBind(&runCreateBridgeTask, | 363 threadSafeBind(&runCreateBridgeTask, |
| 364 AllowCrossThreadAccess(bridgePtr), | 364 crossThreadUnretained(bridgePtr), |
| 365 AllowCrossThreadAccess(gl), | 365 crossThreadUnretained(gl), |
| 366 AllowCrossThreadAccess(testHost), | 366 crossThreadUnretained(testHost), |
| 367 AllowCrossThreadAccess(bridgeCreatedEvent.get()))); | 367 crossThreadUnretained(bridgeCreatedEvent.get()))); |
| 368 bridgeCreatedEvent->wait(); | 368 bridgeCreatedEvent->wait(); |
| 369 } | 369 } |
| 370 | 370 |
| 371 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done
Event) | 371 void runDestroyBridgeTask(Canvas2DLayerBridgePtr* bridgePtr, WaitableEvent* done
Event) |
| 372 { | 372 { |
| 373 bridgePtr->clear(); | 373 bridgePtr->clear(); |
| 374 if (doneEvent) | 374 if (doneEvent) |
| 375 doneEvent->signal(); | 375 doneEvent->signal(); |
| 376 } | 376 } |
| 377 | 377 |
| 378 void postDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThre
ad, Canvas2DLayerBridgePtr* bridgePtr) | 378 void postDestroyBridgeTask(const WebTraceLocation& location, WebThread* testThre
ad, Canvas2DLayerBridgePtr* bridgePtr) |
| 379 { | 379 { |
| 380 testThread->getWebTaskRunner()->postTask( | 380 testThread->getWebTaskRunner()->postTask( |
| 381 location, | 381 location, |
| 382 threadSafeBind(&runDestroyBridgeTask, | 382 threadSafeBind(&runDestroyBridgeTask, |
| 383 AllowCrossThreadAccess(bridgePtr), | 383 crossThreadUnretained(bridgePtr), |
| 384 nullptr)); | 384 nullptr)); |
| 385 } | 385 } |
| 386 | 386 |
| 387 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* t
estThread, Canvas2DLayerBridgePtr* bridgePtr) | 387 void postAndWaitDestroyBridgeTask(const WebTraceLocation& location, WebThread* t
estThread, Canvas2DLayerBridgePtr* bridgePtr) |
| 388 { | 388 { |
| 389 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = wrapUnique(new Waitabl
eEvent()); | 389 std::unique_ptr<WaitableEvent> bridgeDestroyedEvent = wrapUnique(new Waitabl
eEvent()); |
| 390 testThread->getWebTaskRunner()->postTask( | 390 testThread->getWebTaskRunner()->postTask( |
| 391 location, | 391 location, |
| 392 threadSafeBind(&runDestroyBridgeTask, | 392 threadSafeBind(&runDestroyBridgeTask, |
| 393 AllowCrossThreadAccess(bridgePtr), | 393 crossThreadUnretained(bridgePtr), |
| 394 AllowCrossThreadAccess(bridgeDestroyedEvent.get()))); | 394 crossThreadUnretained(bridgeDestroyedEvent.get()))); |
| 395 bridgeDestroyedEvent->wait(); | 395 bridgeDestroyedEvent->wait(); |
| 396 } | 396 } |
| 397 | 397 |
| 398 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent*
doneEvent) | 398 void runSetIsHiddenTask(Canvas2DLayerBridge* bridge, bool value, WaitableEvent*
doneEvent) |
| 399 { | 399 { |
| 400 bridge->setIsHidden(value); | 400 bridge->setIsHidden(value); |
| 401 if (doneEvent) | 401 if (doneEvent) |
| 402 doneEvent->signal(); | 402 doneEvent->signal(); |
| 403 } | 403 } |
| 404 | 404 |
| 405 void postSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread
, Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr) | 405 void postSetIsHiddenTask(const WebTraceLocation& location, WebThread* testThread
, Canvas2DLayerBridge* bridge, bool value, WaitableEvent* doneEvent = nullptr) |
| 406 { | 406 { |
| 407 testThread->getWebTaskRunner()->postTask( | 407 testThread->getWebTaskRunner()->postTask( |
| 408 location, | 408 location, |
| 409 threadSafeBind(&runSetIsHiddenTask, | 409 threadSafeBind(&runSetIsHiddenTask, |
| 410 AllowCrossThreadAccess(bridge), | 410 crossThreadUnretained(bridge), |
| 411 value, | 411 value, |
| 412 AllowCrossThreadAccess(doneEvent))); | 412 crossThreadUnretained(doneEvent))); |
| 413 } | 413 } |
| 414 | 414 |
| 415 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* tes
tThread, Canvas2DLayerBridge* bridge, bool value) | 415 void postAndWaitSetIsHiddenTask(const WebTraceLocation& location, WebThread* tes
tThread, Canvas2DLayerBridge* bridge, bool value) |
| 416 { | 416 { |
| 417 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); | 417 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); |
| 418 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get()); | 418 postSetIsHiddenTask(location, testThread, bridge, value, doneEvent.get()); |
| 419 doneEvent->wait(); | 419 doneEvent->wait(); |
| 420 } | 420 } |
| 421 | 421 |
| 422 class MockImageBuffer : public ImageBuffer { | 422 class MockImageBuffer : public ImageBuffer { |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 bridge->flush(); | 580 bridge->flush(); |
| 581 doneEvent->signal(); | 581 doneEvent->signal(); |
| 582 } | 582 } |
| 583 | 583 |
| 584 void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testT
hread, Canvas2DLayerBridge* bridge) | 584 void postAndWaitRenderingTask(const WebTraceLocation& location, WebThread* testT
hread, Canvas2DLayerBridge* bridge) |
| 585 { | 585 { |
| 586 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); | 586 std::unique_ptr<WaitableEvent> doneEvent = wrapUnique(new WaitableEvent()); |
| 587 testThread->getWebTaskRunner()->postTask( | 587 testThread->getWebTaskRunner()->postTask( |
| 588 location, | 588 location, |
| 589 threadSafeBind(&runRenderingTask, | 589 threadSafeBind(&runRenderingTask, |
| 590 AllowCrossThreadAccess(bridge), | 590 crossThreadUnretained(bridge), |
| 591 AllowCrossThreadAccess(doneEvent.get()))); | 591 crossThreadUnretained(doneEvent.get()))); |
| 592 doneEvent->wait(); | 592 doneEvent->wait(); |
| 593 } | 593 } |
| 594 | 594 |
| 595 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU | 595 #if CANVAS2D_HIBERNATION_ENABLED && CANVAS2D_BACKGROUND_RENDER_SWITCH_TO_CPU |
| 596 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) | 596 TEST_F(Canvas2DLayerBridgeTest, BackgroundRenderingWhileHibernating) |
| 597 #else | 597 #else |
| 598 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) | 598 TEST_F(Canvas2DLayerBridgeTest, DISABLED_BackgroundRenderingWhileHibernating) |
| 599 #endif | 599 #endif |
| 600 { | 600 { |
| 601 FakeGLES2Interface gl; | 601 FakeGLES2Interface gl; |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 927 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); | 927 std::unique_ptr<MockLogger> mockLogger = wrapUnique(new MockLogger); |
| 928 MockLogger* mockLoggerPtr = mockLogger.get(); | 928 MockLogger* mockLoggerPtr = mockLogger.get(); |
| 929 bridge->setLoggerForTesting(std::move(mockLogger)); | 929 bridge->setLoggerForTesting(std::move(mockLogger)); |
| 930 | 930 |
| 931 // Test entering hibernation | 931 // Test entering hibernation |
| 932 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new Wait
ableEvent()); | 932 std::unique_ptr<WaitableEvent> hibernationAbortedEvent = wrapUnique(new Wait
ableEvent()); |
| 933 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); | 933 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationScheduled)); |
| 934 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) | 934 EXPECT_CALL(*mockLoggerPtr, reportHibernationEvent(Canvas2DLayerBridge::Hibe
rnationAbortedDueToPendingDestruction)) |
| 935 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); | 935 .WillOnce(testing::InvokeWithoutArgs(hibernationAbortedEvent.get(), &Wai
tableEvent::signal)); |
| 936 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); | 936 postSetIsHiddenTask(BLINK_FROM_HERE, testThread.get(), bridge.get(), true); |
| 937 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca
nvas2DLayerBridge::beginDestruction, AllowCrossThreadAccess(bridge.get()))); | 937 testThread->getWebTaskRunner()->postTask(BLINK_FROM_HERE, threadSafeBind(&Ca
nvas2DLayerBridge::beginDestruction, crossThreadUnretained(bridge.get()))); |
| 938 hibernationAbortedEvent->wait(); | 938 hibernationAbortedEvent->wait(); |
| 939 | 939 |
| 940 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); | 940 ::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr); |
| 941 | 941 |
| 942 // Tear down bridge on thread | 942 // Tear down bridge on thread |
| 943 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 943 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 944 } | 944 } |
| 945 | 945 |
| 946 #if CANVAS2D_HIBERNATION_ENABLED | 946 #if CANVAS2D_HIBERNATION_ENABLED |
| 947 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) | 947 TEST_F(Canvas2DLayerBridgeTest, HibernationAbortedDueToVisibilityChange) |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); | 1095 EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0)); |
| 1096 EXPECT_TRUE(bridge->checkSurfaceValid()); | 1096 EXPECT_TRUE(bridge->checkSurfaceValid()); |
| 1097 | 1097 |
| 1098 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 1098 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
| 1099 // without crashing due to thread checks | 1099 // without crashing due to thread checks |
| 1100 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 1100 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
| 1101 } | 1101 } |
| 1102 | 1102 |
| 1103 | 1103 |
| 1104 } // namespace blink | 1104 } // namespace blink |
| OLD | NEW |