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

Unified Diff: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp

Issue 2261623002: Make DrawingBuffer and Canvas2DLayerBridge be cc::TextureLayerClients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: webmailbox: fix-passrefptr Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
index 26caab848749971d9438ef78aae609d62579946f..6dd2eec63a774857926c6a31c4bc2d225e17bddc 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
@@ -24,7 +24,8 @@
#include "platform/graphics/Canvas2DLayerBridge.h"
-#include "SkSurface.h"
+#include "cc/resources/single_release_callback.h"
+#include "cc/resources/texture_mailbox.h"
#include "gpu/command_buffer/client/gles2_interface.h"
#include "gpu/command_buffer/common/capabilities.h"
#include "platform/CrossThreadFunctional.h"
@@ -44,9 +45,11 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkCanvas.h"
+#include "third_party/skia/include/core/SkSurface.h"
#include "third_party/skia/include/gpu/gl/GrGLTypes.h"
#include "wtf/PtrUtil.h"
#include "wtf/RefPtr.h"
+
#include <memory>
using testing::AnyNumber;
@@ -92,23 +95,6 @@ private:
RefPtr<Canvas2DLayerBridge> m_layerBridge;
};
-class NullWebExternalBitmap : public WebExternalBitmap {
-public:
- WebSize size() override
- {
- return WebSize();
- }
-
- void setSize(WebSize) override
- {
- }
-
- uint8_t* pixels() override
- {
- return nullptr;
- }
-};
-
} // anonymous namespace
class Canvas2DLayerBridgeTest : public Test {
@@ -196,47 +182,56 @@ protected:
bridge->flush();
}
- void prepareMailboxWithBitmapTest()
+ void prepareMailboxSoftwareTest()
{
FakeGLES2Interface gl;
std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
- bridge->m_lastImageId = 1;
- NullWebExternalBitmap bitmap;
- bridge->prepareMailbox(0, &bitmap);
- EXPECT_EQ(0u, bridge->m_lastImageId);
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = true;
+ EXPECT_FALSE(bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
}
void prepareMailboxAndLoseResourceTest()
{
- bool lostResource = true;
-
// Prepare a mailbox, then report the resource as lost.
// This test passes by not crashing and not triggering assertions.
{
FakeGLES2Interface gl;
std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
- WebExternalTextureMailbox mailbox;
- bridge->prepareMailbox(&mailbox, 0);
- bridge->mailboxReleased(mailbox, lostResource);
+
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
+ EXPECT_TRUE(bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
+
+ bool lostResource = true;
+ releaseCallback->Run(gpu::SyncToken(), lostResource);
}
// Retry with mailbox released while bridge destruction is in progress.
{
FakeGLES2Interface gl;
std::unique_ptr<FakeWebGraphicsContext3DProvider> contextProvider = wrapUnique(new FakeWebGraphicsContext3DProvider(&gl));
- WebExternalTextureMailbox mailbox;
- Canvas2DLayerBridge* rawBridge;
+
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
+
{
Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(std::move(contextProvider), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
- bridge->prepareMailbox(&mailbox, 0);
- rawBridge = bridge.get();
- } // bridge goes out of scope, but object is kept alive by self references.
+ bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory);
+ // |bridge| goes out of scope and would normally be destroyed, but object is kept alive by self references.
+ }
+
// Before fixing crbug.com/411864, the following line you cause a memory use after free
// that sometimes causes a crash in normal builds and crashes consistently with ASAN.
- rawBridge->mailboxReleased(mailbox, lostResource); // This should self-destruct the bridge.
+ // This should cause the bridge to be destroyed.
+ bool lostResource = true;
+ releaseCallback->Run(gpu::SyncToken(), lostResource);
}
}
@@ -276,9 +271,9 @@ TEST_F(Canvas2DLayerBridgeTest, NoDrawOnContextLost)
noDrawOnContextLostTest();
}
-TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWithBitmap)
+TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxSoftware)
{
- prepareMailboxWithBitmapTest();
+ prepareMailboxSoftwareTest();
}
TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxAndLoseResource)
@@ -1008,8 +1003,10 @@ TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileHibernating)
::testing::Mock::VerifyAndClearExpectations(mockLoggerPtr);
// Test prepareMailbox while hibernating
- WebExternalTextureMailbox mailbox;
- EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0));
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
+ EXPECT_FALSE(bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_TRUE(bridge->checkSurfaceValid());
// Tear down the bridge on the thread so that 'bridge' can go out of scope
@@ -1055,8 +1052,10 @@ TEST_F(Canvas2DLayerBridgeTest, DISABLED_PrepareMailboxWhileBackgroundRendering)
EXPECT_TRUE(bridge->checkSurfaceValid());
// Test prepareMailbox while background rendering
- WebExternalTextureMailbox mailbox;
- EXPECT_FALSE(bridge->prepareMailbox(&mailbox, 0));
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
+ EXPECT_FALSE(bridge->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_TRUE(bridge->checkSurfaceValid());
// Tear down the bridge on the thread so that 'bridge' can go out of scope
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridge.cpp ('k') | third_party/WebKit/Source/platform/graphics/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698