Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Side by Side Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp

Issue 1925583003: Replace AllowCrossThreadAccess() + non-GCed pointers with crossThreadUnretained() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Kuroneko_4
Patch Set: Rebase. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698