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

Unified Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.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/gpu/DrawingBufferTest.cpp
diff --git a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
index 50a62702b5aae6bc741300f3610de21db2e29179..4aa5e5f6f2a85cbcf432db5c421fdb5f238426c3 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
@@ -30,14 +30,17 @@
#include "platform/graphics/gpu/DrawingBuffer.h"
+#include "cc/resources/single_release_callback.h"
+#include "cc/resources/texture_mailbox.h"
#include "gpu/command_buffer/client/gles2_interface_stub.h"
#include "gpu/command_buffer/common/capabilities.h"
+#include "gpu/command_buffer/common/mailbox.h"
+#include "gpu/command_buffer/common/sync_token.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/graphics/ImageBuffer.h"
#include "platform/graphics/UnacceleratedImageBufferSurface.h"
#include "platform/graphics/gpu/Extensions3DUtil.h"
#include "public/platform/Platform.h"
-#include "public/platform/WebExternalTextureMailbox.h"
#include "public/platform/WebGraphicsContext3DProvider.h"
#include "public/platform/functional/WebFunction.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -111,8 +114,7 @@ public:
void GenMailboxCHROMIUM(GLbyte* mailbox) override
{
++m_currentMailboxByte;
- WebExternalTextureMailbox temp;
- memset(mailbox, m_currentMailboxByte, sizeof(temp.name));
+ memset(mailbox, m_currentMailboxByte, GL_MAILBOX_SIZE_CHROMIUM);
}
void ProduceTextureDirectCHROMIUM(GLuint texture, GLenum target, const GLbyte* mailbox) override
@@ -172,7 +174,9 @@ public:
void GenSyncTokenCHROMIUM(GLuint64 fenceSync, GLbyte* syncToken) override
{
- memcpy(syncToken, &fenceSync, sizeof(fenceSync));
+ static uint64_t uniqueId = 1;
+ gpu::SyncToken source(gpu::GPU_IO, 1, gpu::CommandBufferId::FromUnsafeValue(uniqueId++), 2);
+ memcpy(syncToken, &source, sizeof(source));
}
void GenTextures(GLsizei n, GLuint* textures) override
@@ -184,7 +188,7 @@ public:
GLuint boundTexture() const { return m_boundTexture; }
GLuint boundTextureTarget() const { return m_boundTextureTarget; }
- GLuint mostRecentlyWaitedSyncToken() const { return m_mostRecentlyWaitedSyncToken; }
+ gpu::SyncToken mostRecentlyWaitedSyncToken() const { return m_mostRecentlyWaitedSyncToken; }
GLuint nextImageIdToBeCreated() const { return m_currentImageId; }
IntSize mostRecentlyProducedSize() const { return m_mostRecentlyProducedSize; }
@@ -193,7 +197,7 @@ public:
private:
GLuint m_boundTexture = 0;
GLuint m_boundTextureTarget = 0;
- GLuint m_mostRecentlyWaitedSyncToken = 0;
+ gpu::SyncToken m_mostRecentlyWaitedSyncToken;
GLbyte m_currentMailboxByte = 0;
IntSize m_mostRecentlyProducedSize;
bool m_createImageChromiumFail = false;
@@ -276,40 +280,42 @@ protected:
TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes)
{
- WebExternalTextureMailbox mailbox;
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
IntSize initialSize(initialWidth, initialHeight);
IntSize alternateSize(initialWidth, alternateHeight);
// Produce one mailbox at size 100x100.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
// Resize to 100x50.
m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight));
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
// Produce a mailbox at this size.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize());
// Reset to initial size.
m_drawingBuffer->reset(IntSize(initialWidth, initialHeight));
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
// Prepare another mailbox and verify that it's the correct size.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
// Prepare one final mailbox and verify that it's the correct size.
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->beginDestruction();
}
@@ -318,165 +324,158 @@ TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased)
bool live = true;
m_drawingBuffer->m_live = &live;
- WebExternalTextureMailbox mailbox1;
- WebExternalTextureMailbox mailbox2;
- WebExternalTextureMailbox mailbox3;
+ cc::TextureMailbox textureMailbox1;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
+ cc::TextureMailbox textureMailbox2;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
+ cc::TextureMailbox textureMailbox3;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
+ bool useSharedMemory = false;
IntSize initialSize(initialWidth, initialHeight);
// Produce mailboxes.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releaseCallback1, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releaseCallback2, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releaseCallback3, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox1, false);
+ releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->beginDestruction();
- EXPECT_EQ(live, true);
+ ASSERT_EQ(live, true);
- DrawingBufferForTests* weakPointer = m_drawingBuffer.get();
+ DrawingBufferForTests* rawPointer = m_drawingBuffer.get();
m_drawingBuffer.clear();
- EXPECT_EQ(live, true);
+ ASSERT_EQ(live, true);
- weakPointer->markContentsChanged();
- weakPointer->mailboxReleased(mailbox2, false);
- EXPECT_EQ(live, true);
+ rawPointer->markContentsChanged();
+ releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
+ ASSERT_EQ(live, true);
- weakPointer->markContentsChanged();
- weakPointer->mailboxReleased(mailbox3, false);
- EXPECT_EQ(live, false);
+ rawPointer->markContentsChanged();
+ releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
+ ASSERT_EQ(live, false);
}
TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost)
{
bool live = true;
m_drawingBuffer->m_live = &live;
- WebExternalTextureMailbox mailbox1;
- WebExternalTextureMailbox mailbox2;
- WebExternalTextureMailbox mailbox3;
+
+ cc::TextureMailbox textureMailbox1;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
+ cc::TextureMailbox textureMailbox2;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
+ cc::TextureMailbox textureMailbox3;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
+ bool useSharedMemory = false;
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releaseCallback1, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releaseCallback2, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releaseCallback3, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox1, true);
+ releaseCallback1->Run(gpu::SyncToken(), true /* lostResource */);
EXPECT_EQ(live, true);
m_drawingBuffer->beginDestruction();
EXPECT_EQ(live, true);
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox2, false);
+ releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
EXPECT_EQ(live, true);
- DrawingBufferForTests* weakPtr = m_drawingBuffer.get();
+ DrawingBufferForTests* rawPtr = m_drawingBuffer.get();
m_drawingBuffer.clear();
EXPECT_EQ(live, true);
- weakPtr->markContentsChanged();
- weakPtr->mailboxReleased(mailbox3, true);
+ rawPtr->markContentsChanged();
+ releaseCallback3->Run(gpu::SyncToken(), true /* lostResource */);
EXPECT_EQ(live, false);
}
-class TextureMailboxWrapper {
-public:
- explicit TextureMailboxWrapper(const WebExternalTextureMailbox& mailbox)
- : m_mailbox(mailbox)
- { }
-
- bool operator==(const TextureMailboxWrapper& other) const
- {
- return !memcmp(m_mailbox.name, other.m_mailbox.name, sizeof(m_mailbox.name));
- }
-
- bool operator!=(const TextureMailboxWrapper& other) const
- {
- return !(*this == other);
- }
-
-private:
- WebExternalTextureMailbox m_mailbox;
-};
-
TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept)
{
- WebExternalTextureMailbox mailbox1;
- WebExternalTextureMailbox mailbox2;
- WebExternalTextureMailbox mailbox3;
+ cc::TextureMailbox textureMailbox1;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
+ cc::TextureMailbox textureMailbox2;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
+ cc::TextureMailbox textureMailbox3;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
+ bool useSharedMemory = false;
// Produce mailboxes.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releaseCallback1, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releaseCallback2, useSharedMemory));
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releaseCallback3, useSharedMemory));
// Release mailboxes by specific order; 1, 3, 2.
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox1, false);
+ releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox3, false);
+ releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->markContentsChanged();
- m_drawingBuffer->mailboxReleased(mailbox2, false);
+ releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
// The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order because
// DrawingBuffer never keeps more than one mailbox.
- WebExternalTextureMailbox recycledMailbox1;
+ cc::TextureMailbox recycledTextureMailbox1;
+ std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback1;
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox1, 0));
- EXPECT_EQ(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMailbox1));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox1, &recycledReleaseCallback1, useSharedMemory));
+ EXPECT_EQ(textureMailbox2.mailbox(), recycledTextureMailbox1.mailbox());
// The second recycled mailbox must be a new mailbox.
- WebExternalTextureMailbox recycledMailbox2;
+ cc::TextureMailbox recycledTextureMailbox2;
+ std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback2;
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox2, 0));
- EXPECT_NE(TextureMailboxWrapper(mailbox1), TextureMailboxWrapper(recycledMailbox2));
- EXPECT_NE(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMailbox2));
- EXPECT_NE(TextureMailboxWrapper(mailbox3), TextureMailboxWrapper(recycledMailbox2));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox2, &recycledReleaseCallback2, useSharedMemory));
+ EXPECT_NE(textureMailbox1.mailbox(), recycledTextureMailbox2.mailbox());
+ EXPECT_NE(textureMailbox2.mailbox(), recycledTextureMailbox2.mailbox());
+ EXPECT_NE(textureMailbox3.mailbox(), recycledTextureMailbox2.mailbox());
- m_drawingBuffer->mailboxReleased(recycledMailbox1, false);
- m_drawingBuffer->mailboxReleased(recycledMailbox2, false);
+ recycledReleaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
+ recycledReleaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->beginDestruction();
}
TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly)
{
- WebExternalTextureMailbox mailbox;
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
// Produce mailboxes.
m_drawingBuffer->markContentsChanged();
- EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken());
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
- // prepareMailbox() does not wait for any sync point.
- EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken());
-
- GLuint64 waitSyncToken = 0;
- m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), reinterpret_cast<GLbyte*>(&waitSyncToken));
- memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken));
- mailbox.validSyncToken = true;
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
+ // PrepareTextureMailbox() does not wait for any sync point.
+ EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
+
+ gpu::SyncToken waitSyncToken;
+ m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.GetData());
+ releaseCallback->Run(waitSyncToken, false /* lostResource */);
// m_drawingBuffer will wait for the sync point when recycling.
- EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken());
+ EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
- // m_drawingBuffer waits for the sync point when recycling in prepareMailbox().
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
+ // m_drawingBuffer waits for the sync point when recycling in PrepareTextureMailbox().
EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
m_drawingBuffer->beginDestruction();
- m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), reinterpret_cast<GLbyte*>(&waitSyncToken));
- memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken));
- mailbox.validSyncToken = true;
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.GetData());
+ releaseCallback->Run(waitSyncToken, false /* lostResource */);
// m_drawingBuffer waits for the sync point because the destruction is in progress.
EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
}
@@ -507,7 +506,9 @@ protected:
TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
{
- WebExternalTextureMailbox mailbox;
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
IntSize initialSize(initialWidth, initialHeight);
IntSize alternateSize(initialWidth, alternateHeight);
@@ -516,9 +517,9 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId1)).Times(1);
// Produce one mailbox at size 100x100.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
- EXPECT_TRUE(mailbox.allowOverlay);
+ EXPECT_TRUE(textureMailbox.is_overlay_candidate());
testing::Mock::VerifyAndClearExpectations(m_gl);
GLuint m_imageId2 = m_gl->nextImageIdToBeCreated();
@@ -527,7 +528,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId0)).Times(1);
// Resize to 100x50.
m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight));
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
testing::Mock::VerifyAndClearExpectations(m_gl);
GLuint m_imageId3 = m_gl->nextImageIdToBeCreated();
@@ -536,9 +537,9 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId1)).Times(1);
// Produce a mailbox at this size.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize());
- EXPECT_TRUE(mailbox.allowOverlay);
+ EXPECT_TRUE(textureMailbox.is_overlay_candidate());
testing::Mock::VerifyAndClearExpectations(m_gl);
GLuint m_imageId4 = m_gl->nextImageIdToBeCreated();
@@ -547,7 +548,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId2)).Times(1);
// Reset to initial size.
m_drawingBuffer->reset(IntSize(initialWidth, initialHeight));
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
testing::Mock::VerifyAndClearExpectations(m_gl);
GLuint m_imageId5 = m_gl->nextImageIdToBeCreated();
@@ -556,18 +557,18 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId3)).Times(1);
// Prepare another mailbox and verify that it's the correct size.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
- EXPECT_TRUE(mailbox.allowOverlay);
+ EXPECT_TRUE(textureMailbox.is_overlay_candidate());
testing::Mock::VerifyAndClearExpectations(m_gl);
// Prepare one final mailbox and verify that it's the correct size.
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
- EXPECT_TRUE(mailbox.allowOverlay);
- m_drawingBuffer->mailboxReleased(mailbox, false);
+ EXPECT_TRUE(textureMailbox.is_overlay_candidate());
+ releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId5)).Times(1);
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId5)).Times(1);
@@ -579,35 +580,42 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
TEST_F(DrawingBufferImageChromiumTest, allocationFailure)
{
- WebExternalTextureMailbox mailboxes[3];
+ cc::TextureMailbox textureMailbox1;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
+ cc::TextureMailbox textureMailbox2;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
+ cc::TextureMailbox textureMailbox3;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
+ bool useSharedMemory = false;
// Request a mailbox. An image should already be created. Everything works
// as expected.
EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1);
IntSize initialSize(initialWidth, initialHeight);
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[0], 0));
- EXPECT_TRUE(mailboxes[0].allowOverlay);
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releaseCallback1, useSharedMemory));
+ EXPECT_TRUE(textureMailbox1.is_overlay_candidate());
testing::Mock::VerifyAndClearExpectations(m_gl);
// Force image CHROMIUM creation failure. Request another mailbox. It should
// still be provided, but this time with allowOverlay = false.
m_gl->setCreateImageChromiumFail(true);
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[1], 0));
- EXPECT_FALSE(mailboxes[1].allowOverlay);
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releaseCallback2, useSharedMemory));
+ EXPECT_FALSE(textureMailbox2.is_overlay_candidate());
// Check that if image CHROMIUM starts working again, mailboxes are
// correctly created with allowOverlay = true.
EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1);
m_gl->setCreateImageChromiumFail(false);
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[2], 0));
- EXPECT_TRUE(mailboxes[2].allowOverlay);
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releaseCallback3, useSharedMemory));
+ EXPECT_TRUE(textureMailbox3.is_overlay_candidate());
testing::Mock::VerifyAndClearExpectations(m_gl);
- for (int i = 0; i < 3; ++i)
- m_drawingBuffer->mailboxReleased(mailboxes[i], false);
+ releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
+ releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
+ releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
EXPECT_CALL(*m_gl, DestroyImageMock(_)).Times(3);
EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(_)).Times(3);
@@ -758,20 +766,20 @@ TEST(DrawingBufferDepthStencilTest, packedDepthStencilSupported)
TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes)
{
- blink::WebExternalTextureMailbox mailbox;
+ cc::TextureMailbox textureMailbox;
+ std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
+ bool useSharedMemory = false;
// Produce mailboxes.
m_drawingBuffer->markContentsChanged();
- EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
+ EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &releaseCallback, useSharedMemory));
- m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), mailbox.syncToken);
- mailbox.validSyncToken = true;
+ gpu::SyncToken waitSyncToken;
+ m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.GetData());
m_drawingBuffer->setIsHidden(true);
- m_drawingBuffer->mailboxReleased(mailbox);
+ releaseCallback->Run(waitSyncToken, false /* lostResource */);
// m_drawingBuffer deletes mailbox immediately when hidden.
- GLuint waitSyncToken = 0;
- memcpy(&waitSyncToken, mailbox.syncToken, sizeof(waitSyncToken));
EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
m_drawingBuffer->beginDestruction();
« no previous file with comments | « third_party/WebKit/Source/platform/graphics/gpu/DrawingBuffer.cpp ('k') | third_party/WebKit/Source/wtf/DequeTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698