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

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

Issue 1361043003: Revert of Make 2D canvas smarter about chosing whether or not to use GPU acceleration (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 9d0d1c3e306997bd9700a96b20b66e3c1a94d520..d95e6631b706468e8b4a96dbd864687fe54c30ef 100644
--- a/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/Canvas2DLayerBridgeTest.cpp
@@ -33,8 +33,6 @@
#include "public/platform/WebGraphicsContext3DProvider.h"
#include "public/platform/WebThread.h"
#include "third_party/skia/include/core/SkDevice.h"
-#include "third_party/skia/include/gpu/GrContext.h"
-#include "third_party/skia/include/gpu/gl/SkNullGLContext.h"
#include "wtf/RefPtr.h"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -57,12 +55,7 @@
class MockWebGraphicsContext3DProvider : public WebGraphicsContext3DProvider {
public:
MockWebGraphicsContext3DProvider(WebGraphicsContext3D* context3d)
- : m_context3d(context3d)
- {
- RefPtr<SkGLContext> glContext = adoptRef(SkNullGLContext::Create(kNone_GrGLStandard));
- glContext->makeCurrent();
- m_grContext = adoptRef(GrContext::Create(kOpenGL_GrBackend, reinterpret_cast<GrBackendContext>(glContext->gl())));
- }
+ : m_context3d(context3d) { }
WebGraphicsContext3D* context3d() override
{
@@ -71,12 +64,11 @@
GrContext* grContext() override
{
- return m_grContext.get();
+ return 0;
}
private:
WebGraphicsContext3D* m_context3d;
- RefPtr<GrContext> m_grContext;
};
class Canvas2DLayerBridgePtr {
@@ -121,15 +113,16 @@
{
MockCanvasContext mainMock;
OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- {
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::DisableAcceleration)));
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- unsigned textureId = bridge->newImageSnapshot(PreferAcceleration)->getTextureHandle(true);
+ RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRasterN32Premul(300, 150));
+
+ ::testing::Mock::VerifyAndClearExpectations(&mainMock);
+
+ {
+ Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), surface, 0, NonOpaque)));
+
+ ::testing::Mock::VerifyAndClearExpectations(&mainMock);
+
+ unsigned textureId = bridge->newImageSnapshot()->getTextureHandle(true);
EXPECT_EQ(textureId, 0u);
::testing::Mock::VerifyAndClearExpectations(&mainMock);
@@ -138,86 +131,32 @@
::testing::Mock::VerifyAndClearExpectations(&mainMock);
}
- void fallbackToSoftwareIfContextLost()
+ void noDrawOnContextLostTest()
{
MockCanvasContext mainMock;
OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- {
- mainMock.fakeContextLost();
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- EXPECT_TRUE(bridge->checkSurfaceValid());
- EXPECT_FALSE(bridge->isAccelerated());
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- }
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- }
-
- void fallbackToSoftwareOnFailedTextureAlloc()
- {
- MockCanvasContext mainMock;
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- {
- // No fallback case
- OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- EXPECT_TRUE(bridge->checkSurfaceValid());
- EXPECT_TRUE(bridge->isAccelerated());
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAcceleration);
- EXPECT_TRUE(bridge->isAccelerated());
- EXPECT_TRUE(snapshot->isTextureBacked());
- }
-
- {
- // Fallback case
- OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- GrContext* gr = mainMockProvider->grContext();
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- EXPECT_TRUE(bridge->checkSurfaceValid());
- EXPECT_TRUE(bridge->isAccelerated()); // We don't yet know that allocation will fail
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- gr->abandonContext(); // This will cause SkSurface_Gpu creation to fail without Canvas2DLayerBridge otherwise detecting that anything was disabled.
- RefPtr<SkImage> snapshot = bridge->newImageSnapshot(PreferAcceleration);
- EXPECT_FALSE(bridge->isAccelerated());
- EXPECT_FALSE(snapshot->isTextureBacked());
- }
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- }
-
- void noDrawOnContextLostTest()
- {
- MockCanvasContext mainMock;
- OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
-
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- {
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
+ RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRasterN32Premul(300, 150));
+
+ ::testing::Mock::VerifyAndClearExpectations(&mainMock);
+
+ {
+ Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), surface, 0, NonOpaque)));
::testing::Mock::VerifyAndClearExpectations(&mainMock);
EXPECT_TRUE(bridge->checkSurfaceValid());
SkPaint paint;
- uint32_t genID = bridge->getOrCreateSurface()->generationID();
+ uint32_t genID = surface->generationID();
bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
- EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
+ EXPECT_EQ(genID, surface->generationID());
mainMock.fakeContextLost();
- EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
+ EXPECT_EQ(genID, surface->generationID());
bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
- EXPECT_EQ(genID, bridge->getOrCreateSurface()->generationID());
- EXPECT_FALSE(bridge->checkSurfaceValid()); // This results in the internal surface being torn down in response to the context loss
- EXPECT_EQ(nullptr, bridge->getOrCreateSurface());
- // The following passes by not crashing
+ EXPECT_EQ(genID, surface->generationID());
+ EXPECT_FALSE(bridge->checkSurfaceValid());
+ EXPECT_EQ(genID, surface->generationID());
bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
+ EXPECT_EQ(genID, surface->generationID());
bridge->flush();
+ EXPECT_EQ(genID, surface->generationID());
::testing::Mock::VerifyAndClearExpectations(&mainMock);
}
@@ -227,8 +166,9 @@
void prepareMailboxWithBitmapTest()
{
MockCanvasContext mainMock;
+ RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRasterN32Premul(300, 150));
OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
+ Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), surface, 0, NonOpaque)));
bridge->m_lastImageId = 1;
NullWebExternalBitmap bitmap;
@@ -239,6 +179,7 @@
void prepareMailboxAndLoseResourceTest()
{
MockCanvasContext mainMock;
+ RefPtr<SkSurface> surface = adoptRef(SkSurface::NewRasterN32Premul(300, 150));
bool lostResource = true;
// Prepare a mailbox, then report the resource as lost.
@@ -246,7 +187,7 @@
{
WebExternalTextureMailbox mailbox;
OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
+ Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), surface, 0, NonOpaque)));
bridge->prepareMailbox(&mailbox, 0);
bridge->mailboxReleased(mailbox, lostResource);
}
@@ -257,7 +198,7 @@
WebExternalTextureMailbox mailbox;
Canvas2DLayerBridge* rawBridge;
{
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 150), 0, NonOpaque, Canvas2DLayerBridge::ForceAccelerationForTesting)));
+ Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), surface, 0, NonOpaque)));
bridge->prepareMailbox(&mailbox, 0);
rawBridge = bridge.get();
} // bridge goes out of scope, but object is kept alive by self references
@@ -266,74 +207,26 @@
rawBridge->mailboxReleased(mailbox, lostResource); // This should self-destruct the bridge.
}
}
-
- void accelerationHintTest()
- {
- MockCanvasContext mainMock;
- {
-
- OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- SkPaint paint;
- bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
- RefPtr<SkImage> image = bridge->newImageSnapshot(PreferAcceleration);
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- EXPECT_TRUE(bridge->checkSurfaceValid());
- EXPECT_TRUE(bridge->isAccelerated());
- }
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
-
- {
- OwnPtr<MockWebGraphicsContext3DProvider> mainMockProvider = adoptPtr(new MockWebGraphicsContext3DProvider(&mainMock));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- Canvas2DLayerBridgePtr bridge(adoptRef(new Canvas2DLayerBridge(mainMockProvider.release(), IntSize(300, 300), 0, NonOpaque, Canvas2DLayerBridge::EnableAcceleration)));
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- SkPaint paint;
- bridge->canvas()->drawRect(SkRect::MakeXYWH(0, 0, 1, 1), paint);
- RefPtr<SkImage> image = bridge->newImageSnapshot(PreferNoAcceleration);
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- EXPECT_TRUE(bridge->checkSurfaceValid());
- EXPECT_FALSE(bridge->isAccelerated());
- }
- ::testing::Mock::VerifyAndClearExpectations(&mainMock);
- }
-};
-
-TEST_F(Canvas2DLayerBridgeTest, FullLifecycleSingleThreaded)
+};
+
+TEST_F(Canvas2DLayerBridgeTest, testFullLifecycleSingleThreaded)
{
fullLifecycleTest();
}
-TEST_F(Canvas2DLayerBridgeTest, NoDrawOnContextLost)
+TEST_F(Canvas2DLayerBridgeTest, testNoDrawOnContextLost)
{
noDrawOnContextLostTest();
}
-TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxWithBitmap)
+TEST_F(Canvas2DLayerBridgeTest, testPrepareMailboxWithBitmap)
{
prepareMailboxWithBitmapTest();
}
-TEST_F(Canvas2DLayerBridgeTest, PrepareMailboxAndLoseResource)
+TEST_F(Canvas2DLayerBridgeTest, testPrepareMailboxAndLoseResource)
{
prepareMailboxAndLoseResourceTest();
}
-TEST_F(Canvas2DLayerBridgeTest, AccelerationHint)
-{
- accelerationHintTest();
-}
-
-TEST_F(Canvas2DLayerBridgeTest, FallbackToSoftwareIfContextLost)
-{
- fallbackToSoftwareIfContextLost();
-}
-
-TEST_F(Canvas2DLayerBridgeTest, FallbackToSoftwareOnFailedTextureAlloc)
-{
- fallbackToSoftwareOnFailedTextureAlloc();
-}
-
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698