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

Unified Diff: third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp

Issue 2812963003: Add DrawingBuffer multisample resolve unit test. (Closed)
Patch Set: Use enum. Created 3 years, 8 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 6108988cd68d2b537b7c547823e9143650b7e8ea..dd3becb07d70ccc5c5945d0fa1266f7738611e57 100644
--- a/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/gpu/DrawingBufferTest.cpp
@@ -66,7 +66,9 @@ class FakePlatformSupport : public TestingPlatformSupport {
class DrawingBufferTest : public Test {
protected:
- void SetUp() override {
+ void SetUp() override { Init(kDisableMultisampling); }
+
+ void Init(UseMultisampling use_multisampling) {
IntSize initial_size(kInitialWidth, kInitialHeight);
std::unique_ptr<GLES2InterfaceForTests> gl =
WTF::WrapUnique(new GLES2InterfaceForTests);
@@ -76,7 +78,8 @@ class DrawingBufferTest : public Test {
WTF::WrapUnique(
new WebGraphicsContext3DProviderForTests(std::move(gl)));
drawing_buffer_ = DrawingBufferForTests::Create(
- std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve);
+ std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve,
+ use_multisampling);
CHECK(drawing_buffer_);
}
@@ -126,6 +129,27 @@ class DrawingBufferTest : public Test {
RefPtr<DrawingBufferForTests> drawing_buffer_;
};
+class DrawingBufferTestMultisample : public DrawingBufferTest {
+ protected:
+ void SetUp() override { Init(kEnableMultisampling); }
+};
+
+TEST_F(DrawingBufferTestMultisample, verifyMultisampleResolve) {
+ // Initial state: already marked changed, multisampled
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
+ EXPECT_TRUE(drawing_buffer_->ExplicitResolveOfMultisampleData());
+
+ // Resolve the multisample buffer
+ drawing_buffer_->ResolveAndBindForReadAndDraw();
+
+ // After resolve, acknowledge new content
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
+ // No new content
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
+
+ drawing_buffer_->BeginDestruction();
+}
+
TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) {
VerifyStateWasRestored();
cc::TextureMailbox texture_mailbox;
@@ -135,7 +159,7 @@ TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) {
IntSize alternate_size(kInitialWidth, kAlternateHeight);
// Produce one mailbox at size 100x100.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
VerifyStateWasRestored();
@@ -148,7 +172,7 @@ TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) {
VerifyStateWasRestored();
// Produce a mailbox at this size.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize());
@@ -162,7 +186,7 @@ TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) {
VerifyStateWasRestored();
// Prepare another mailbox and verify that it's the correct size.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize());
@@ -170,7 +194,7 @@ TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) {
// Prepare one final mailbox and verify that it's the correct size.
release_callback->Run(gpu::SyncToken(), false /* lostResource */);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
VerifyStateWasRestored();
@@ -193,23 +217,23 @@ TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) {
IntSize initial_size(kInitialWidth, kInitialHeight);
// Produce mailboxes.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
drawing_buffer_->ClearFramebuffers(GL_STENCIL_BUFFER_BIT);
VerifyStateWasRestored();
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1,
&release_callback1));
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
drawing_buffer_->ClearFramebuffers(GL_DEPTH_BUFFER_BIT);
VerifyStateWasRestored();
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2,
&release_callback2));
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
drawing_buffer_->ClearFramebuffers(GL_COLOR_BUFFER_BIT);
VerifyStateWasRestored();
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3,
&release_callback3));
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
release_callback1->Run(gpu::SyncToken(), false /* lostResource */);
drawing_buffer_->BeginDestruction();
@@ -219,11 +243,11 @@ TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) {
drawing_buffer_.Clear();
ASSERT_EQ(live, true);
- raw_pointer->MarkContentsChanged();
+ EXPECT_FALSE(raw_pointer->MarkContentsChanged());
release_callback2->Run(gpu::SyncToken(), false /* lostResource */);
ASSERT_EQ(live, true);
- raw_pointer->MarkContentsChanged();
+ EXPECT_FALSE(raw_pointer->MarkContentsChanged());
release_callback3->Run(gpu::SyncToken(), false /* lostResource */);
ASSERT_EQ(live, false);
}
@@ -239,27 +263,27 @@ TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) {
cc::TextureMailbox texture_mailbox3;
std::unique_ptr<cc::SingleReleaseCallback> release_callback3;
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1,
&release_callback1));
VerifyStateWasRestored();
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2,
&release_callback2));
VerifyStateWasRestored();
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3,
&release_callback3));
VerifyStateWasRestored();
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
release_callback1->Run(gpu::SyncToken(), true /* lostResource */);
EXPECT_EQ(live, true);
drawing_buffer_->BeginDestruction();
EXPECT_EQ(live, true);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
release_callback2->Run(gpu::SyncToken(), false /* lostResource */);
EXPECT_EQ(live, true);
@@ -267,7 +291,7 @@ TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) {
drawing_buffer_.Clear();
EXPECT_EQ(live, true);
- raw_ptr->MarkContentsChanged();
+ EXPECT_FALSE(raw_ptr->MarkContentsChanged());
release_callback3->Run(gpu::SyncToken(), true /* lostResource */);
EXPECT_EQ(live, false);
}
@@ -281,29 +305,29 @@ TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) {
std::unique_ptr<cc::SingleReleaseCallback> release_callback3;
// Produce mailboxes.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1,
&release_callback1));
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2,
&release_callback2));
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3,
&release_callback3));
// Release mailboxes by specific order; 1, 3, 2.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
release_callback1->Run(gpu::SyncToken(), false /* lostResource */);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
release_callback3->Run(gpu::SyncToken(), false /* lostResource */);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
release_callback2->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.
cc::TextureMailbox recycled_texture_mailbox1;
std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback1;
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(
&recycled_texture_mailbox1, &recycled_release_callback1));
EXPECT_EQ(texture_mailbox2.mailbox(), recycled_texture_mailbox1.mailbox());
@@ -311,7 +335,7 @@ TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) {
// The second recycled mailbox must be a new mailbox.
cc::TextureMailbox recycled_texture_mailbox2;
std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback2;
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(
&recycled_texture_mailbox2, &recycled_release_callback2));
EXPECT_NE(texture_mailbox1.mailbox(), recycled_texture_mailbox2.mailbox());
@@ -328,7 +352,7 @@ TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) {
std::unique_ptr<cc::SingleReleaseCallback> release_callback;
// Produce mailboxes.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
@@ -342,7 +366,7 @@ TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) {
// m_drawingBuffer will wait for the sync point when recycling.
EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken());
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
// m_drawingBuffer waits for the sync point when recycling in
@@ -375,7 +399,8 @@ class DrawingBufferImageChromiumTest : public DrawingBufferTest {
image_id0_ = gl_->NextImageIdToBeCreated();
EXPECT_CALL(*gl_, BindTexImage2DMock(image_id0_)).Times(1);
drawing_buffer_ = DrawingBufferForTests::Create(
- std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve);
+ std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve,
+ kDisableMultisampling);
CHECK(drawing_buffer_);
testing::Mock::VerifyAndClearExpectations(gl_);
}
@@ -399,7 +424,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) {
GLuint image_id1 = gl_->NextImageIdToBeCreated();
EXPECT_CALL(*gl_, BindTexImage2DMock(image_id1)).Times(1);
// Produce one mailbox at size 100x100.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize());
@@ -423,7 +448,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) {
GLuint image_id3 = gl_->NextImageIdToBeCreated();
EXPECT_CALL(*gl_, BindTexImage2DMock(image_id3)).Times(1);
// Produce a mailbox at this size.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize());
@@ -446,7 +471,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) {
GLuint image_id5 = gl_->NextImageIdToBeCreated();
EXPECT_CALL(*gl_, BindTexImage2DMock(image_id5)).Times(1);
// Prepare another mailbox and verify that it's the correct size.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize());
@@ -455,7 +480,7 @@ TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) {
// Prepare one final mailbox and verify that it's the correct size.
release_callback->Run(gpu::SyncToken(), false /* lostResource */);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));
EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize());
@@ -482,7 +507,7 @@ TEST_F(DrawingBufferImageChromiumTest, allocationFailure) {
// as expected.
EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1);
IntSize initial_size(kInitialWidth, kInitialHeight);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1,
&release_callback1));
EXPECT_TRUE(texture_mailbox1.is_overlay_candidate());
@@ -492,7 +517,7 @@ TEST_F(DrawingBufferImageChromiumTest, allocationFailure) {
// Force image CHROMIUM creation failure. Request another mailbox. It should
// still be provided, but this time with allowOverlay = false.
gl_->SetCreateImageChromiumFail(true);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2,
&release_callback2));
EXPECT_FALSE(texture_mailbox2.is_overlay_candidate());
@@ -502,7 +527,7 @@ TEST_F(DrawingBufferImageChromiumTest, allocationFailure) {
// correctly created with allowOverlay = true.
EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1);
gl_->SetCreateImageChromiumFail(false);
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_TRUE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3,
&release_callback3));
EXPECT_TRUE(texture_mailbox3.is_overlay_candidate());
@@ -673,7 +698,7 @@ TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) {
std::unique_ptr<cc::SingleReleaseCallback> release_callback;
// Produce mailboxes.
- drawing_buffer_->MarkContentsChanged();
+ EXPECT_FALSE(drawing_buffer_->MarkContentsChanged());
EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox,
&release_callback));

Powered by Google App Engine
This is Rietveld 408576698