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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |