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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 | 233 |
234 void prepareMailboxWhenContextIsLost() { | 234 void prepareMailboxWhenContextIsLost() { |
235 FakeGLES2Interface gl; | 235 FakeGLES2Interface gl; |
236 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 236 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
237 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 237 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
238 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 238 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
239 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 239 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
240 Canvas2DLayerBridge::ForceAccelerationForTesting, | 240 Canvas2DLayerBridge::ForceAccelerationForTesting, |
241 gfx::ColorSpace::CreateSRGB(), false, kN32_SkColorType))); | 241 gfx::ColorSpace::CreateSRGB(), false, kN32_SkColorType))); |
242 | 242 |
243 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we | 243 EXPECT_TRUE(bridge->isAccelerated()); |
244 // don't do this before calling it the first time when the context is lost. | |
245 bridge->prepareSurfaceForPaintingIfNeeded(); | |
246 | 244 |
247 // When the context is lost we are not sure if we should still be producing | 245 // When the context is lost we are not sure if we should still be producing |
248 // GL frames for the compositor or not, so fail to generate frames. | 246 // GL frames for the compositor or not, so fail to generate frames. |
249 gl.setIsContextLost(true); | 247 gl.setIsContextLost(true); |
250 | 248 |
251 cc::TextureMailbox textureMailbox; | 249 cc::TextureMailbox textureMailbox; |
252 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; | 250 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; |
253 EXPECT_FALSE( | 251 EXPECT_FALSE( |
254 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); | 252 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); |
255 } | 253 } |
256 | 254 |
257 void prepareMailboxWhenContextIsLostWithFailedRestore() { | 255 void prepareMailboxWhenContextIsLostWithFailedRestore() { |
258 FakeGLES2Interface gl; | 256 FakeGLES2Interface gl; |
259 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 257 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
260 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); | 258 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); |
261 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( | 259 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( |
262 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, | 260 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, |
263 Canvas2DLayerBridge::ForceAccelerationForTesting, | 261 Canvas2DLayerBridge::ForceAccelerationForTesting, |
264 gfx::ColorSpace::CreateSRGB(), false, kN32_SkColorType))); | 262 gfx::ColorSpace::CreateSRGB(), false, kN32_SkColorType))); |
265 | 263 |
266 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we | 264 bridge->getOrCreateSurface(); |
267 // don't do this before calling it the first time when the context is lost. | 265 EXPECT_TRUE(bridge->checkSurfaceValid()); |
268 bridge->prepareSurfaceForPaintingIfNeeded(); | |
269 | |
270 // When the context is lost we are not sure if we should still be producing | 266 // When the context is lost we are not sure if we should still be producing |
271 // GL frames for the compositor or not, so fail to generate frames. | 267 // GL frames for the compositor or not, so fail to generate frames. |
272 gl.setIsContextLost(true); | 268 gl.setIsContextLost(true); |
273 EXPECT_FALSE(bridge->checkSurfaceValid()); | 269 EXPECT_FALSE(bridge->checkSurfaceValid()); |
274 | 270 |
275 // Restoration will fail because | 271 // Restoration will fail because |
276 // Platform::createSharedOffscreenGraphicsContext3DProvider() is stubbed | 272 // Platform::createSharedOffscreenGraphicsContext3DProvider() is stubbed |
277 // in unit tests. This simulates what would happen when attempting to | 273 // in unit tests. This simulates what would happen when attempting to |
278 // restore while the GPU process is down. | 274 // restore while the GPU process is down. |
279 bridge->restoreSurface(); | 275 bridge->restoreSurface(); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 gpu::gles2::GLES2Interface* gl, | 409 gpu::gles2::GLES2Interface* gl, |
414 Canvas2DLayerBridgeTest* testHost, | 410 Canvas2DLayerBridgeTest* testHost, |
415 WaitableEvent* doneEvent) { | 411 WaitableEvent* doneEvent) { |
416 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = | 412 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = |
417 WTF::makeUnique<FakeWebGraphicsContext3DProvider>(gl); | 413 WTF::makeUnique<FakeWebGraphicsContext3DProvider>(gl); |
418 *bridgePtr = | 414 *bridgePtr = |
419 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), | 415 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), |
420 Canvas2DLayerBridge::EnableAcceleration); | 416 Canvas2DLayerBridge::EnableAcceleration); |
421 // draw+flush to trigger the creation of a GPU surface | 417 // draw+flush to trigger the creation of a GPU surface |
422 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); | 418 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); |
423 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); | 419 (*bridgePtr)->finalizeFrame(); |
424 (*bridgePtr)->flush(); | 420 (*bridgePtr)->flush(); |
425 doneEvent->signal(); | 421 doneEvent->signal(); |
426 } | 422 } |
427 | 423 |
428 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, | 424 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, |
429 WebThread* testThread, | 425 WebThread* testThread, |
430 Canvas2DLayerBridgePtr* bridgePtr, | 426 Canvas2DLayerBridgePtr* bridgePtr, |
431 gpu::gles2::GLES2Interface* gl, | 427 gpu::gles2::GLES2Interface* gl, |
432 Canvas2DLayerBridgeTest* testHost) { | 428 Canvas2DLayerBridgeTest* testHost) { |
433 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = | 429 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 EXPECT_FALSE(bridge->isHibernating()); | 668 EXPECT_FALSE(bridge->isHibernating()); |
673 EXPECT_TRUE(bridge->checkSurfaceValid()); | 669 EXPECT_TRUE(bridge->checkSurfaceValid()); |
674 | 670 |
675 // Tear down the bridge on the thread so that 'bridge' can go out of scope | 671 // Tear down the bridge on the thread so that 'bridge' can go out of scope |
676 // without crashing due to thread checks | 672 // without crashing due to thread checks |
677 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); | 673 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); |
678 } | 674 } |
679 | 675 |
680 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) { | 676 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) { |
681 bridge->didDraw(FloatRect(0, 0, 1, 1)); | 677 bridge->didDraw(FloatRect(0, 0, 1, 1)); |
682 bridge->finalizeFrame(FloatRect(0, 0, 1, 1)); | 678 bridge->finalizeFrame(); |
683 bridge->flush(); | 679 bridge->flush(); |
684 doneEvent->signal(); | 680 doneEvent->signal(); |
685 } | 681 } |
686 | 682 |
687 void postAndWaitRenderingTask(const WebTraceLocation& location, | 683 void postAndWaitRenderingTask(const WebTraceLocation& location, |
688 WebThread* testThread, | 684 WebThread* testThread, |
689 Canvas2DLayerBridge* bridge) { | 685 Canvas2DLayerBridge* bridge) { |
690 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>(); | 686 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>(); |
691 testThread->getWebTaskRunner()->postTask( | 687 testThread->getWebTaskRunner()->postTask( |
692 location, | 688 location, |
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1372 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); | 1368 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); |
1373 ::testing::Mock::VerifyAndClearExpectations(&gl); | 1369 ::testing::Mock::VerifyAndClearExpectations(&gl); |
1374 | 1370 |
1375 EXPECT_CALL(gl, Flush()).Times(1); | 1371 EXPECT_CALL(gl, Flush()).Times(1); |
1376 bridge->flushGpu(); | 1372 bridge->flushGpu(); |
1377 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); | 1373 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); |
1378 ::testing::Mock::VerifyAndClearExpectations(&gl); | 1374 ::testing::Mock::VerifyAndClearExpectations(&gl); |
1379 } | 1375 } |
1380 | 1376 |
1381 } // namespace blink | 1377 } // namespace blink |
OLD | NEW |