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

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

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 24 matching lines...) Expand all
35 #include "platform/RuntimeEnabledFeatures.h" 35 #include "platform/RuntimeEnabledFeatures.h"
36 #include "platform/graphics/ImageBuffer.h" 36 #include "platform/graphics/ImageBuffer.h"
37 #include "platform/graphics/UnacceleratedImageBufferSurface.h" 37 #include "platform/graphics/UnacceleratedImageBufferSurface.h"
38 #include "platform/graphics/gpu/Extensions3DUtil.h" 38 #include "platform/graphics/gpu/Extensions3DUtil.h"
39 #include "public/platform/Platform.h" 39 #include "public/platform/Platform.h"
40 #include "public/platform/WebExternalTextureMailbox.h" 40 #include "public/platform/WebExternalTextureMailbox.h"
41 #include "public/platform/WebGraphicsContext3DProvider.h" 41 #include "public/platform/WebGraphicsContext3DProvider.h"
42 #include "public/platform/functional/WebFunction.h" 42 #include "public/platform/functional/WebFunction.h"
43 #include "testing/gmock/include/gmock/gmock.h" 43 #include "testing/gmock/include/gmock/gmock.h"
44 #include "testing/gtest/include/gtest/gtest.h" 44 #include "testing/gtest/include/gtest/gtest.h"
45 #include "wtf/PtrUtil.h"
46 #include "wtf/RefPtr.h" 45 #include "wtf/RefPtr.h"
47 #include <memory>
48 46
49 using testing::Test; 47 using testing::Test;
50 using testing::_; 48 using testing::_;
51 49
52 namespace blink { 50 namespace blink {
53 51
54 namespace { 52 namespace {
55 53
56 // The target to use when binding a texture to a Chromium image. 54 // The target to use when binding a texture to a Chromium image.
57 GLenum imageCHROMIUMTextureTarget() 55 GLenum imageCHROMIUMTextureTarget()
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 HashMap<GLuint, IntSize> m_imageSizes; 208 HashMap<GLuint, IntSize> m_imageSizes;
211 HashMap<GLuint, GLuint> m_imageToTextureMap; 209 HashMap<GLuint, GLuint> m_imageToTextureMap;
212 }; 210 };
213 211
214 static const int initialWidth = 100; 212 static const int initialWidth = 100;
215 static const int initialHeight = 100; 213 static const int initialHeight = 100;
216 static const int alternateHeight = 50; 214 static const int alternateHeight = 50;
217 215
218 class DrawingBufferForTests : public DrawingBuffer { 216 class DrawingBufferForTests : public DrawingBuffer {
219 public: 217 public:
220 static PassRefPtr<DrawingBufferForTests> create(std::unique_ptr<WebGraphicsC ontext3DProvider> contextProvider, const IntSize& size, PreserveDrawingBuffer pr eserve) 218 static PassRefPtr<DrawingBufferForTests> create(PassOwnPtr<WebGraphicsContex t3DProvider> contextProvider, const IntSize& size, PreserveDrawingBuffer preserv e)
221 { 219 {
222 std::unique_ptr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::cre ate(contextProvider->contextGL()); 220 OwnPtr<Extensions3DUtil> extensionsUtil = Extensions3DUtil::create(conte xtProvider->contextGL());
223 RefPtr<DrawingBufferForTests> drawingBuffer = adoptRef(new DrawingBuffer ForTests(std::move(contextProvider), std::move(extensionsUtil), preserve)); 221 RefPtr<DrawingBufferForTests> drawingBuffer = adoptRef(new DrawingBuffer ForTests(std::move(contextProvider), std::move(extensionsUtil), preserve));
224 bool multisampleExtensionSupported = false; 222 bool multisampleExtensionSupported = false;
225 if (!drawingBuffer->initialize(size, multisampleExtensionSupported)) { 223 if (!drawingBuffer->initialize(size, multisampleExtensionSupported)) {
226 drawingBuffer->beginDestruction(); 224 drawingBuffer->beginDestruction();
227 return nullptr; 225 return nullptr;
228 } 226 }
229 return drawingBuffer.release(); 227 return drawingBuffer.release();
230 } 228 }
231 229
232 DrawingBufferForTests(std::unique_ptr<WebGraphicsContext3DProvider> contextP rovider, std::unique_ptr<Extensions3DUtil> extensionsUtil, PreserveDrawingBuffer preserve) 230 DrawingBufferForTests(PassOwnPtr<WebGraphicsContext3DProvider> contextProvid er, PassOwnPtr<Extensions3DUtil> extensionsUtil, PreserveDrawingBuffer preserve)
233 : DrawingBuffer(std::move(contextProvider), std::move(extensionsUtil), f alse /* discardFramebufferSupported */, true /* wantAlphaChannel */, false /* pr emultipliedAlpha */, preserve, false /* wantDepth */, false /* wantStencil */) 231 : DrawingBuffer(std::move(contextProvider), std::move(extensionsUtil), f alse /* discardFramebufferSupported */, true /* wantAlphaChannel */, false /* pr emultipliedAlpha */, preserve, false /* wantDepth */, false /* wantStencil */)
234 , m_live(0) 232 , m_live(0)
235 { } 233 { }
236 234
237 ~DrawingBufferForTests() override 235 ~DrawingBufferForTests() override
238 { 236 {
239 if (m_live) 237 if (m_live)
240 *m_live = false; 238 *m_live = false;
241 } 239 }
242 240
243 bool* m_live; 241 bool* m_live;
244 }; 242 };
245 243
246 class WebGraphicsContext3DProviderForTests : public WebGraphicsContext3DProvider { 244 class WebGraphicsContext3DProviderForTests : public WebGraphicsContext3DProvider {
247 public: 245 public:
248 WebGraphicsContext3DProviderForTests(std::unique_ptr<gpu::gles2::GLES2Interf ace> gl) 246 WebGraphicsContext3DProviderForTests(PassOwnPtr<gpu::gles2::GLES2Interface> gl)
249 : m_gl(std::move(gl)) 247 : m_gl(std::move(gl))
250 { 248 {
251 } 249 }
252 250
253 gpu::gles2::GLES2Interface* contextGL() override { return m_gl.get(); } 251 gpu::gles2::GLES2Interface* contextGL() override { return m_gl.get(); }
254 // Not used by WebGL code. 252 // Not used by WebGL code.
255 GrContext* grContext() override { return nullptr; } 253 GrContext* grContext() override { return nullptr; }
256 bool bindToCurrentThread() override { return false; } 254 bool bindToCurrentThread() override { return false; }
257 gpu::Capabilities getCapabilities() 255 gpu::Capabilities getCapabilities()
258 { 256 {
259 return gpu::Capabilities(); 257 return gpu::Capabilities();
260 } 258 }
261 void setLostContextCallback(WebClosure) {} 259 void setLostContextCallback(WebClosure) {}
262 void setErrorMessageCallback(WebFunction<void(const char*, int32_t id)>) {} 260 void setErrorMessageCallback(WebFunction<void(const char*, int32_t id)>) {}
263 261
264 private: 262 private:
265 std::unique_ptr<gpu::gles2::GLES2Interface> m_gl; 263 OwnPtr<gpu::gles2::GLES2Interface> m_gl;
266 }; 264 };
267 265
268 class DrawingBufferTest : public Test { 266 class DrawingBufferTest : public Test {
269 protected: 267 protected:
270 void SetUp() override 268 void SetUp() override
271 { 269 {
272 std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2Interfa ceForTests); 270 OwnPtr<GLES2InterfaceForTests> gl = adoptPtr(new GLES2InterfaceForTests) ;
273 m_gl = gl.get(); 271 m_gl = gl.get();
274 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUni que(new WebGraphicsContext3DProviderForTests(std::move(gl))); 272 OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new Web GraphicsContext3DProviderForTests(std::move(gl)));
275 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);
276 CHECK(m_drawingBuffer); 274 CHECK(m_drawingBuffer);
277 } 275 }
278 276
279 GLES2InterfaceForTests* m_gl; 277 GLES2InterfaceForTests* m_gl;
280 RefPtr<DrawingBufferForTests> m_drawingBuffer; 278 RefPtr<DrawingBufferForTests> m_drawingBuffer;
281 }; 279 };
282 280
283 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes) 281 TEST_F(DrawingBufferTest, verifyResizingProperlyAffectsMailboxes)
284 { 282 {
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 mailbox.validSyncToken = true; 482 mailbox.validSyncToken = true;
485 m_drawingBuffer->mailboxReleased(mailbox, false); 483 m_drawingBuffer->mailboxReleased(mailbox, false);
486 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress. 484 // m_drawingBuffer waits for the sync point because the destruction is in pr ogress.
487 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); 485 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
488 } 486 }
489 487
490 class DrawingBufferImageChromiumTest : public DrawingBufferTest { 488 class DrawingBufferImageChromiumTest : public DrawingBufferTest {
491 protected: 489 protected:
492 void SetUp() override 490 void SetUp() override
493 { 491 {
494 std::unique_ptr<GLES2InterfaceForTests> gl = wrapUnique(new GLES2Interfa ceForTests); 492 OwnPtr<GLES2InterfaceForTests> gl = adoptPtr(new GLES2InterfaceForTests) ;
495 m_gl = gl.get(); 493 m_gl = gl.get();
496 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUni que(new WebGraphicsContext3DProviderForTests(std::move(gl))); 494 OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new Web GraphicsContext3DProviderForTests(std::move(gl)));
497 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true); 495 RuntimeEnabledFeatures::setWebGLImageChromiumEnabled(true);
498 m_imageId0 = m_gl->nextImageIdToBeCreated(); 496 m_imageId0 = m_gl->nextImageIdToBeCreated();
499 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId0)).Times(1); 497 EXPECT_CALL(*m_gl, BindTexImage2DMock(m_imageId0)).Times(1);
500 m_drawingBuffer = DrawingBufferForTests::create(std::move(provider), 498 m_drawingBuffer = DrawingBufferForTests::create(std::move(provider),
501 IntSize(initialWidth, initialHeight), DrawingBuffer::Preserve); 499 IntSize(initialWidth, initialHeight), DrawingBuffer::Preserve);
502 CHECK(m_drawingBuffer); 500 CHECK(m_drawingBuffer);
503 testing::Mock::VerifyAndClearExpectations(m_gl); 501 testing::Mock::VerifyAndClearExpectations(m_gl);
504 } 502 }
505 503
506 void TearDown() override 504 void TearDown() override
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 { 700 {
703 DepthStencilTestCase cases[] = { 701 DepthStencilTestCase cases[] = {
704 DepthStencilTestCase(false, false, 0, "neither"), 702 DepthStencilTestCase(false, false, 0, "neither"),
705 DepthStencilTestCase(true, false, 1, "stencil only"), 703 DepthStencilTestCase(true, false, 1, "stencil only"),
706 DepthStencilTestCase(false, true, 1, "depth only"), 704 DepthStencilTestCase(false, true, 1, "depth only"),
707 DepthStencilTestCase(true, true, 1, "both"), 705 DepthStencilTestCase(true, true, 1, "both"),
708 }; 706 };
709 707
710 for (size_t i = 0; i < WTF_ARRAY_LENGTH(cases); i++) { 708 for (size_t i = 0; i < WTF_ARRAY_LENGTH(cases); i++) {
711 SCOPED_TRACE(cases[i].testCaseName); 709 SCOPED_TRACE(cases[i].testCaseName);
712 std::unique_ptr<DepthStencilTrackingGLES2Interface> gl = wrapUnique(new DepthStencilTrackingGLES2Interface); 710 OwnPtr<DepthStencilTrackingGLES2Interface> gl = adoptPtr(new DepthStenci lTrackingGLES2Interface);
713 DepthStencilTrackingGLES2Interface* trackingGL = gl.get(); 711 DepthStencilTrackingGLES2Interface* trackingGL = gl.get();
714 std::unique_ptr<WebGraphicsContext3DProviderForTests> provider = wrapUni que(new WebGraphicsContext3DProviderForTests(std::move(gl))); 712 OwnPtr<WebGraphicsContext3DProviderForTests> provider = adoptPtr(new Web GraphicsContext3DProviderForTests(std::move(gl)));
715 DrawingBuffer::PreserveDrawingBuffer preserve = DrawingBuffer::Preserve; 713 DrawingBuffer::PreserveDrawingBuffer preserve = DrawingBuffer::Preserve;
716 714
717 bool premultipliedAlpha = false; 715 bool premultipliedAlpha = false;
718 bool wantAlphaChannel = true; 716 bool wantAlphaChannel = true;
719 bool wantDepthBuffer = cases[i].requestDepth; 717 bool wantDepthBuffer = cases[i].requestDepth;
720 bool wantStencilBuffer = cases[i].requestStencil; 718 bool wantStencilBuffer = cases[i].requestStencil;
721 bool wantAntialiasing = false; 719 bool wantAntialiasing = false;
722 RefPtr<DrawingBuffer> drawingBuffer = DrawingBuffer::create( 720 RefPtr<DrawingBuffer> drawingBuffer = DrawingBuffer::create(
723 std::move(provider), 721 std::move(provider),
724 IntSize(10, 10), 722 IntSize(10, 10),
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 // m_drawingBuffer deletes mailbox immediately when hidden. 774 // m_drawingBuffer deletes mailbox immediately when hidden.
777 775
778 GLuint waitSyncToken = 0; 776 GLuint waitSyncToken = 0;
779 memcpy(&waitSyncToken, mailbox.syncToken, sizeof(waitSyncToken)); 777 memcpy(&waitSyncToken, mailbox.syncToken, sizeof(waitSyncToken));
780 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken()); 778 EXPECT_EQ(waitSyncToken, m_gl->mostRecentlyWaitedSyncToken());
781 779
782 m_drawingBuffer->beginDestruction(); 780 m_drawingBuffer->beginDestruction();
783 } 781 }
784 782
785 } // namespace blink 783 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698