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

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

Issue 1427543002: Modified old wait sync point functions to also accept new sync tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: format Created 5 years, 1 month 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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 using testing::_; 46 using testing::_;
47 47
48 namespace blink { 48 namespace blink {
49 49
50 class WebGraphicsContext3DForTests : public MockWebGraphicsContext3D { 50 class WebGraphicsContext3DForTests : public MockWebGraphicsContext3D {
51 public: 51 public:
52 WebGraphicsContext3DForTests() 52 WebGraphicsContext3DForTests()
53 : MockWebGraphicsContext3D() 53 : MockWebGraphicsContext3D()
54 , m_boundTexture(0) 54 , m_boundTexture(0)
55 , m_currentMailboxByte(0) 55 , m_currentMailboxByte(0)
56 , m_mostRecentlyWaitedSyncPoint(0) 56 , m_mostRecentlyWaitedSyncToken(0)
57 , m_currentImageId(1) { } 57 , m_currentImageId(1)
58 {
59 }
58 60
59 void bindTexture(WGC3Denum target, WebGLId texture) override 61 void bindTexture(WGC3Denum target, WebGLId texture) override
60 { 62 {
61 if (target == GL_TEXTURE_2D) { 63 if (target == GL_TEXTURE_2D) {
62 m_boundTexture = texture; 64 m_boundTexture = texture;
63 } 65 }
64 } 66 }
65 67
66 void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denu m type, const void* pixels) override 68 void texImage2D(WGC3Denum target, WGC3Dint level, WGC3Denum internalformat, WGC3Dsizei width, WGC3Dsizei height, WGC3Dint border, WGC3Denum format, WGC3Denu m type, const void* pixels) override
67 { 69 {
(...skipping 14 matching lines...) Expand all
82 ASSERT_EQ(target, static_cast<WGC3Denum>(GL_TEXTURE_2D)); 84 ASSERT_EQ(target, static_cast<WGC3Denum>(GL_TEXTURE_2D));
83 ASSERT_TRUE(m_textureSizes.contains(texture)); 85 ASSERT_TRUE(m_textureSizes.contains(texture));
84 m_mostRecentlyProducedSize = m_textureSizes.get(texture); 86 m_mostRecentlyProducedSize = m_textureSizes.get(texture);
85 } 87 }
86 88
87 IntSize mostRecentlyProducedSize() 89 IntSize mostRecentlyProducedSize()
88 { 90 {
89 return m_mostRecentlyProducedSize; 91 return m_mostRecentlyProducedSize;
90 } 92 }
91 93
92 unsigned insertSyncPoint() override 94 bool insertSyncPoint(WGC3Dbyte* syncToken) override
93 { 95 {
94 static unsigned syncPointGenerator = 0; 96 static WGC3Duint syncPointGenerator = 0;
95 return ++syncPointGenerator; 97 WGC3Duint newSyncPoint = ++syncPointGenerator;
98 memcpy(syncToken, &newSyncPoint, sizeof(newSyncPoint));
99 return true;
96 } 100 }
97 101
98 void waitSyncPoint(unsigned syncPoint) override 102 void waitSyncToken(const WGC3Dbyte* syncToken) override
99 { 103 {
100 m_mostRecentlyWaitedSyncPoint = syncPoint; 104 memcpy(&m_mostRecentlyWaitedSyncToken, syncToken, sizeof(m_mostRecentlyW aitedSyncToken));
101 } 105 }
102 106
103 WGC3Duint createGpuMemoryBufferImageCHROMIUM(WGC3Dsizei width, WGC3Dsizei he ight, WGC3Denum internalformat, WGC3Denum usage) override 107 WGC3Duint createGpuMemoryBufferImageCHROMIUM(WGC3Dsizei width, WGC3Dsizei he ight, WGC3Denum internalformat, WGC3Denum usage) override
104 { 108 {
105 m_imageSizes.set(m_currentImageId, IntSize(width, height)); 109 m_imageSizes.set(m_currentImageId, IntSize(width, height));
106 return m_currentImageId++; 110 return m_currentImageId++;
107 } 111 }
108 112
109 MOCK_METHOD1(destroyImageMock, void(WGC3Duint imageId)); 113 MOCK_METHOD1(destroyImageMock, void(WGC3Duint imageId));
110 void destroyImageCHROMIUM(WGC3Duint imageId) 114 void destroyImageCHROMIUM(WGC3Duint imageId)
(...skipping 18 matching lines...) Expand all
129 MOCK_METHOD1(releaseTexImage2DMock, void(WGC3Dint imageId)); 133 MOCK_METHOD1(releaseTexImage2DMock, void(WGC3Dint imageId));
130 void releaseTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint imageId) 134 void releaseTexImage2DCHROMIUM(WGC3Denum target, WGC3Dint imageId)
131 { 135 {
132 if (target == GL_TEXTURE_2D) { 136 if (target == GL_TEXTURE_2D) {
133 m_imageSizes.set(m_currentImageId, IntSize()); 137 m_imageSizes.set(m_currentImageId, IntSize());
134 m_imageToTextureMap.remove(imageId); 138 m_imageToTextureMap.remove(imageId);
135 releaseTexImage2DMock(imageId); 139 releaseTexImage2DMock(imageId);
136 } 140 }
137 } 141 }
138 142
139 unsigned mostRecentlyWaitedSyncPoint() 143 WGC3Duint mostRecentlyWaitedSyncToken()
140 { 144 {
141 return m_mostRecentlyWaitedSyncPoint; 145 return m_mostRecentlyWaitedSyncToken;
142 } 146 }
143 147
144 WGC3Duint nextImageIdToBeCreated() 148 WGC3Duint nextImageIdToBeCreated()
145 { 149 {
146 return m_currentImageId; 150 return m_currentImageId;
147 } 151 }
148 152
149 private: 153 private:
150 WebGLId m_boundTexture; 154 WebGLId m_boundTexture;
151 HashMap<WebGLId, IntSize> m_textureSizes; 155 HashMap<WebGLId, IntSize> m_textureSizes;
152 WGC3Dbyte m_currentMailboxByte; 156 WGC3Dbyte m_currentMailboxByte;
153 IntSize m_mostRecentlyProducedSize; 157 IntSize m_mostRecentlyProducedSize;
154 unsigned m_mostRecentlyWaitedSyncPoint; 158 WGC3Duint m_mostRecentlyWaitedSyncToken;
155 WGC3Duint m_currentImageId; 159 WGC3Duint m_currentImageId;
156 HashMap<WGC3Duint, IntSize> m_imageSizes; 160 HashMap<WGC3Duint, IntSize> m_imageSizes;
157 HashMap<WGC3Duint, WebGLId> m_imageToTextureMap; 161 HashMap<WGC3Duint, WebGLId> m_imageToTextureMap;
158 }; 162 };
159 163
160 static const int initialWidth = 100; 164 static const int initialWidth = 100;
161 static const int initialHeight = 100; 165 static const int initialHeight = 100;
162 static const int alternateHeight = 50; 166 static const int alternateHeight = 50;
163 167
164 class DrawingBufferForTests : public DrawingBuffer { 168 class DrawingBufferForTests : public DrawingBuffer {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox2, 0)); 398 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&recycledMailbox2, 0));
395 EXPECT_NE(TextureMailboxWrapper(mailbox1), TextureMailboxWrapper(recycledMai lbox2)); 399 EXPECT_NE(TextureMailboxWrapper(mailbox1), TextureMailboxWrapper(recycledMai lbox2));
396 EXPECT_NE(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMai lbox2)); 400 EXPECT_NE(TextureMailboxWrapper(mailbox2), TextureMailboxWrapper(recycledMai lbox2));
397 EXPECT_NE(TextureMailboxWrapper(mailbox3), TextureMailboxWrapper(recycledMai lbox2)); 401 EXPECT_NE(TextureMailboxWrapper(mailbox3), TextureMailboxWrapper(recycledMai lbox2));
398 402
399 m_drawingBuffer->mailboxReleased(recycledMailbox1, false); 403 m_drawingBuffer->mailboxReleased(recycledMailbox1, false);
400 m_drawingBuffer->mailboxReleased(recycledMailbox2, false); 404 m_drawingBuffer->mailboxReleased(recycledMailbox2, false);
401 m_drawingBuffer->beginDestruction(); 405 m_drawingBuffer->beginDestruction();
402 } 406 }
403 407
404 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncPointCorrectly) 408 TEST_F(DrawingBufferTest, verifyInsertAndWaitSyncTokenCorrectly)
405 { 409 {
406 WebExternalTextureMailbox mailbox; 410 WebExternalTextureMailbox mailbox;
407 411
408 // Produce mailboxes. 412 // Produce mailboxes.
409 m_drawingBuffer->markContentsChanged(); 413 m_drawingBuffer->markContentsChanged();
410 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncPoint()); 414 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncToken());
411 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 415 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
412 // prepareMailbox() does not wait for any sync point. 416 // prepareMailbox() does not wait for any sync point.
413 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncPoint()); 417 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncToken());
414 418
415 unsigned waitSyncPoint = webContext()->insertSyncPoint(); 419 WGC3Duint waitSyncToken = 0;
416 mailbox.syncPoint = waitSyncPoint; 420 webContext()->insertSyncPoint(reinterpret_cast<WGC3Dbyte*>(&waitSyncToken));
421 memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken));
422 mailbox.validSyncToken = true;
417 m_drawingBuffer->mailboxReleased(mailbox, false); 423 m_drawingBuffer->mailboxReleased(mailbox, false);
418 // m_drawingBuffer will wait for the sync point when recycling. 424 // m_drawingBuffer will wait for the sync point when recycling.
419 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncPoint()); 425 EXPECT_EQ(0u, webContext()->mostRecentlyWaitedSyncToken());
420 426
421 m_drawingBuffer->markContentsChanged(); 427 m_drawingBuffer->markContentsChanged();
422 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 428 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
423 // m_drawingBuffer waits for the sync point when recycling in prepareMailbox (). 429 // m_drawingBuffer waits for the sync point when recycling in prepareMailbox ().
424 EXPECT_EQ(waitSyncPoint, webContext()->mostRecentlyWaitedSyncPoint()); 430 EXPECT_EQ(waitSyncToken, webContext()->mostRecentlyWaitedSyncToken());
425 431
426 m_drawingBuffer->beginDestruction(); 432 m_drawingBuffer->beginDestruction();
427 waitSyncPoint = webContext()->insertSyncPoint(); 433 webContext()->insertSyncPoint(reinterpret_cast<WGC3Dbyte*>(&waitSyncToken));
428 mailbox.syncPoint = waitSyncPoint; 434 memcpy(mailbox.syncToken, &waitSyncToken, sizeof(waitSyncToken));
435 mailbox.validSyncToken = true;
429 m_drawingBuffer->mailboxReleased(mailbox, false); 436 m_drawingBuffer->mailboxReleased(mailbox, false);
430 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress. 437 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress.
431 EXPECT_EQ(waitSyncPoint, webContext()->mostRecentlyWaitedSyncPoint()); 438 EXPECT_EQ(waitSyncToken, webContext()->mostRecentlyWaitedSyncToken());
432 } 439 }
433 440
434 class DrawingBufferImageChromiumTest : public DrawingBufferTest { 441 class DrawingBufferImageChromiumTest : public DrawingBufferTest {
435 protected: 442 protected:
436 virtual void SetUp() 443 virtual void SetUp()
437 { 444 {
438 OwnPtr<WebGraphicsContext3DForTests> context = adoptPtr(new WebGraphicsC ontext3DForTests); 445 OwnPtr<WebGraphicsContext3DForTests> context = adoptPtr(new WebGraphicsC ontext3DForTests);
439 m_context = context.get(); 446 m_context = context.get();
440 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); 447 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true);
441 m_imageId0 = webContext()->nextImageIdToBeCreated(); 448 m_imageId0 = webContext()->nextImageIdToBeCreated();
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 } 654 }
648 655
649 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes) 656 TEST_F(DrawingBufferTest, verifySetIsHiddenProperlyAffectsMailboxes)
650 { 657 {
651 blink::WebExternalTextureMailbox mailbox; 658 blink::WebExternalTextureMailbox mailbox;
652 659
653 // Produce mailboxes. 660 // Produce mailboxes.
654 m_drawingBuffer->markContentsChanged(); 661 m_drawingBuffer->markContentsChanged();
655 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0)); 662 EXPECT_TRUE(m_drawingBuffer->prepareMailbox(&mailbox, 0));
656 663
657 unsigned waitSyncPoint = webContext()->insertSyncPoint(); 664 mailbox.validSyncToken = webContext()->insertSyncPoint(mailbox.syncToken);
658 mailbox.syncPoint = waitSyncPoint;
659 m_drawingBuffer->setIsHidden(true); 665 m_drawingBuffer->setIsHidden(true);
660 m_drawingBuffer->mailboxReleased(mailbox); 666 m_drawingBuffer->mailboxReleased(mailbox);
661 // m_drawingBuffer deletes mailbox immediately when hidden. 667 // m_drawingBuffer deletes mailbox immediately when hidden.
662 EXPECT_EQ(waitSyncPoint, webContext()->mostRecentlyWaitedSyncPoint()); 668
669 WGC3Duint waitSyncToken = 0;
670 memcpy(&waitSyncToken, mailbox.syncToken, sizeof(waitSyncToken));
671 EXPECT_EQ(waitSyncToken, webContext()->mostRecentlyWaitedSyncToken());
663 672
664 m_drawingBuffer->beginDestruction(); 673 m_drawingBuffer->beginDestruction();
665 } 674 }
666 675
667 } // namespace blink 676 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698