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

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

Issue 2653933003: Make stream captures work on canvases that are not in the DOM. (Closed)
Patch Set: Created 3 years, 11 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 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 229
230 void prepareMailboxWhenContextIsLost() { 230 void prepareMailboxWhenContextIsLost() {
231 FakeGLES2Interface gl; 231 FakeGLES2Interface gl;
232 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = 232 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider =
233 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 233 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
234 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( 234 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(
235 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, 235 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque,
236 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, 236 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr,
237 kN32_SkColorType))); 237 kN32_SkColorType)));
238 238
239 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we 239 EXPECT_TRUE(bridge->isAccelerated());
240 // don't do this before calling it the first time when the context is lost.
241 bridge->prepareSurfaceForPaintingIfNeeded();
242 240
243 // When the context is lost we are not sure if we should still be producing 241 // When the context is lost we are not sure if we should still be producing
244 // GL frames for the compositor or not, so fail to generate frames. 242 // GL frames for the compositor or not, so fail to generate frames.
245 gl.setIsContextLost(true); 243 gl.setIsContextLost(true);
246 244
247 cc::TextureMailbox textureMailbox; 245 cc::TextureMailbox textureMailbox;
248 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback; 246 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
249 EXPECT_FALSE( 247 EXPECT_FALSE(
250 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback)); 248 bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback));
251 } 249 }
252 250
253 void prepareMailboxWhenContextIsLostWithFailedRestore() { 251 void prepareMailboxWhenContextIsLostWithFailedRestore() {
254 FakeGLES2Interface gl; 252 FakeGLES2Interface gl;
255 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = 253 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider =
256 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl)); 254 WTF::wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
257 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge( 255 Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(
258 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, 256 std::move(contextProvider), IntSize(300, 150), 0, NonOpaque,
259 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr, 257 Canvas2DLayerBridge::ForceAccelerationForTesting, nullptr,
260 kN32_SkColorType))); 258 kN32_SkColorType)));
261 259
262 // TODO(junov): The PrepareTextureMailbox() method will fail a DCHECK if we 260 bridge->getOrCreateSurface();
263 // don't do this before calling it the first time when the context is lost. 261 EXPECT_TRUE(bridge->checkSurfaceValid());
264 bridge->prepareSurfaceForPaintingIfNeeded();
265
266 // When the context is lost we are not sure if we should still be producing 262 // When the context is lost we are not sure if we should still be producing
267 // GL frames for the compositor or not, so fail to generate frames. 263 // GL frames for the compositor or not, so fail to generate frames.
268 gl.setIsContextLost(true); 264 gl.setIsContextLost(true);
269 EXPECT_FALSE(bridge->checkSurfaceValid()); 265 EXPECT_FALSE(bridge->checkSurfaceValid());
270 266
271 // Restoration will fail because 267 // Restoration will fail because
272 // Platform::createSharedOffscreenGraphicsContext3DProvider() is stubbed 268 // Platform::createSharedOffscreenGraphicsContext3DProvider() is stubbed
273 // in unit tests. This simulates what would happen when attempting to 269 // in unit tests. This simulates what would happen when attempting to
274 // restore while the GPU process is down. 270 // restore while the GPU process is down.
275 bridge->restoreSurface(); 271 bridge->restoreSurface();
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 gpu::gles2::GLES2Interface* gl, 403 gpu::gles2::GLES2Interface* gl,
408 Canvas2DLayerBridgeTest* testHost, 404 Canvas2DLayerBridgeTest* testHost,
409 WaitableEvent* doneEvent) { 405 WaitableEvent* doneEvent) {
410 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = 406 std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider =
411 WTF::makeUnique<FakeWebGraphicsContext3DProvider>(gl); 407 WTF::makeUnique<FakeWebGraphicsContext3DProvider>(gl);
412 *bridgePtr = 408 *bridgePtr =
413 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300), 409 testHost->makeBridge(std::move(contextProvider), IntSize(300, 300),
414 Canvas2DLayerBridge::EnableAcceleration); 410 Canvas2DLayerBridge::EnableAcceleration);
415 // draw+flush to trigger the creation of a GPU surface 411 // draw+flush to trigger the creation of a GPU surface
416 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1)); 412 (*bridgePtr)->didDraw(FloatRect(0, 0, 1, 1));
417 (*bridgePtr)->finalizeFrame(FloatRect(0, 0, 1, 1)); 413 (*bridgePtr)->finalizeFrame();
418 (*bridgePtr)->flush(); 414 (*bridgePtr)->flush();
419 doneEvent->signal(); 415 doneEvent->signal();
420 } 416 }
421 417
422 void postAndWaitCreateBridgeTask(const WebTraceLocation& location, 418 void postAndWaitCreateBridgeTask(const WebTraceLocation& location,
423 WebThread* testThread, 419 WebThread* testThread,
424 Canvas2DLayerBridgePtr* bridgePtr, 420 Canvas2DLayerBridgePtr* bridgePtr,
425 gpu::gles2::GLES2Interface* gl, 421 gpu::gles2::GLES2Interface* gl,
426 Canvas2DLayerBridgeTest* testHost) { 422 Canvas2DLayerBridgeTest* testHost) {
427 std::unique_ptr<WaitableEvent> bridgeCreatedEvent = 423 std::unique_ptr<WaitableEvent> bridgeCreatedEvent =
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 EXPECT_FALSE(bridge->isHibernating()); 662 EXPECT_FALSE(bridge->isHibernating());
667 EXPECT_TRUE(bridge->checkSurfaceValid()); 663 EXPECT_TRUE(bridge->checkSurfaceValid());
668 664
669 // Tear down the bridge on the thread so that 'bridge' can go out of scope 665 // Tear down the bridge on the thread so that 'bridge' can go out of scope
670 // without crashing due to thread checks 666 // without crashing due to thread checks
671 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge); 667 postAndWaitDestroyBridgeTask(BLINK_FROM_HERE, testThread.get(), &bridge);
672 } 668 }
673 669
674 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) { 670 void runRenderingTask(Canvas2DLayerBridge* bridge, WaitableEvent* doneEvent) {
675 bridge->didDraw(FloatRect(0, 0, 1, 1)); 671 bridge->didDraw(FloatRect(0, 0, 1, 1));
676 bridge->finalizeFrame(FloatRect(0, 0, 1, 1)); 672 bridge->finalizeFrame();
677 bridge->flush(); 673 bridge->flush();
678 doneEvent->signal(); 674 doneEvent->signal();
679 } 675 }
680 676
681 void postAndWaitRenderingTask(const WebTraceLocation& location, 677 void postAndWaitRenderingTask(const WebTraceLocation& location,
682 WebThread* testThread, 678 WebThread* testThread,
683 Canvas2DLayerBridge* bridge) { 679 Canvas2DLayerBridge* bridge) {
684 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>(); 680 std::unique_ptr<WaitableEvent> doneEvent = WTF::makeUnique<WaitableEvent>();
685 testThread->getWebTaskRunner()->postTask( 681 testThread->getWebTaskRunner()->postTask(
686 location, 682 location,
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
1366 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); 1362 EXPECT_FALSE(bridge->hasRecordedDrawCommands());
1367 ::testing::Mock::VerifyAndClearExpectations(&gl); 1363 ::testing::Mock::VerifyAndClearExpectations(&gl);
1368 1364
1369 EXPECT_CALL(gl, Flush()).Times(1); 1365 EXPECT_CALL(gl, Flush()).Times(1);
1370 bridge->flushGpu(); 1366 bridge->flushGpu();
1371 EXPECT_FALSE(bridge->hasRecordedDrawCommands()); 1367 EXPECT_FALSE(bridge->hasRecordedDrawCommands());
1372 ::testing::Mock::VerifyAndClearExpectations(&gl); 1368 ::testing::Mock::VerifyAndClearExpectations(&gl);
1373 } 1369 }
1374 1370
1375 } // namespace blink 1371 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698