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 |