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

Side by Side 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 unified diff | Download patch
OLDNEW
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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "platform/graphics/gpu/DrawingBuffer.h" 31 #include "platform/graphics/gpu/DrawingBuffer.h"
32 32
33 #include "cc/resources/single_release_callback.h"
34 #include "cc/resources/texture_mailbox.h"
33 #include "gpu/command_buffer/client/gles2_interface_stub.h" 35 #include "gpu/command_buffer/client/gles2_interface_stub.h"
34 #include "gpu/command_buffer/common/capabilities.h" 36 #include "gpu/command_buffer/common/capabilities.h"
37 #include "gpu/command_buffer/common/mailbox.h"
38 #include "gpu/command_buffer/common/sync_token.h"
35 #include "platform/RuntimeEnabledFeatures.h" 39 #include "platform/RuntimeEnabledFeatures.h"
36 #include "platform/graphics/ImageBuffer.h" 40 #include "platform/graphics/ImageBuffer.h"
37 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 41 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
38 #include "platform/graphics/gpu/Extensions3DUtil.h" 42 #include "platform/graphics/gpu/Extensions3DUtil.h"
39 #include "public/platform/Platform.h" 43 #include "public/platform/Platform.h"
40 #include "public/platform/WebExternalTextureMailbox.h"
41 #include "public/platform/WebGraphicsContext3DProvider.h" 44 #include "public/platform/WebGraphicsContext3DProvider.h"
42 #include "public/platform/functional/WebFunction.h" 45 #include "public/platform/functional/WebFunction.h"
43 #include "testing/gmock/include/gmock/gmock.h" 46 #include "testing/gmock/include/gmock/gmock.h"
44 #include "testing/gtest/include/gtest/gtest.h" 47 #include "testing/gtest/include/gtest/gtest.h"
45 #include "wtf/PtrUtil.h" 48 #include "wtf/PtrUtil.h"
46 #include "wtf/RefPtr.h" 49 #include "wtf/RefPtr.h"
47 #include <memory> 50 #include <memory>
48 51
49 using testing::Test; 52 using testing::Test;
50 using testing::_; 53 using testing::_;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 107
105 void GetIntegerv(GLenum pname, GLint* value) override 108 void GetIntegerv(GLenum pname, GLint* value) override
106 { 109 {
107 if (pname == GL_MAX_TEXTURE_SIZE) 110 if (pname == GL_MAX_TEXTURE_SIZE)
108 *value = 1024; 111 *value = 1024;
109 } 112 }
110 113
111 void GenMailboxCHROMIUM(GLbyte* mailbox) override 114 void GenMailboxCHROMIUM(GLbyte* mailbox) override
112 { 115 {
113 ++m_currentMailboxByte; 116 ++m_currentMailboxByte;
114 WebExternalTextureMailbox temp; 117 memset(mailbox, m_currentMailboxByte, GL_MAILBOX_SIZE_CHROMIUM);
115 memset(mailbox, m_currentMailboxByte, sizeof(temp.name));
116 } 118 }
117 119
118 void ProduceTextureDirectCHROMIUM(GLuint texture, GLenum target, const GLbyt e* mailbox) override 120 void ProduceTextureDirectCHROMIUM(GLuint texture, GLenum target, const GLbyt e* mailbox) override
119 { 121 {
120 ASSERT_EQ(target, drawingBufferTextureTarget()); 122 ASSERT_EQ(target, drawingBufferTextureTarget());
121 123
122 if (!m_createImageChromiumFail) { 124 if (!m_createImageChromiumFail) {
123 ASSERT_TRUE(m_textureSizes.contains(texture)); 125 ASSERT_TRUE(m_textureSizes.contains(texture));
124 m_mostRecentlyProducedSize = m_textureSizes.get(texture); 126 m_mostRecentlyProducedSize = m_textureSizes.get(texture);
125 } 127 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 { 167 {
166 if (target == imageCHROMIUMTextureTarget()) { 168 if (target == imageCHROMIUMTextureTarget()) {
167 m_imageSizes.set(m_currentImageId, IntSize()); 169 m_imageSizes.set(m_currentImageId, IntSize());
168 m_imageToTextureMap.remove(imageId); 170 m_imageToTextureMap.remove(imageId);
169 ReleaseTexImage2DMock(imageId); 171 ReleaseTexImage2DMock(imageId);
170 } 172 }
171 } 173 }
172 174
173 void GenSyncTokenCHROMIUM(GLuint64 fenceSync, GLbyte* syncToken) override 175 void GenSyncTokenCHROMIUM(GLuint64 fenceSync, GLbyte* syncToken) override
174 { 176 {
175 memcpy(syncToken, &fenceSync, sizeof(fenceSync)); 177 static uint64_t uniqueId = 1;
178 gpu::SyncToken source(gpu::GPU_IO, 1, gpu::CommandBufferId::FromUnsafeVa lue(uniqueId++), 2);
179 memcpy(syncToken, &source, sizeof(source));
176 } 180 }
177 181
178 void GenTextures(GLsizei n, GLuint* textures) override 182 void GenTextures(GLsizei n, GLuint* textures) override
179 { 183 {
180 static GLuint id = 1; 184 static GLuint id = 1;
181 for (GLsizei i = 0; i < n; ++i) 185 for (GLsizei i = 0; i < n; ++i)
182 textures[i] = id++; 186 textures[i] = id++;
183 } 187 }
184 188
185 GLuint boundTexture() const { return m_boundTexture; } 189 GLuint boundTexture() const { return m_boundTexture; }
186 GLuint boundTextureTarget() const { return m_boundTextureTarget; } 190 GLuint boundTextureTarget() const { return m_boundTextureTarget; }
187 GLuint mostRecentlyWaitedSyncToken() const { return m_mostRecentlyWaitedSync Token; } 191 gpu::SyncToken mostRecentlyWaitedSyncToken() const { return m_mostRecentlyWa itedSyncToken; }
188 GLuint nextImageIdToBeCreated() const { return m_currentImageId; } 192 GLuint nextImageIdToBeCreated() const { return m_currentImageId; }
189 IntSize mostRecentlyProducedSize() const { return m_mostRecentlyProducedSize ; } 193 IntSize mostRecentlyProducedSize() const { return m_mostRecentlyProducedSize ; }
190 194
191 void setCreateImageChromiumFail(bool fail) { m_createImageChromiumFail = fai l; } 195 void setCreateImageChromiumFail(bool fail) { m_createImageChromiumFail = fai l; }
192 196
193 private: 197 private:
194 GLuint m_boundTexture = 0; 198 GLuint m_boundTexture = 0;
195 GLuint m_boundTextureTarget = 0; 199 GLuint m_boundTextureTarget = 0;
196 GLuint m_mostRecentlyWaitedSyncToken = 0; 200 gpu::SyncToken m_mostRecentlyWaitedSyncToken;
197 GLbyte m_currentMailboxByte = 0; 201 GLbyte m_currentMailboxByte = 0;
198 IntSize m_mostRecentlyProducedSize; 202 IntSize m_mostRecentlyProducedSize;
199 bool m_createImageChromiumFail = false; 203 bool m_createImageChromiumFail = false;
200 GLuint m_currentImageId = 1; 204 GLuint m_currentImageId = 1;
201 HashMap<GLuint, IntSize> m_textureSizes; 205 HashMap<GLuint, IntSize> m_textureSizes;
202 HashMap<GLuint, IntSize> m_imageSizes; 206 HashMap<GLuint, IntSize> m_imageSizes;
203 HashMap<GLuint, GLuint> m_imageToTextureMap; 207 HashMap<GLuint, GLuint> m_imageToTextureMap;
204 }; 208 };
205 209
206 static const int initialWidth = 100; 210 static const int initialWidth = 100;
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 m_drawingBuffer = DrawingBufferForTests::create(std::move(provider), Int Size(initialWidth, initialHeight), DrawingBuffer::Preserve); 273 m_drawingBuffer = DrawingBufferForTests::create(std::move(provider), Int Size(initialWidth, initialHeight), DrawingBuffer::Preserve);
270 CHECK(m_drawingBuffer); 274 CHECK(m_drawingBuffer);
271 } 275 }
272 276
273 GLES2InterfaceForTests* m_gl; 277 GLES2InterfaceForTests* m_gl;
274 RefPtr<DrawingBufferForTests> m_drawingBuffer; 278 RefPtr<DrawingBufferForTests> m_drawingBuffer;
275 }; 279 };
276 280
277 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) 281 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes)
278 { 282 {
279 WebExternalTextureMailbox mailbox; 283 cc::TextureMailbox textureMailbox;
284 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
285 bool useSharedMemory = false;
280 286
281 IntSize initialSize(initialWidth, initialHeight); 287 IntSize initialSize(initialWidth, initialHeight);
282 IntSize alternateSize(initialWidth, alternateHeight); 288 IntSize alternateSize(initialWidth, alternateHeight);
283 289
284 // Produce one mailbox at size 100x100. 290 // Produce one mailbox at size 100x100.
285 m_drawingBuffer->markContentsChanged(); 291 m_drawingBuffer->markContentsChanged();
286 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 292 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
287 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 293 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
288 294
289 // Resize to 100x50. 295 // Resize to 100x50.
290 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); 296 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight));
291 m_drawingBuffer->mailboxReleased(mailbox, false); 297 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
292 298
293 // Produce a mailbox at this size. 299 // Produce a mailbox at this size.
294 m_drawingBuffer->markContentsChanged(); 300 m_drawingBuffer->markContentsChanged();
295 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 301 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
296 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); 302 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize());
297 303
298 // Reset to initial size. 304 // Reset to initial size.
299 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); 305 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight));
300 m_drawingBuffer->mailboxReleased(mailbox, false); 306 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
301 307
302 // Prepare another mailbox and verify that it's the correct size. 308 // Prepare another mailbox and verify that it's the correct size.
303 m_drawingBuffer->markContentsChanged(); 309 m_drawingBuffer->markContentsChanged();
304 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 310 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
305 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 311 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
306 312
307 // Prepare one final mailbox and verify that it's the correct size. 313 // Prepare one final mailbox and verify that it's the correct size.
308 m_drawingBuffer->mailboxReleased(mailbox, false); 314 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
309 m_drawingBuffer->markContentsChanged(); 315 m_drawingBuffer->markContentsChanged();
310 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 316 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
311 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 317 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
312 m_drawingBuffer->mailboxReleased(mailbox, false); 318 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
313 m_drawingBuffer->beginDestruction(); 319 m_drawingBuffer->beginDestruction();
314 } 320 }
315 321
316 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased) 322 TEST_F(DrawingBufferTest, verifyDestructionCompleteAfterAllMailboxesReleased)
317 { 323 {
318 bool live = true; 324 bool live = true;
319 m_drawingBuffer->m_live = &live; 325 m_drawingBuffer->m_live = &live;
320 326
321 WebExternalTextureMailbox mailbox1; 327 cc::TextureMailbox textureMailbox1;
322 WebExternalTextureMailbox mailbox2; 328 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
323 WebExternalTextureMailbox mailbox3; 329 cc::TextureMailbox textureMailbox2;
330 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
331 cc::TextureMailbox textureMailbox3;
332 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
333 bool useSharedMemory = false;
324 334
325 IntSize initialSize(initialWidth, initialHeight); 335 IntSize initialSize(initialWidth, initialHeight);
326 336
327 // Produce mailboxes. 337 // Produce mailboxes.
328 m_drawingBuffer->markContentsChanged(); 338 m_drawingBuffer->markContentsChanged();
329 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0)); 339 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas eCallback1, useSharedMemory));
330 m_drawingBuffer->markContentsChanged(); 340 m_drawingBuffer->markContentsChanged();
331 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0)); 341 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas eCallback2, useSharedMemory));
332 m_drawingBuffer->markContentsChanged(); 342 m_drawingBuffer->markContentsChanged();
333 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0)); 343 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas eCallback3, useSharedMemory));
334 344
335 m_drawingBuffer->markContentsChanged(); 345 m_drawingBuffer->markContentsChanged();
336 m_drawingBuffer->mailboxReleased(mailbox1, false); 346 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
337 347
338 m_drawingBuffer->beginDestruction(); 348 m_drawingBuffer->beginDestruction();
339 EXPECT_EQ(live, true); 349 ASSERT_EQ(live, true);
340 350
341 DrawingBufferForTests* weakPointer = m_drawingBuffer.get(); 351 DrawingBufferForTests* rawPointer = m_drawingBuffer.get();
342 m_drawingBuffer.clear(); 352 m_drawingBuffer.clear();
343 EXPECT_EQ(live, true); 353 ASSERT_EQ(live, true);
344 354
345 weakPointer->markContentsChanged(); 355 rawPointer->markContentsChanged();
346 weakPointer->mailboxReleased(mailbox2, false); 356 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
347 EXPECT_EQ(live, true); 357 ASSERT_EQ(live, true);
348 358
349 weakPointer->markContentsChanged(); 359 rawPointer->markContentsChanged();
350 weakPointer->mailboxReleased(mailbox3, false); 360 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
351 EXPECT_EQ(live, false); 361 ASSERT_EQ(live, false);
352 } 362 }
353 363
354 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost) 364 TEST_F(DrawingBufferTest, verifyDrawingBufferStaysAliveIfResourcesAreLost)
355 { 365 {
356 bool live = true; 366 bool live = true;
357 m_drawingBuffer->m_live = &live; 367 m_drawingBuffer->m_live = &live;
358 WebExternalTextureMailbox mailbox1; 368
359 WebExternalTextureMailbox mailbox2; 369 cc::TextureMailbox textureMailbox1;
360 WebExternalTextureMailbox mailbox3; 370 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
371 cc::TextureMailbox textureMailbox2;
372 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
373 cc::TextureMailbox textureMailbox3;
374 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
375 bool useSharedMemory = false;
361 376
362 m_drawingBuffer->markContentsChanged(); 377 m_drawingBuffer->markContentsChanged();
363 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0)); 378 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas eCallback1, useSharedMemory));
364 m_drawingBuffer->markContentsChanged(); 379 m_drawingBuffer->markContentsChanged();
365 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0)); 380 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas eCallback2, useSharedMemory));
366 m_drawingBuffer->markContentsChanged(); 381 m_drawingBuffer->markContentsChanged();
367 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0)); 382 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas eCallback3, useSharedMemory));
368 383
369 m_drawingBuffer->markContentsChanged(); 384 m_drawingBuffer->markContentsChanged();
370 m_drawingBuffer->mailboxReleased(mailbox1, true); 385 releaseCallback1->Run(gpu::SyncToken(), true /* lostResource */);
371 EXPECT_EQ(live, true); 386 EXPECT_EQ(live, true);
372 387
373 m_drawingBuffer->beginDestruction(); 388 m_drawingBuffer->beginDestruction();
374 EXPECT_EQ(live, true); 389 EXPECT_EQ(live, true);
375 390
376 m_drawingBuffer->markContentsChanged(); 391 m_drawingBuffer->markContentsChanged();
377 m_drawingBuffer->mailboxReleased(mailbox2, false); 392 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
378 EXPECT_EQ(live, true); 393 EXPECT_EQ(live, true);
379 394
380 DrawingBufferForTests* weakPtr = m_drawingBuffer.get(); 395 DrawingBufferForTests* rawPtr = m_drawingBuffer.get();
381 m_drawingBuffer.clear(); 396 m_drawingBuffer.clear();
382 EXPECT_EQ(live, true); 397 EXPECT_EQ(live, true);
383 398
384 weakPtr->markContentsChanged(); 399 rawPtr->markContentsChanged();
385 weakPtr->mailboxReleased(mailbox3, true); 400 releaseCallback3->Run(gpu::SyncToken(), true /* lostResource */);
386 EXPECT_EQ(live, false); 401 EXPECT_EQ(live, false);
387 } 402 }
388 403
389 class TextureMailboxWrapper {
390 public:
391 explicit TextureMailboxWrapper(const WebExternalTextureMailbox& mailbox)
392 : m_mailbox(mailbox)
393 { }
394
395 bool operator==(const TextureMailboxWrapper& other) const
396 {
397 return !memcmp(m_mailbox.name, other.m_mailbox.name, sizeof(m_mailbox.na me));
398 }
399
400 bool operator!=(const TextureMailboxWrapper& other) const
401 {
402 return !(*this == other);
403 }
404
405 private:
406 WebExternalTextureMailbox m_mailbox;
407 };
408
409 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept) 404 TEST_F(DrawingBufferTest, verifyOnlyOneRecycledMailboxMustBeKept)
410 { 405 {
411 WebExternalTextureMailbox mailbox1; 406 cc::TextureMailbox textureMailbox1;
412 WebExternalTextureMailbox mailbox2; 407 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
413 WebExternalTextureMailbox mailbox3; 408 cc::TextureMailbox textureMailbox2;
409 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
410 cc::TextureMailbox textureMailbox3;
411 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
412 bool useSharedMemory = false;
414 413
415 // Produce mailboxes. 414 // Produce mailboxes.
416 m_drawingBuffer->markContentsChanged(); 415 m_drawingBuffer->markContentsChanged();
417 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox1, 0)); 416 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas eCallback1, useSharedMemory));
418 m_drawingBuffer->markContentsChanged(); 417 m_drawingBuffer->markContentsChanged();
419 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox2, 0)); 418 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas eCallback2, useSharedMemory));
420 m_drawingBuffer->markContentsChanged(); 419 m_drawingBuffer->markContentsChanged();
421 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox3, 0)); 420 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas eCallback3, useSharedMemory));
422 421
423 // Release mailboxes by specific order; 1, 3, 2. 422 // Release mailboxes by specific order; 1, 3, 2.
424 m_drawingBuffer->markContentsChanged(); 423 m_drawingBuffer->markContentsChanged();
425 m_drawingBuffer->mailboxReleased(mailbox1, false); 424 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
426 m_drawingBuffer->markContentsChanged(); 425 m_drawingBuffer->markContentsChanged();
427 m_drawingBuffer->mailboxReleased(mailbox3, false); 426 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
428 m_drawingBuffer->markContentsChanged(); 427 m_drawingBuffer->markContentsChanged();
429 m_drawingBuffer->mailboxReleased(mailbox2, false); 428 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
430 429
431 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order because 430 // The first recycled mailbox must be 2. 1 and 3 were deleted by FIFO order because
432 // DrawingBuffer never keeps more than one mailbox. 431 // DrawingBuffer never keeps more than one mailbox.
433 WebExternalTextureMailbox recycledMailbox1; 432 cc::TextureMailbox recycledTextureMailbox1;
433 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback1;
434 m_drawingBuffer->markContentsChanged(); 434 m_drawingBuffer->markContentsChanged();
435 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox1, 0)); 435 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox1, &recycledReleaseCallback1, useSharedMemory));
436 EXPECT_EQ(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMai lbox1)); 436 EXPECT_EQ(textureMailbox2.mailbox(), recycledTextureMailbox1.mailbox());
437 437
438 // The second recycled mailbox must be a new mailbox. 438 // The second recycled mailbox must be a new mailbox.
439 WebExternalTextureMailbox recycledMailbox2; 439 cc::TextureMailbox recycledTextureMailbox2;
440 std::unique_ptr<cc::SingleReleaseCallback> recycledReleaseCallback2;
440 m_drawingBuffer->markContentsChanged(); 441 m_drawingBuffer->markContentsChanged();
441 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox2, 0)); 442 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&recycledTextureMailbox2, &recycledReleaseCallback2, useSharedMemory));
442 EXPECT_NE(TextureMailboxWrapper(mailbox1), TextureMailboxWrapper(recycledMai lbox2)); 443 EXPECT_NE(textureMailbox1.mailbox(), recycledTextureMailbox2.mailbox());
443 EXPECT_NE(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMai lbox2)); 444 EXPECT_NE(textureMailbox2.mailbox(), recycledTextureMailbox2.mailbox());
444 EXPECT_NE(TextureMailboxWrapper(mailbox3), TextureMailboxWrapper(recycledMai lbox2)); 445 EXPECT_NE(textureMailbox3.mailbox(), recycledTextureMailbox2.mailbox());
445 446
446 m_drawingBuffer->mailboxReleased(recycledMailbox1, false); 447 recycledReleaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
447 m_drawingBuffer->mailboxReleased(recycledMailbox2, false); 448 recycledReleaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
448 m_drawingBuffer->beginDestruction(); 449 m_drawingBuffer->beginDestruction();
449 } 450 }
450 451
451 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly) 452 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly)
452 { 453 {
453 WebExternalTextureMailbox mailbox; 454 cc::TextureMailbox textureMailbox;
455 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
456 bool useSharedMemory = false;
454 457
455 // Produce mailboxes. 458 // Produce mailboxes.
456 m_drawingBuffer->markContentsChanged(); 459 m_drawingBuffer->markContentsChanged();
457 EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken()); 460 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
458 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 461 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
459 // prepareMailbox() does not wait for any sync point. 462 // PrepareTextureMailbox() does not wait for any sync point.
460 EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken()); 463 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
461 464
462 GLuint64 waitSyncToken = 0; 465 gpu::SyncToken waitSyncToken;
463 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), reinterpret_cast <GLbyte*>(&waitSyncToken)); 466 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge tData());
464 memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken)); 467 releaseCallback->Run(waitSyncToken, false /* lostResource */);
465 mailbox.validSyncToken = true;
466 m_drawingBuffer->mailboxReleased(mailbox, false);
467 // m_drawingBuffer will wait for the sync point when recycling. 468 // m_drawingBuffer will wait for the sync point when recycling.
468 EXPECT_EQ(0u, m_gl->mostRecentlyWaitedSyncToken()); 469 EXPECT_EQ(gpu::SyncToken(), m_gl->mostRecentlyWaitedSyncToken());
469 470
470 m_drawingBuffer->markContentsChanged(); 471 m_drawingBuffer->markContentsChanged();
471 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 472 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
472 // m_drawingBuffer waits for the sync point when recycling in prepareMailbox (). 473 // m_drawingBuffer waits for the sync point when recycling in PrepareTexture Mailbox().
473 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); 474 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
474 475
475 m_drawingBuffer->beginDestruction(); 476 m_drawingBuffer->beginDestruction();
476 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), reinterpret_cast <GLbyte*>(&waitSyncToken)); 477 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge tData());
477 memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken)); 478 releaseCallback->Run(waitSyncToken, false /* lostResource */);
478 mailbox.validSyncToken = true;
479 m_drawingBuffer->mailboxReleased(mailbox, false);
480 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress. 479 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress.
481 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); 480 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
482 } 481 }
483 482
484 class DrawingBufferImageChromiumTest : public DrawingBufferTest { 483 class DrawingBufferImageChromiumTest : public DrawingBufferTest {
485 protected: 484 protected:
486 void SetUp() override 485 void SetUp() override
487 { 486 {
488 std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2Interfa ceForTests); 487 std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2Interfa ceForTests);
489 m_gl = gl.get(); 488 m_gl = gl.get();
(...skipping 10 matching lines...) Expand all
500 void TearDown() override 499 void TearDown() override
501 { 500 {
502 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false); 501 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(false);
503 } 502 }
504 503
505 GLuint m_imageId0; 504 GLuint m_imageId0;
506 }; 505 };
507 506
508 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages) 507 TEST_F(DrawingBufferImageChromiumTest, verifyResizingReallocatesImages)
509 { 508 {
510 WebExternalTextureMailbox mailbox; 509 cc::TextureMailbox textureMailbox;
510 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
511 bool useSharedMemory = false;
511 512
512 IntSize initialSize(initialWidth, initialHeight); 513 IntSize initialSize(initialWidth, initialHeight);
513 IntSize alternateSize(initialWidth, alternateHeight); 514 IntSize alternateSize(initialWidth, alternateHeight);
514 515
515 GLuint m_imageId1 = m_gl->nextImageIdToBeCreated(); 516 GLuint m_imageId1 = m_gl->nextImageIdToBeCreated();
516 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId1)).Times(1); 517 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId1)).Times(1);
517 // Produce one mailbox at size 100x100. 518 // Produce one mailbox at size 100x100.
518 m_drawingBuffer->markContentsChanged(); 519 m_drawingBuffer->markContentsChanged();
519 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 520 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
520 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 521 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
521 EXPECT_TRUE(mailbox.allowOverlay); 522 EXPECT_TRUE(textureMailbox.is_overlay_candidate());
522 testing::Mock::VerifyAndClearExpectations(m_gl); 523 testing::Mock::VerifyAndClearExpectations(m_gl);
523 524
524 GLuint m_imageId2 = m_gl->nextImageIdToBeCreated(); 525 GLuint m_imageId2 = m_gl->nextImageIdToBeCreated();
525 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId2)).Times(1); 526 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId2)).Times(1);
526 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId0)).Times(1); 527 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId0)).Times(1);
527 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId0)).Times(1); 528 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId0)).Times(1);
528 // Resize to 100x50. 529 // Resize to 100x50.
529 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight)); 530 m_drawingBuffer->reset(IntSize(initialWidth, alternateHeight));
530 m_drawingBuffer->mailboxReleased(mailbox, false); 531 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
531 testing::Mock::VerifyAndClearExpectations(m_gl); 532 testing::Mock::VerifyAndClearExpectations(m_gl);
532 533
533 GLuint m_imageId3 = m_gl->nextImageIdToBeCreated(); 534 GLuint m_imageId3 = m_gl->nextImageIdToBeCreated();
534 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId3)).Times(1); 535 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId3)).Times(1);
535 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId1)).Times(1); 536 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId1)).Times(1);
536 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId1)).Times(1); 537 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId1)).Times(1);
537 // Produce a mailbox at this size. 538 // Produce a mailbox at this size.
538 m_drawingBuffer->markContentsChanged(); 539 m_drawingBuffer->markContentsChanged();
539 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 540 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
540 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize()); 541 EXPECT_EQ(alternateSize, m_gl->mostRecentlyProducedSize());
541 EXPECT_TRUE(mailbox.allowOverlay); 542 EXPECT_TRUE(textureMailbox.is_overlay_candidate());
542 testing::Mock::VerifyAndClearExpectations(m_gl); 543 testing::Mock::VerifyAndClearExpectations(m_gl);
543 544
544 GLuint m_imageId4 = m_gl->nextImageIdToBeCreated(); 545 GLuint m_imageId4 = m_gl->nextImageIdToBeCreated();
545 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId4)).Times(1); 546 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId4)).Times(1);
546 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId2)).Times(1); 547 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId2)).Times(1);
547 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId2)).Times(1); 548 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId2)).Times(1);
548 // Reset to initial size. 549 // Reset to initial size.
549 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight)); 550 m_drawingBuffer->reset(IntSize(initialWidth, initialHeight));
550 m_drawingBuffer->mailboxReleased(mailbox, false); 551 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
551 testing::Mock::VerifyAndClearExpectations(m_gl); 552 testing::Mock::VerifyAndClearExpectations(m_gl);
552 553
553 GLuint m_imageId5 = m_gl->nextImageIdToBeCreated(); 554 GLuint m_imageId5 = m_gl->nextImageIdToBeCreated();
554 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId5)).Times(1); 555 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId5)).Times(1);
555 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId3)).Times(1); 556 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId3)).Times(1);
556 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId3)).Times(1); 557 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId3)).Times(1);
557 // Prepare another mailbox and verify that it's the correct size. 558 // Prepare another mailbox and verify that it's the correct size.
558 m_drawingBuffer->markContentsChanged(); 559 m_drawingBuffer->markContentsChanged();
559 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 560 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
560 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 561 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
561 EXPECT_TRUE(mailbox.allowOverlay); 562 EXPECT_TRUE(textureMailbox.is_overlay_candidate());
562 testing::Mock::VerifyAndClearExpectations(m_gl); 563 testing::Mock::VerifyAndClearExpectations(m_gl);
563 564
564 // Prepare one final mailbox and verify that it's the correct size. 565 // Prepare one final mailbox and verify that it's the correct size.
565 m_drawingBuffer->mailboxReleased(mailbox, false); 566 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
566 m_drawingBuffer->markContentsChanged(); 567 m_drawingBuffer->markContentsChanged();
567 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 568 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
568 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize()); 569 EXPECT_EQ(initialSize, m_gl->mostRecentlyProducedSize());
569 EXPECT_TRUE(mailbox.allowOverlay); 570 EXPECT_TRUE(textureMailbox.is_overlay_candidate());
570 m_drawingBuffer->mailboxReleased(mailbox, false); 571 releaseCallback->Run(gpu::SyncToken(), false /* lostResource */);
571 572
572 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId5)).Times(1); 573 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId5)).Times(1);
573 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId5)).Times(1); 574 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId5)).Times(1);
574 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId4)).Times(1); 575 EXPECT_CALL(*m_gl, DestroyImageMock(m_imageId4)).Times(1);
575 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId4)).Times(1); 576 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(m_imageId4)).Times(1);
576 m_drawingBuffer->beginDestruction(); 577 m_drawingBuffer->beginDestruction();
577 testing::Mock::VerifyAndClearExpectations(m_gl); 578 testing::Mock::VerifyAndClearExpectations(m_gl);
578 } 579 }
579 580
580 TEST_F(DrawingBufferImageChromiumTest, allocationFailure) 581 TEST_F(DrawingBufferImageChromiumTest, allocationFailure)
581 { 582 {
582 WebExternalTextureMailbox mailboxes[3]; 583 cc::TextureMailbox textureMailbox1;
584 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback1;
585 cc::TextureMailbox textureMailbox2;
586 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback2;
587 cc::TextureMailbox textureMailbox3;
588 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback3;
589 bool useSharedMemory = false;
583 590
584 // Request a mailbox. An image should already be created. Everything works 591 // Request a mailbox. An image should already be created. Everything works
585 // as expected. 592 // as expected.
586 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); 593 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1);
587 IntSize initialSize(initialWidth, initialHeight); 594 IntSize initialSize(initialWidth, initialHeight);
588 m_drawingBuffer->markContentsChanged(); 595 m_drawingBuffer->markContentsChanged();
589 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[0], 0)); 596 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox1, &releas eCallback1, useSharedMemory));
590 EXPECT_TRUE(mailboxes[0].allowOverlay); 597 EXPECT_TRUE(textureMailbox1.is_overlay_candidate());
591 testing::Mock::VerifyAndClearExpectations(m_gl); 598 testing::Mock::VerifyAndClearExpectations(m_gl);
592 599
593 // Force image CHROMIUM creation failure. Request another mailbox. It should 600 // Force image CHROMIUM creation failure. Request another mailbox. It should
594 // still be provided, but this time with allowOverlay = false. 601 // still be provided, but this time with allowOverlay = false.
595 m_gl->setCreateImageChromiumFail(true); 602 m_gl->setCreateImageChromiumFail(true);
596 m_drawingBuffer->markContentsChanged(); 603 m_drawingBuffer->markContentsChanged();
597 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[1], 0)); 604 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox2, &releas eCallback2, useSharedMemory));
598 EXPECT_FALSE(mailboxes[1].allowOverlay); 605 EXPECT_FALSE(textureMailbox2.is_overlay_candidate());
599 606
600 // Check that if image CHROMIUM starts working again, mailboxes are 607 // Check that if image CHROMIUM starts working again, mailboxes are
601 // correctly created with allowOverlay = true. 608 // correctly created with allowOverlay = true.
602 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1); 609 EXPECT_CALL(*m_gl, BindTexImage2DMock(_)).Times(1);
603 m_gl->setCreateImageChromiumFail(false); 610 m_gl->setCreateImageChromiumFail(false);
604 m_drawingBuffer->markContentsChanged(); 611 m_drawingBuffer->markContentsChanged();
605 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailboxes[2], 0)); 612 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox3, &releas eCallback3, useSharedMemory));
606 EXPECT_TRUE(mailboxes[2].allowOverlay); 613 EXPECT_TRUE(textureMailbox3.is_overlay_candidate());
607 testing::Mock::VerifyAndClearExpectations(m_gl); 614 testing::Mock::VerifyAndClearExpectations(m_gl);
608 615
609 for (int i = 0; i < 3; ++i) 616 releaseCallback1->Run(gpu::SyncToken(), false /* lostResource */);
610 m_drawingBuffer->mailboxReleased(mailboxes[i], false); 617 releaseCallback2->Run(gpu::SyncToken(), false /* lostResource */);
618 releaseCallback3->Run(gpu::SyncToken(), false /* lostResource */);
611 619
612 EXPECT_CALL(*m_gl, DestroyImageMock(_)).Times(3); 620 EXPECT_CALL(*m_gl, DestroyImageMock(_)).Times(3);
613 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(_)).Times(3); 621 EXPECT_CALL(*m_gl, ReleaseTexImage2DMock(_)).Times(3);
614 m_drawingBuffer->beginDestruction(); 622 m_drawingBuffer->beginDestruction();
615 testing::Mock::VerifyAndClearExpectations(m_gl); 623 testing::Mock::VerifyAndClearExpectations(m_gl);
616 } 624 }
617 625
618 class DepthStencilTrackingGLES2Interface : public gpu::gles2::GLES2InterfaceStub { 626 class DepthStencilTrackingGLES2Interface : public gpu::gles2::GLES2InterfaceStub {
619 public: 627 public:
620 void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, GLuint renderbuffer) override 628 void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum render buffertarget, GLuint renderbuffer) override
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 EXPECT_EQ(0u, trackingGL->depthAttachment()); 759 EXPECT_EQ(0u, trackingGL->depthAttachment());
752 EXPECT_EQ(0u, trackingGL->stencilAttachment()); 760 EXPECT_EQ(0u, trackingGL->stencilAttachment());
753 } 761 }
754 762
755 drawingBuffer->beginDestruction(); 763 drawingBuffer->beginDestruction();
756 } 764 }
757 } 765 }
758 766
759 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) 767 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes)
760 { 768 {
761 blink::WebExternalTextureMailbox mailbox; 769 cc::TextureMailbox textureMailbox;
770 std::unique_ptr<cc::SingleReleaseCallback> releaseCallback;
771 bool useSharedMemory = false;
762 772
763 // Produce mailboxes. 773 // Produce mailboxes.
764 m_drawingBuffer->markContentsChanged(); 774 m_drawingBuffer->markContentsChanged();
765 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 775 EXPECT_TRUE(m_drawingBuffer->PrepareTextureMailbox(&textureMailbox, &release Callback, useSharedMemory));
766 776
767 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), mailbox.syncToke n); 777 gpu::SyncToken waitSyncToken;
768 mailbox.validSyncToken = true; 778 m_gl->GenSyncTokenCHROMIUM(m_gl->InsertFenceSyncCHROMIUM(), waitSyncToken.Ge tData());
769 m_drawingBuffer->setIsHidden(true); 779 m_drawingBuffer->setIsHidden(true);
770 m_drawingBuffer->mailboxReleased(mailbox); 780 releaseCallback->Run(waitSyncToken, false /* lostResource */);
771 // m_drawingBuffer deletes mailbox immediately when hidden. 781 // m_drawingBuffer deletes mailbox immediately when hidden.
772 782
773 GLuint waitSyncToken = 0;
774 memcpy(&waitSyncToken, mailbox.syncToken, sizeof(waitSyncToken));
775 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); 783 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
776 784
777 m_drawingBuffer->beginDestruction(); 785 m_drawingBuffer->beginDestruction();
778 } 786 }
779 787
780 } // namespace blink 788 } // namespace blink
OLDNEW
« 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