| 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));
|
|
|
|
|