| OLD | NEW | 
|---|
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "config.h" | 5 #include "config.h" | 
| 6 #include "CCRendererGL.h" | 6 #include "CCRendererGL.h" | 
| 7 | 7 | 
| 8 #include "CCDrawQuad.h" | 8 #include "CCDrawQuad.h" | 
| 9 #include "CCPrioritizedTextureManager.h" | 9 #include "CCPrioritizedTextureManager.h" | 
| 10 #include "CCResourceProvider.h" | 10 #include "CCResourceProvider.h" | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 106     using CCRendererGL::isFramebufferDiscarded; | 106     using CCRendererGL::isFramebufferDiscarded; | 
| 107 }; | 107 }; | 
| 108 | 108 | 
| 109 class CCRendererGLTest : public testing::Test { | 109 class CCRendererGLTest : public testing::Test { | 
| 110 protected: | 110 protected: | 
| 111     CCRendererGLTest() | 111     CCRendererGLTest() | 
| 112         : m_suggestHaveBackbufferYes(1, true) | 112         : m_suggestHaveBackbufferYes(1, true) | 
| 113         , m_suggestHaveBackbufferNo(1, false) | 113         , m_suggestHaveBackbufferNo(1, false) | 
| 114         , m_compositorInitializer(0) | 114         , m_compositorInitializer(0) | 
| 115         , m_context(FakeWebCompositorOutputSurface::create(adoptPtr(new FrameCou
     ntingMemoryAllocationSettingContext()))) | 115         , m_context(FakeWebCompositorOutputSurface::create(adoptPtr(new FrameCou
     ntingMemoryAllocationSettingContext()))) | 
| 116         , m_resourceProvider(CCResourceProvider::create(m_context.get(), Unthrot
     tledUploader)) | 116         , m_resourceProvider(CCResourceProvider::create(m_context.get())) | 
| 117         , m_renderer(&m_mockClient, m_resourceProvider.get()) | 117         , m_renderer(&m_mockClient, m_resourceProvider.get()) | 
| 118     { | 118     { | 
| 119     } | 119     } | 
| 120 | 120 | 
| 121     virtual void SetUp() | 121     virtual void SetUp() | 
| 122     { | 122     { | 
| 123         m_renderer.initialize(); | 123         m_renderer.initialize(); | 
| 124     } | 124     } | 
| 125 | 125 | 
| 126     void swapBuffers() | 126     void swapBuffers() | 
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 291     virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname, WGC3Dint* v
     alue) { ADD_FAILURE(); } | 291     virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname, WGC3Dint* v
     alue) { ADD_FAILURE(); } | 
| 292     virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname
     ) { ADD_FAILURE(); return 0; } | 292     virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname
     ) { ADD_FAILURE(); return 0; } | 
| 293 }; | 293 }; | 
| 294 | 294 | 
| 295 // This test isn't using the same fixture as CCRendererGLTest, and you can't mix
      TEST() and TEST_F() with the same name, hence LRC2. | 295 // This test isn't using the same fixture as CCRendererGLTest, and you can't mix
      TEST() and TEST_F() with the same name, hence LRC2. | 
| 296 TEST(CCRendererGLTest2, initializationDoesNotMakeSynchronousCalls) | 296 TEST(CCRendererGLTest2, initializationDoesNotMakeSynchronousCalls) | 
| 297 { | 297 { | 
| 298     CCScopedSettings scopedSettings; | 298     CCScopedSettings scopedSettings; | 
| 299     FakeCCRendererClient mockClient; | 299     FakeCCRendererClient mockClient; | 
| 300     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new ForbidSynchronousCallContext))); | 300     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new ForbidSynchronousCallContext))); | 
| 301     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get(), UnthrottledUploader)); | 301     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get())); | 
| 302     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 302     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 
| 303 | 303 | 
| 304     EXPECT_TRUE(renderer.initialize()); | 304     EXPECT_TRUE(renderer.initialize()); | 
| 305 } | 305 } | 
| 306 | 306 | 
| 307 class LoseContextOnFirstGetContext : public FakeWebGraphicsContext3D { | 307 class LoseContextOnFirstGetContext : public FakeWebGraphicsContext3D { | 
| 308 public: | 308 public: | 
| 309     LoseContextOnFirstGetContext() | 309     LoseContextOnFirstGetContext() | 
| 310         : m_contextLost(false) | 310         : m_contextLost(false) | 
| 311     { | 311     { | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 335 | 335 | 
| 336 private: | 336 private: | 
| 337     bool m_contextLost; | 337     bool m_contextLost; | 
| 338 }; | 338 }; | 
| 339 | 339 | 
| 340 TEST(CCRendererGLTest2, initializationWithQuicklyLostContextDoesNotAssert) | 340 TEST(CCRendererGLTest2, initializationWithQuicklyLostContextDoesNotAssert) | 
| 341 { | 341 { | 
| 342     CCScopedSettings scopedSettings; | 342     CCScopedSettings scopedSettings; | 
| 343     FakeCCRendererClient mockClient; | 343     FakeCCRendererClient mockClient; | 
| 344     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new LoseContextOnFirstGetContext))); | 344     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new LoseContextOnFirstGetContext))); | 
| 345     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get(), UnthrottledUploader)); | 345     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get())); | 
| 346     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 346     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 
| 347 | 347 | 
| 348     renderer.initialize(); | 348     renderer.initialize(); | 
| 349 } | 349 } | 
| 350 | 350 | 
| 351 class ContextThatDoesNotSupportMemoryManagmentExtensions : public FakeWebGraphic
     sContext3D { | 351 class ContextThatDoesNotSupportMemoryManagmentExtensions : public FakeWebGraphic
     sContext3D { | 
| 352 public: | 352 public: | 
| 353     ContextThatDoesNotSupportMemoryManagmentExtensions() { } | 353     ContextThatDoesNotSupportMemoryManagmentExtensions() { } | 
| 354 | 354 | 
| 355     // WebGraphicsContext3D methods. | 355     // WebGraphicsContext3D methods. | 
| 356 | 356 | 
| 357     // This method would normally do a glSwapBuffers under the hood. | 357     // This method would normally do a glSwapBuffers under the hood. | 
| 358     virtual void prepareTexture() { } | 358     virtual void prepareTexture() { } | 
| 359     virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll
     ocationChangedCallbackCHROMIUM* callback) { } | 359     virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAll
     ocationChangedCallbackCHROMIUM* callback) { } | 
| 360     virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); } | 360     virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); } | 
| 361 }; | 361 }; | 
| 362 | 362 | 
| 363 TEST(CCRendererGLTest2, initializationWithoutGpuMemoryManagerExtensionSupportSho
     uldDefaultToNonZeroAllocation) | 363 TEST(CCRendererGLTest2, initializationWithoutGpuMemoryManagerExtensionSupportSho
     uldDefaultToNonZeroAllocation) | 
| 364 { | 364 { | 
| 365     FakeCCRendererClient mockClient; | 365     FakeCCRendererClient mockClient; | 
| 366     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new ContextThatDoesNotSupportMemoryManagmentExtensions))); | 366     OwnPtr<CCGraphicsContext> context(FakeWebCompositorOutputSurface::create(ado
     ptPtr(new ContextThatDoesNotSupportMemoryManagmentExtensions))); | 
| 367     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get(), UnthrottledUploader)); | 367     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(conte
     xt.get())); | 
| 368     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 368     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 
| 369 | 369 | 
| 370     renderer.initialize(); | 370     renderer.initialize(); | 
| 371 | 371 | 
| 372     EXPECT_GT(mockClient.memoryAllocationLimitBytes(), 0ul); | 372     EXPECT_GT(mockClient.memoryAllocationLimitBytes(), 0ul); | 
| 373 } | 373 } | 
| 374 | 374 | 
| 375 class ClearCountingContext : public FakeWebGraphicsContext3D { | 375 class ClearCountingContext : public FakeWebGraphicsContext3D { | 
| 376 public: | 376 public: | 
| 377     ClearCountingContext() : m_clear(0) { } | 377     ClearCountingContext() : m_clear(0) { } | 
| 378 | 378 | 
| 379     virtual void clear(WGC3Dbitfield) | 379     virtual void clear(WGC3Dbitfield) | 
| 380     { | 380     { | 
| 381         m_clear++; | 381         m_clear++; | 
| 382     } | 382     } | 
| 383 | 383 | 
| 384     int clearCount() const { return m_clear; } | 384     int clearCount() const { return m_clear; } | 
| 385 | 385 | 
| 386 private: | 386 private: | 
| 387     int m_clear; | 387     int m_clear; | 
| 388 }; | 388 }; | 
| 389 | 389 | 
| 390 TEST(CCRendererGLTest2, opaqueBackground) | 390 TEST(CCRendererGLTest2, opaqueBackground) | 
| 391 { | 391 { | 
| 392     FakeCCRendererClient mockClient; | 392     FakeCCRendererClient mockClient; | 
| 393     OwnPtr<CCGraphicsContext> ccContext(FakeWebCompositorOutputSurface::create(a
     doptPtr(new ClearCountingContext))); | 393     OwnPtr<CCGraphicsContext> ccContext(FakeWebCompositorOutputSurface::create(a
     doptPtr(new ClearCountingContext))); | 
| 394     ClearCountingContext* context = static_cast<ClearCountingContext*>(ccContext
     ->context3D()); | 394     ClearCountingContext* context = static_cast<ClearCountingContext*>(ccContext
     ->context3D()); | 
| 395     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(ccCon
     text.get(), UnthrottledUploader)); | 395     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(ccCon
     text.get())); | 
| 396     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 396     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 
| 397 | 397 | 
| 398     mockClient.rootRenderPass()->setHasTransparentBackground(false); | 398     mockClient.rootRenderPass()->setHasTransparentBackground(false); | 
| 399 | 399 | 
| 400     EXPECT_TRUE(renderer.initialize()); | 400     EXPECT_TRUE(renderer.initialize()); | 
| 401 | 401 | 
| 402     renderer.drawFrame(mockClient.renderPassesInDrawOrder(), mockClient.renderPa
     sses()); | 402     renderer.drawFrame(mockClient.renderPassesInDrawOrder(), mockClient.renderPa
     sses()); | 
| 403 | 403 | 
| 404     // On DEBUG builds, render passes with opaque background clear to blue to | 404     // On DEBUG builds, render passes with opaque background clear to blue to | 
| 405     // easily see regions that were not drawn on the screen. | 405     // easily see regions that were not drawn on the screen. | 
| 406 #if defined(NDEBUG) | 406 #if defined(NDEBUG) | 
| 407     EXPECT_EQ(0, context->clearCount()); | 407     EXPECT_EQ(0, context->clearCount()); | 
| 408 #else | 408 #else | 
| 409     EXPECT_EQ(1, context->clearCount()); | 409     EXPECT_EQ(1, context->clearCount()); | 
| 410 #endif | 410 #endif | 
| 411 } | 411 } | 
| 412 | 412 | 
| 413 TEST(CCRendererGLTest2, transparentBackground) | 413 TEST(CCRendererGLTest2, transparentBackground) | 
| 414 { | 414 { | 
| 415     FakeCCRendererClient mockClient; | 415     FakeCCRendererClient mockClient; | 
| 416     OwnPtr<CCGraphicsContext> ccContext(FakeWebCompositorOutputSurface::create(a
     doptPtr(new ClearCountingContext))); | 416     OwnPtr<CCGraphicsContext> ccContext(FakeWebCompositorOutputSurface::create(a
     doptPtr(new ClearCountingContext))); | 
| 417     ClearCountingContext* context = static_cast<ClearCountingContext*>(ccContext
     ->context3D()); | 417     ClearCountingContext* context = static_cast<ClearCountingContext*>(ccContext
     ->context3D()); | 
| 418     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(ccCon
     text.get(), UnthrottledUploader)); | 418     OwnPtr<CCResourceProvider> resourceProvider(CCResourceProvider::create(ccCon
     text.get())); | 
| 419     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 419     FakeCCRendererGL renderer(&mockClient, resourceProvider.get()); | 
| 420 | 420 | 
| 421     mockClient.rootRenderPass()->setHasTransparentBackground(true); | 421     mockClient.rootRenderPass()->setHasTransparentBackground(true); | 
| 422 | 422 | 
| 423     EXPECT_TRUE(renderer.initialize()); | 423     EXPECT_TRUE(renderer.initialize()); | 
| 424 | 424 | 
| 425     renderer.drawFrame(mockClient.renderPassesInDrawOrder(), mockClient.renderPa
     sses()); | 425     renderer.drawFrame(mockClient.renderPassesInDrawOrder(), mockClient.renderPa
     sses()); | 
| 426 | 426 | 
| 427     EXPECT_EQ(1, context->clearCount()); | 427     EXPECT_EQ(1, context->clearCount()); | 
| 428 } | 428 } | 
| OLD | NEW | 
|---|