| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 } | 59 } |
| 60 | 60 |
| 61 private: | 61 private: |
| 62 cc::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager_; | 62 cc::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager_; |
| 63 }; | 63 }; |
| 64 | 64 |
| 65 } // anonymous namespace | 65 } // anonymous namespace |
| 66 | 66 |
| 67 class DrawingBufferTest : public Test { | 67 class DrawingBufferTest : public Test { |
| 68 protected: | 68 protected: |
| 69 void SetUp() override { | 69 void SetUp() override { Init(kDisableMultisampling); } |
| 70 |
| 71 void Init(UseMultisampling use_multisampling) { |
| 70 IntSize initial_size(kInitialWidth, kInitialHeight); | 72 IntSize initial_size(kInitialWidth, kInitialHeight); |
| 71 std::unique_ptr<GLES2InterfaceForTests> gl = | 73 std::unique_ptr<GLES2InterfaceForTests> gl = |
| 72 WTF::WrapUnique(new GLES2InterfaceForTests); | 74 WTF::WrapUnique(new GLES2InterfaceForTests); |
| 73 gl_ = gl.get(); | 75 gl_ = gl.get(); |
| 74 SetAndSaveRestoreState(false); | 76 SetAndSaveRestoreState(false); |
| 75 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = | 77 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = |
| 76 WTF::WrapUnique( | 78 WTF::WrapUnique( |
| 77 new WebGraphicsContext3DProviderForTests(std::move(gl))); | 79 new WebGraphicsContext3DProviderForTests(std::move(gl))); |
| 78 drawing_buffer_ = DrawingBufferForTests::Create( | 80 drawing_buffer_ = DrawingBufferForTests::Create( |
| 79 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve); | 81 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve, |
| 82 use_multisampling); |
| 80 CHECK(drawing_buffer_); | 83 CHECK(drawing_buffer_); |
| 81 } | 84 } |
| 82 | 85 |
| 83 // Initialize GL state with unusual values, to verify that they are restored. | 86 // Initialize GL state with unusual values, to verify that they are restored. |
| 84 // The |invert| parameter will reverse all boolean parameters, so that all | 87 // The |invert| parameter will reverse all boolean parameters, so that all |
| 85 // values are tested. | 88 // values are tested. |
| 86 void SetAndSaveRestoreState(bool invert) { | 89 void SetAndSaveRestoreState(bool invert) { |
| 87 GLboolean scissor_enabled = !invert; | 90 GLboolean scissor_enabled = !invert; |
| 88 GLfloat clear_color[4] = {0.1, 0.2, 0.3, 0.4}; | 91 GLfloat clear_color[4] = {0.1, 0.2, 0.3, 0.4}; |
| 89 GLfloat clear_depth = 0.8; | 92 GLfloat clear_depth = 0.8; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 119 | 122 |
| 120 gl_->SaveState(); | 123 gl_->SaveState(); |
| 121 } | 124 } |
| 122 | 125 |
| 123 void VerifyStateWasRestored() { gl_->VerifyStateHasNotChangedSinceSave(); } | 126 void VerifyStateWasRestored() { gl_->VerifyStateHasNotChangedSinceSave(); } |
| 124 | 127 |
| 125 GLES2InterfaceForTests* gl_; | 128 GLES2InterfaceForTests* gl_; |
| 126 RefPtr<DrawingBufferForTests> drawing_buffer_; | 129 RefPtr<DrawingBufferForTests> drawing_buffer_; |
| 127 }; | 130 }; |
| 128 | 131 |
| 132 class DrawingBufferTestMultisample : public DrawingBufferTest { |
| 133 protected: |
| 134 void SetUp() override { Init(kEnableMultisampling); } |
| 135 }; |
| 136 |
| 137 TEST_F(DrawingBufferTestMultisample, verifyMultisampleResolve) { |
| 138 // Initial state: already marked changed, multisampled |
| 139 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 140 EXPECT_TRUE(drawing_buffer_->ExplicitResolveOfMultisampleData()); |
| 141 |
| 142 // Resolve the multisample buffer |
| 143 drawing_buffer_->ResolveAndBindForReadAndDraw(); |
| 144 |
| 145 // After resolve, acknowledge new content |
| 146 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 147 // No new content |
| 148 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 149 |
| 150 drawing_buffer_->BeginDestruction(); |
| 151 } |
| 152 |
| 129 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) { | 153 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) { |
| 130 VerifyStateWasRestored(); | 154 VerifyStateWasRestored(); |
| 131 cc::TextureMailbox texture_mailbox; | 155 cc::TextureMailbox texture_mailbox; |
| 132 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 156 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
| 133 | 157 |
| 134 IntSize initial_size(kInitialWidth, kInitialHeight); | 158 IntSize initial_size(kInitialWidth, kInitialHeight); |
| 135 IntSize alternate_size(kInitialWidth, kAlternateHeight); | 159 IntSize alternate_size(kInitialWidth, kAlternateHeight); |
| 136 | 160 |
| 137 // Produce one mailbox at size 100x100. | 161 // Produce one mailbox at size 100x100. |
| 138 drawing_buffer_->MarkContentsChanged(); | 162 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 139 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 163 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 140 &release_callback)); | 164 &release_callback)); |
| 141 VerifyStateWasRestored(); | 165 VerifyStateWasRestored(); |
| 142 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 166 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 143 | 167 |
| 144 // Resize to 100x50. | 168 // Resize to 100x50. |
| 145 drawing_buffer_->Resize(alternate_size); | 169 drawing_buffer_->Resize(alternate_size); |
| 146 VerifyStateWasRestored(); | 170 VerifyStateWasRestored(); |
| 147 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 171 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 148 VerifyStateWasRestored(); | 172 VerifyStateWasRestored(); |
| 149 | 173 |
| 150 // Produce a mailbox at this size. | 174 // Produce a mailbox at this size. |
| 151 drawing_buffer_->MarkContentsChanged(); | 175 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 152 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 176 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 153 &release_callback)); | 177 &release_callback)); |
| 154 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); | 178 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); |
| 155 VerifyStateWasRestored(); | 179 VerifyStateWasRestored(); |
| 156 | 180 |
| 157 // Reset to initial size. | 181 // Reset to initial size. |
| 158 drawing_buffer_->Resize(initial_size); | 182 drawing_buffer_->Resize(initial_size); |
| 159 VerifyStateWasRestored(); | 183 VerifyStateWasRestored(); |
| 160 SetAndSaveRestoreState(true); | 184 SetAndSaveRestoreState(true); |
| 161 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 185 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 162 VerifyStateWasRestored(); | 186 VerifyStateWasRestored(); |
| 163 | 187 |
| 164 // Prepare another mailbox and verify that it's the correct size. | 188 // Prepare another mailbox and verify that it's the correct size. |
| 165 drawing_buffer_->MarkContentsChanged(); | 189 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 166 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 190 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 167 &release_callback)); | 191 &release_callback)); |
| 168 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 192 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 169 VerifyStateWasRestored(); | 193 VerifyStateWasRestored(); |
| 170 | 194 |
| 171 // Prepare one final mailbox and verify that it's the correct size. | 195 // Prepare one final mailbox and verify that it's the correct size. |
| 172 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 196 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 173 drawing_buffer_->MarkContentsChanged(); | 197 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 174 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 198 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 175 &release_callback)); | 199 &release_callback)); |
| 176 VerifyStateWasRestored(); | 200 VerifyStateWasRestored(); |
| 177 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 201 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 178 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 202 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 179 drawing_buffer_->BeginDestruction(); | 203 drawing_buffer_->BeginDestruction(); |
| 180 } | 204 } |
| 181 | 205 |
| 182 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) { | 206 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) { |
| 183 bool live = true; | 207 bool live = true; |
| 184 drawing_buffer_->live_ = &live; | 208 drawing_buffer_->live_ = &live; |
| 185 | 209 |
| 186 cc::TextureMailbox texture_mailbox1; | 210 cc::TextureMailbox texture_mailbox1; |
| 187 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 211 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
| 188 cc::TextureMailbox texture_mailbox2; | 212 cc::TextureMailbox texture_mailbox2; |
| 189 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 213 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
| 190 cc::TextureMailbox texture_mailbox3; | 214 cc::TextureMailbox texture_mailbox3; |
| 191 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 215 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
| 192 | 216 |
| 193 IntSize initial_size(kInitialWidth, kInitialHeight); | 217 IntSize initial_size(kInitialWidth, kInitialHeight); |
| 194 | 218 |
| 195 // Produce mailboxes. | 219 // Produce mailboxes. |
| 196 drawing_buffer_->MarkContentsChanged(); | 220 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 197 drawing_buffer_->ClearFramebuffers(GL_STENCIL_BUFFER_BIT); | 221 drawing_buffer_->ClearFramebuffers(GL_STENCIL_BUFFER_BIT); |
| 198 VerifyStateWasRestored(); | 222 VerifyStateWasRestored(); |
| 199 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 223 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
| 200 &release_callback1)); | 224 &release_callback1)); |
| 201 drawing_buffer_->MarkContentsChanged(); | 225 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 202 drawing_buffer_->ClearFramebuffers(GL_DEPTH_BUFFER_BIT); | 226 drawing_buffer_->ClearFramebuffers(GL_DEPTH_BUFFER_BIT); |
| 203 VerifyStateWasRestored(); | 227 VerifyStateWasRestored(); |
| 204 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 228 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
| 205 &release_callback2)); | 229 &release_callback2)); |
| 206 drawing_buffer_->MarkContentsChanged(); | 230 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 207 drawing_buffer_->ClearFramebuffers(GL_COLOR_BUFFER_BIT); | 231 drawing_buffer_->ClearFramebuffers(GL_COLOR_BUFFER_BIT); |
| 208 VerifyStateWasRestored(); | 232 VerifyStateWasRestored(); |
| 209 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 233 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
| 210 &release_callback3)); | 234 &release_callback3)); |
| 211 | 235 |
| 212 drawing_buffer_->MarkContentsChanged(); | 236 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 213 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 237 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 214 | 238 |
| 215 drawing_buffer_->BeginDestruction(); | 239 drawing_buffer_->BeginDestruction(); |
| 216 ASSERT_EQ(live, true); | 240 ASSERT_EQ(live, true); |
| 217 | 241 |
| 218 DrawingBufferForTests* raw_pointer = drawing_buffer_.Get(); | 242 DrawingBufferForTests* raw_pointer = drawing_buffer_.Get(); |
| 219 drawing_buffer_.Clear(); | 243 drawing_buffer_.Clear(); |
| 220 ASSERT_EQ(live, true); | 244 ASSERT_EQ(live, true); |
| 221 | 245 |
| 222 raw_pointer->MarkContentsChanged(); | 246 EXPECT_FALSE(raw_pointer->MarkContentsChanged()); |
| 223 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 247 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 224 ASSERT_EQ(live, true); | 248 ASSERT_EQ(live, true); |
| 225 | 249 |
| 226 raw_pointer->MarkContentsChanged(); | 250 EXPECT_FALSE(raw_pointer->MarkContentsChanged()); |
| 227 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 251 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
| 228 ASSERT_EQ(live, false); | 252 ASSERT_EQ(live, false); |
| 229 } | 253 } |
| 230 | 254 |
| 231 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) { | 255 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) { |
| 232 bool live = true; | 256 bool live = true; |
| 233 drawing_buffer_->live_ = &live; | 257 drawing_buffer_->live_ = &live; |
| 234 | 258 |
| 235 cc::TextureMailbox texture_mailbox1; | 259 cc::TextureMailbox texture_mailbox1; |
| 236 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 260 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
| 237 cc::TextureMailbox texture_mailbox2; | 261 cc::TextureMailbox texture_mailbox2; |
| 238 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 262 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
| 239 cc::TextureMailbox texture_mailbox3; | 263 cc::TextureMailbox texture_mailbox3; |
| 240 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 264 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
| 241 | 265 |
| 242 drawing_buffer_->MarkContentsChanged(); | 266 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 243 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 267 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
| 244 &release_callback1)); | 268 &release_callback1)); |
| 245 VerifyStateWasRestored(); | 269 VerifyStateWasRestored(); |
| 246 drawing_buffer_->MarkContentsChanged(); | 270 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 247 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 271 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
| 248 &release_callback2)); | 272 &release_callback2)); |
| 249 VerifyStateWasRestored(); | 273 VerifyStateWasRestored(); |
| 250 drawing_buffer_->MarkContentsChanged(); | 274 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 251 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 275 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
| 252 &release_callback3)); | 276 &release_callback3)); |
| 253 VerifyStateWasRestored(); | 277 VerifyStateWasRestored(); |
| 254 | 278 |
| 255 drawing_buffer_->MarkContentsChanged(); | 279 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 256 release_callback1->Run(gpu::SyncToken(), true /* lostResource */); | 280 release_callback1->Run(gpu::SyncToken(), true /* lostResource */); |
| 257 EXPECT_EQ(live, true); | 281 EXPECT_EQ(live, true); |
| 258 | 282 |
| 259 drawing_buffer_->BeginDestruction(); | 283 drawing_buffer_->BeginDestruction(); |
| 260 EXPECT_EQ(live, true); | 284 EXPECT_EQ(live, true); |
| 261 | 285 |
| 262 drawing_buffer_->MarkContentsChanged(); | 286 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 263 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 287 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 264 EXPECT_EQ(live, true); | 288 EXPECT_EQ(live, true); |
| 265 | 289 |
| 266 DrawingBufferForTests* raw_ptr = drawing_buffer_.Get(); | 290 DrawingBufferForTests* raw_ptr = drawing_buffer_.Get(); |
| 267 drawing_buffer_.Clear(); | 291 drawing_buffer_.Clear(); |
| 268 EXPECT_EQ(live, true); | 292 EXPECT_EQ(live, true); |
| 269 | 293 |
| 270 raw_ptr->MarkContentsChanged(); | 294 EXPECT_FALSE(raw_ptr->MarkContentsChanged()); |
| 271 release_callback3->Run(gpu::SyncToken(), true /* lostResource */); | 295 release_callback3->Run(gpu::SyncToken(), true /* lostResource */); |
| 272 EXPECT_EQ(live, false); | 296 EXPECT_EQ(live, false); |
| 273 } | 297 } |
| 274 | 298 |
| 275 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) { | 299 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) { |
| 276 cc::TextureMailbox texture_mailbox1; | 300 cc::TextureMailbox texture_mailbox1; |
| 277 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 301 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
| 278 cc::TextureMailbox texture_mailbox2; | 302 cc::TextureMailbox texture_mailbox2; |
| 279 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 303 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
| 280 cc::TextureMailbox texture_mailbox3; | 304 cc::TextureMailbox texture_mailbox3; |
| 281 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 305 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
| 282 | 306 |
| 283 // Produce mailboxes. | 307 // Produce mailboxes. |
| 284 drawing_buffer_->MarkContentsChanged(); | 308 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 285 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 309 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
| 286 &release_callback1)); | 310 &release_callback1)); |
| 287 drawing_buffer_->MarkContentsChanged(); | 311 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 288 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 312 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
| 289 &release_callback2)); | 313 &release_callback2)); |
| 290 drawing_buffer_->MarkContentsChanged(); | 314 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 291 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 315 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
| 292 &release_callback3)); | 316 &release_callback3)); |
| 293 | 317 |
| 294 // Release mailboxes by specific order; 1, 3, 2. | 318 // Release mailboxes by specific order; 1, 3, 2. |
| 295 drawing_buffer_->MarkContentsChanged(); | 319 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 296 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 320 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 297 drawing_buffer_->MarkContentsChanged(); | 321 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 298 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 322 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
| 299 drawing_buffer_->MarkContentsChanged(); | 323 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 300 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 324 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 301 | 325 |
| 302 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order | 326 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order |
| 303 // because DrawingBuffer never keeps more than one mailbox. | 327 // because DrawingBuffer never keeps more than one mailbox. |
| 304 cc::TextureMailbox recycled_texture_mailbox1; | 328 cc::TextureMailbox recycled_texture_mailbox1; |
| 305 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback1; | 329 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback1; |
| 306 drawing_buffer_->MarkContentsChanged(); | 330 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 307 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( | 331 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( |
| 308 &recycled_texture_mailbox1, &recycled_release_callback1)); | 332 &recycled_texture_mailbox1, &recycled_release_callback1)); |
| 309 EXPECT_EQ(texture_mailbox2.mailbox(), recycled_texture_mailbox1.mailbox()); | 333 EXPECT_EQ(texture_mailbox2.mailbox(), recycled_texture_mailbox1.mailbox()); |
| 310 | 334 |
| 311 // The second recycled mailbox must be a new mailbox. | 335 // The second recycled mailbox must be a new mailbox. |
| 312 cc::TextureMailbox recycled_texture_mailbox2; | 336 cc::TextureMailbox recycled_texture_mailbox2; |
| 313 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback2; | 337 std::unique_ptr<cc::SingleReleaseCallback> recycled_release_callback2; |
| 314 drawing_buffer_->MarkContentsChanged(); | 338 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 315 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( | 339 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox( |
| 316 &recycled_texture_mailbox2, &recycled_release_callback2)); | 340 &recycled_texture_mailbox2, &recycled_release_callback2)); |
| 317 EXPECT_NE(texture_mailbox1.mailbox(), recycled_texture_mailbox2.mailbox()); | 341 EXPECT_NE(texture_mailbox1.mailbox(), recycled_texture_mailbox2.mailbox()); |
| 318 EXPECT_NE(texture_mailbox2.mailbox(), recycled_texture_mailbox2.mailbox()); | 342 EXPECT_NE(texture_mailbox2.mailbox(), recycled_texture_mailbox2.mailbox()); |
| 319 EXPECT_NE(texture_mailbox3.mailbox(), recycled_texture_mailbox2.mailbox()); | 343 EXPECT_NE(texture_mailbox3.mailbox(), recycled_texture_mailbox2.mailbox()); |
| 320 | 344 |
| 321 recycled_release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 345 recycled_release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 322 recycled_release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 346 recycled_release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 323 drawing_buffer_->BeginDestruction(); | 347 drawing_buffer_->BeginDestruction(); |
| 324 } | 348 } |
| 325 | 349 |
| 326 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) { | 350 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) { |
| 327 cc::TextureMailbox texture_mailbox; | 351 cc::TextureMailbox texture_mailbox; |
| 328 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 352 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
| 329 | 353 |
| 330 // Produce mailboxes. | 354 // Produce mailboxes. |
| 331 drawing_buffer_->MarkContentsChanged(); | 355 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 332 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 356 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
| 333 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 357 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 334 &release_callback)); | 358 &release_callback)); |
| 335 // PrepareTextureMailbox() does not wait for any sync point. | 359 // PrepareTextureMailbox() does not wait for any sync point. |
| 336 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 360 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
| 337 | 361 |
| 338 gpu::SyncToken wait_sync_token; | 362 gpu::SyncToken wait_sync_token; |
| 339 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 363 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
| 340 wait_sync_token.GetData()); | 364 wait_sync_token.GetData()); |
| 341 release_callback->Run(wait_sync_token, false /* lostResource */); | 365 release_callback->Run(wait_sync_token, false /* lostResource */); |
| 342 // m_drawingBuffer will wait for the sync point when recycling. | 366 // m_drawingBuffer will wait for the sync point when recycling. |
| 343 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); | 367 EXPECT_EQ(gpu::SyncToken(), gl_->MostRecentlyWaitedSyncToken()); |
| 344 | 368 |
| 345 drawing_buffer_->MarkContentsChanged(); | 369 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 346 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 370 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 347 &release_callback)); | 371 &release_callback)); |
| 348 // m_drawingBuffer waits for the sync point when recycling in | 372 // m_drawingBuffer waits for the sync point when recycling in |
| 349 // PrepareTextureMailbox(). | 373 // PrepareTextureMailbox(). |
| 350 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); | 374 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); |
| 351 | 375 |
| 352 drawing_buffer_->BeginDestruction(); | 376 drawing_buffer_->BeginDestruction(); |
| 353 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 377 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
| 354 wait_sync_token.GetData()); | 378 wait_sync_token.GetData()); |
| 355 release_callback->Run(wait_sync_token, false /* lostResource */); | 379 release_callback->Run(wait_sync_token, false /* lostResource */); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 368 WTF::WrapUnique(new GLES2InterfaceForTests); | 392 WTF::WrapUnique(new GLES2InterfaceForTests); |
| 369 gl_ = gl.get(); | 393 gl_ = gl.get(); |
| 370 SetAndSaveRestoreState(true); | 394 SetAndSaveRestoreState(true); |
| 371 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = | 395 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = |
| 372 WTF::WrapUnique( | 396 WTF::WrapUnique( |
| 373 new WebGraphicsContext3DProviderForTests(std::move(gl))); | 397 new WebGraphicsContext3DProviderForTests(std::move(gl))); |
| 374 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); | 398 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); |
| 375 image_id0_ = gl_->NextImageIdToBeCreated(); | 399 image_id0_ = gl_->NextImageIdToBeCreated(); |
| 376 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id0_)).Times(1); | 400 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id0_)).Times(1); |
| 377 drawing_buffer_ = DrawingBufferForTests::Create( | 401 drawing_buffer_ = DrawingBufferForTests::Create( |
| 378 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve); | 402 std::move(provider), gl_, initial_size, DrawingBuffer::kPreserve, |
| 403 kDisableMultisampling); |
| 379 CHECK(drawing_buffer_); | 404 CHECK(drawing_buffer_); |
| 380 testing::Mock::VerifyAndClearExpectations(gl_); | 405 testing::Mock::VerifyAndClearExpectations(gl_); |
| 381 } | 406 } |
| 382 | 407 |
| 383 void TearDown() override { | 408 void TearDown() override { |
| 384 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); | 409 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); |
| 385 platform_.reset(); | 410 platform_.reset(); |
| 386 } | 411 } |
| 387 | 412 |
| 388 GLuint image_id0_; | 413 GLuint image_id0_; |
| 389 std::unique_ptr<ScopedTestingPlatformSupport<FakePlatformSupport>> platform_; | 414 std::unique_ptr<ScopedTestingPlatformSupport<FakePlatformSupport>> platform_; |
| 390 }; | 415 }; |
| 391 | 416 |
| 392 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) { | 417 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) { |
| 393 cc::TextureMailbox texture_mailbox; | 418 cc::TextureMailbox texture_mailbox; |
| 394 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 419 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
| 395 | 420 |
| 396 IntSize initial_size(kInitialWidth, kInitialHeight); | 421 IntSize initial_size(kInitialWidth, kInitialHeight); |
| 397 IntSize alternate_size(kInitialWidth, kAlternateHeight); | 422 IntSize alternate_size(kInitialWidth, kAlternateHeight); |
| 398 | 423 |
| 399 GLuint image_id1 = gl_->NextImageIdToBeCreated(); | 424 GLuint image_id1 = gl_->NextImageIdToBeCreated(); |
| 400 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id1)).Times(1); | 425 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id1)).Times(1); |
| 401 // Produce one mailbox at size 100x100. | 426 // Produce one mailbox at size 100x100. |
| 402 drawing_buffer_->MarkContentsChanged(); | 427 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 403 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 428 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 404 &release_callback)); | 429 &release_callback)); |
| 405 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 430 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 406 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 431 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
| 407 testing::Mock::VerifyAndClearExpectations(gl_); | 432 testing::Mock::VerifyAndClearExpectations(gl_); |
| 408 VerifyStateWasRestored(); | 433 VerifyStateWasRestored(); |
| 409 | 434 |
| 410 GLuint image_id2 = gl_->NextImageIdToBeCreated(); | 435 GLuint image_id2 = gl_->NextImageIdToBeCreated(); |
| 411 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id2)).Times(1); | 436 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id2)).Times(1); |
| 412 EXPECT_CALL(*gl_, DestroyImageMock(image_id0_)).Times(1); | 437 EXPECT_CALL(*gl_, DestroyImageMock(image_id0_)).Times(1); |
| 413 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id0_)).Times(1); | 438 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id0_)).Times(1); |
| 414 EXPECT_CALL(*gl_, DestroyImageMock(image_id1)).Times(1); | 439 EXPECT_CALL(*gl_, DestroyImageMock(image_id1)).Times(1); |
| 415 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id1)).Times(1); | 440 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id1)).Times(1); |
| 416 // Resize to 100x50. | 441 // Resize to 100x50. |
| 417 drawing_buffer_->Resize(alternate_size); | 442 drawing_buffer_->Resize(alternate_size); |
| 418 VerifyStateWasRestored(); | 443 VerifyStateWasRestored(); |
| 419 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 444 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 420 VerifyStateWasRestored(); | 445 VerifyStateWasRestored(); |
| 421 testing::Mock::VerifyAndClearExpectations(gl_); | 446 testing::Mock::VerifyAndClearExpectations(gl_); |
| 422 | 447 |
| 423 GLuint image_id3 = gl_->NextImageIdToBeCreated(); | 448 GLuint image_id3 = gl_->NextImageIdToBeCreated(); |
| 424 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id3)).Times(1); | 449 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id3)).Times(1); |
| 425 // Produce a mailbox at this size. | 450 // Produce a mailbox at this size. |
| 426 drawing_buffer_->MarkContentsChanged(); | 451 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 427 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 452 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 428 &release_callback)); | 453 &release_callback)); |
| 429 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); | 454 EXPECT_EQ(alternate_size, gl_->MostRecentlyProducedSize()); |
| 430 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 455 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
| 431 testing::Mock::VerifyAndClearExpectations(gl_); | 456 testing::Mock::VerifyAndClearExpectations(gl_); |
| 432 | 457 |
| 433 GLuint image_id4 = gl_->NextImageIdToBeCreated(); | 458 GLuint image_id4 = gl_->NextImageIdToBeCreated(); |
| 434 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id4)).Times(1); | 459 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id4)).Times(1); |
| 435 EXPECT_CALL(*gl_, DestroyImageMock(image_id2)).Times(1); | 460 EXPECT_CALL(*gl_, DestroyImageMock(image_id2)).Times(1); |
| 436 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id2)).Times(1); | 461 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id2)).Times(1); |
| 437 EXPECT_CALL(*gl_, DestroyImageMock(image_id3)).Times(1); | 462 EXPECT_CALL(*gl_, DestroyImageMock(image_id3)).Times(1); |
| 438 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id3)).Times(1); | 463 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id3)).Times(1); |
| 439 // Reset to initial size. | 464 // Reset to initial size. |
| 440 drawing_buffer_->Resize(initial_size); | 465 drawing_buffer_->Resize(initial_size); |
| 441 VerifyStateWasRestored(); | 466 VerifyStateWasRestored(); |
| 442 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 467 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 443 VerifyStateWasRestored(); | 468 VerifyStateWasRestored(); |
| 444 testing::Mock::VerifyAndClearExpectations(gl_); | 469 testing::Mock::VerifyAndClearExpectations(gl_); |
| 445 | 470 |
| 446 GLuint image_id5 = gl_->NextImageIdToBeCreated(); | 471 GLuint image_id5 = gl_->NextImageIdToBeCreated(); |
| 447 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id5)).Times(1); | 472 EXPECT_CALL(*gl_, BindTexImage2DMock(image_id5)).Times(1); |
| 448 // Prepare another mailbox and verify that it's the correct size. | 473 // Prepare another mailbox and verify that it's the correct size. |
| 449 drawing_buffer_->MarkContentsChanged(); | 474 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 450 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 475 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 451 &release_callback)); | 476 &release_callback)); |
| 452 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 477 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 453 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 478 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
| 454 testing::Mock::VerifyAndClearExpectations(gl_); | 479 testing::Mock::VerifyAndClearExpectations(gl_); |
| 455 | 480 |
| 456 // Prepare one final mailbox and verify that it's the correct size. | 481 // Prepare one final mailbox and verify that it's the correct size. |
| 457 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 482 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 458 drawing_buffer_->MarkContentsChanged(); | 483 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 459 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 484 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 460 &release_callback)); | 485 &release_callback)); |
| 461 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); | 486 EXPECT_EQ(initial_size, gl_->MostRecentlyProducedSize()); |
| 462 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); | 487 EXPECT_TRUE(texture_mailbox.is_overlay_candidate()); |
| 463 release_callback->Run(gpu::SyncToken(), false /* lostResource */); | 488 release_callback->Run(gpu::SyncToken(), false /* lostResource */); |
| 464 | 489 |
| 465 EXPECT_CALL(*gl_, DestroyImageMock(image_id5)).Times(1); | 490 EXPECT_CALL(*gl_, DestroyImageMock(image_id5)).Times(1); |
| 466 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id5)).Times(1); | 491 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id5)).Times(1); |
| 467 EXPECT_CALL(*gl_, DestroyImageMock(image_id4)).Times(1); | 492 EXPECT_CALL(*gl_, DestroyImageMock(image_id4)).Times(1); |
| 468 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id4)).Times(1); | 493 EXPECT_CALL(*gl_, ReleaseTexImage2DMock(image_id4)).Times(1); |
| 469 drawing_buffer_->BeginDestruction(); | 494 drawing_buffer_->BeginDestruction(); |
| 470 testing::Mock::VerifyAndClearExpectations(gl_); | 495 testing::Mock::VerifyAndClearExpectations(gl_); |
| 471 } | 496 } |
| 472 | 497 |
| 473 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) { | 498 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) { |
| 474 cc::TextureMailbox texture_mailbox1; | 499 cc::TextureMailbox texture_mailbox1; |
| 475 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; | 500 std::unique_ptr<cc::SingleReleaseCallback> release_callback1; |
| 476 cc::TextureMailbox texture_mailbox2; | 501 cc::TextureMailbox texture_mailbox2; |
| 477 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; | 502 std::unique_ptr<cc::SingleReleaseCallback> release_callback2; |
| 478 cc::TextureMailbox texture_mailbox3; | 503 cc::TextureMailbox texture_mailbox3; |
| 479 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; | 504 std::unique_ptr<cc::SingleReleaseCallback> release_callback3; |
| 480 | 505 |
| 481 // Request a mailbox. An image should already be created. Everything works | 506 // Request a mailbox. An image should already be created. Everything works |
| 482 // as expected. | 507 // as expected. |
| 483 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); | 508 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); |
| 484 IntSize initial_size(kInitialWidth, kInitialHeight); | 509 IntSize initial_size(kInitialWidth, kInitialHeight); |
| 485 drawing_buffer_->MarkContentsChanged(); | 510 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 486 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, | 511 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox1, |
| 487 &release_callback1)); | 512 &release_callback1)); |
| 488 EXPECT_TRUE(texture_mailbox1.is_overlay_candidate()); | 513 EXPECT_TRUE(texture_mailbox1.is_overlay_candidate()); |
| 489 testing::Mock::VerifyAndClearExpectations(gl_); | 514 testing::Mock::VerifyAndClearExpectations(gl_); |
| 490 VerifyStateWasRestored(); | 515 VerifyStateWasRestored(); |
| 491 | 516 |
| 492 // Force image CHROMIUM creation failure. Request another mailbox. It should | 517 // Force image CHROMIUM creation failure. Request another mailbox. It should |
| 493 // still be provided, but this time with allowOverlay = false. | 518 // still be provided, but this time with allowOverlay = false. |
| 494 gl_->SetCreateImageChromiumFail(true); | 519 gl_->SetCreateImageChromiumFail(true); |
| 495 drawing_buffer_->MarkContentsChanged(); | 520 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 496 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, | 521 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox2, |
| 497 &release_callback2)); | 522 &release_callback2)); |
| 498 EXPECT_FALSE(texture_mailbox2.is_overlay_candidate()); | 523 EXPECT_FALSE(texture_mailbox2.is_overlay_candidate()); |
| 499 VerifyStateWasRestored(); | 524 VerifyStateWasRestored(); |
| 500 | 525 |
| 501 // Check that if image CHROMIUM starts working again, mailboxes are | 526 // Check that if image CHROMIUM starts working again, mailboxes are |
| 502 // correctly created with allowOverlay = true. | 527 // correctly created with allowOverlay = true. |
| 503 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); | 528 EXPECT_CALL(*gl_, BindTexImage2DMock(_)).Times(1); |
| 504 gl_->SetCreateImageChromiumFail(false); | 529 gl_->SetCreateImageChromiumFail(false); |
| 505 drawing_buffer_->MarkContentsChanged(); | 530 EXPECT_TRUE(drawing_buffer_->MarkContentsChanged()); |
| 506 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, | 531 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox3, |
| 507 &release_callback3)); | 532 &release_callback3)); |
| 508 EXPECT_TRUE(texture_mailbox3.is_overlay_candidate()); | 533 EXPECT_TRUE(texture_mailbox3.is_overlay_candidate()); |
| 509 testing::Mock::VerifyAndClearExpectations(gl_); | 534 testing::Mock::VerifyAndClearExpectations(gl_); |
| 510 VerifyStateWasRestored(); | 535 VerifyStateWasRestored(); |
| 511 | 536 |
| 512 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); | 537 release_callback1->Run(gpu::SyncToken(), false /* lostResource */); |
| 513 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); | 538 release_callback2->Run(gpu::SyncToken(), false /* lostResource */); |
| 514 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); | 539 release_callback3->Run(gpu::SyncToken(), false /* lostResource */); |
| 515 | 540 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 | 691 |
| 667 drawing_buffer->BeginDestruction(); | 692 drawing_buffer->BeginDestruction(); |
| 668 } | 693 } |
| 669 } | 694 } |
| 670 | 695 |
| 671 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) { | 696 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) { |
| 672 cc::TextureMailbox texture_mailbox; | 697 cc::TextureMailbox texture_mailbox; |
| 673 std::unique_ptr<cc::SingleReleaseCallback> release_callback; | 698 std::unique_ptr<cc::SingleReleaseCallback> release_callback; |
| 674 | 699 |
| 675 // Produce mailboxes. | 700 // Produce mailboxes. |
| 676 drawing_buffer_->MarkContentsChanged(); | 701 EXPECT_FALSE(drawing_buffer_->MarkContentsChanged()); |
| 677 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, | 702 EXPECT_TRUE(drawing_buffer_->PrepareTextureMailbox(&texture_mailbox, |
| 678 &release_callback)); | 703 &release_callback)); |
| 679 | 704 |
| 680 gpu::SyncToken wait_sync_token; | 705 gpu::SyncToken wait_sync_token; |
| 681 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), | 706 gl_->GenSyncTokenCHROMIUM(gl_->InsertFenceSyncCHROMIUM(), |
| 682 wait_sync_token.GetData()); | 707 wait_sync_token.GetData()); |
| 683 drawing_buffer_->SetIsHidden(true); | 708 drawing_buffer_->SetIsHidden(true); |
| 684 release_callback->Run(wait_sync_token, false /* lostResource */); | 709 release_callback->Run(wait_sync_token, false /* lostResource */); |
| 685 // m_drawingBuffer deletes mailbox immediately when hidden. | 710 // m_drawingBuffer deletes mailbox immediately when hidden. |
| 686 | 711 |
| 687 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); | 712 EXPECT_EQ(wait_sync_token, gl_->MostRecentlyWaitedSyncToken()); |
| 688 | 713 |
| 689 drawing_buffer_->BeginDestruction(); | 714 drawing_buffer_->BeginDestruction(); |
| 690 } | 715 } |
| 691 | 716 |
| 692 } // namespace blink | 717 } // namespace blink |
| OLD | NEW |