Chromium Code Reviews| Index: cc/output/gl_renderer_unittest.cc |
| diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc |
| index bb36a086a5d084ec21f16f9efeb86e99dff1abba..19dab017d3ff0fc4c45bd1fa5b6808ca0dcb7368 100644 |
| --- a/cc/output/gl_renderer_unittest.cc |
| +++ b/cc/output/gl_renderer_unittest.cc |
| @@ -33,10 +33,10 @@ using testing::StrictMock; |
| namespace cc { |
| -#define EXPECT_PROGRAM_VALID(program_binding) \ |
| - do { \ |
| - EXPECT_TRUE(program_binding->program()); \ |
| - EXPECT_TRUE(program_binding->initialized()); \ |
| +#define EXPECT_PROGRAM_VALID(program_binding) \ |
| + do { \ |
| + EXPECT_TRUE(program_binding->program()); \ |
| + EXPECT_TRUE(program_binding->initialized()); \ |
| } while (false) |
| // Explicitly named to be a friend in GLRenderer for shader access. |
| @@ -74,804 +74,958 @@ class GLRendererShaderTest : public PixelTest { |
| namespace { |
| #if !defined(OS_ANDROID) |
| -TEST_F(GLRendererShaderTest, AllShadersCompile) { |
| - TestShaders(); |
| -} |
| +TEST_F(GLRendererShaderTest, AllShadersCompile) { TestShaders(); } |
| #endif |
| -class FrameCountingMemoryAllocationSettingContext : public TestWebGraphicsContext3D { |
| -public: |
| - FrameCountingMemoryAllocationSettingContext() : m_frame(0) { } |
| +class FrameCountingMemoryAllocationSettingContext : |
| + public TestWebGraphicsContext3D { |
| + public: |
| + FrameCountingMemoryAllocationSettingContext() : frame_(0) {} |
| - // WebGraphicsContext3D methods. |
| + // WebGraphicsContext3D methods. |
| - // This method would normally do a glSwapBuffers under the hood. |
| - virtual void prepareTexture() { m_frame++; } |
| - virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) { m_memoryAllocationChangedCallback = callback; } |
| - virtual WebString getString(WebKit::WGC3Denum name) |
| - { |
| - if (name == GL_EXTENSIONS) |
| - return WebString("GL_CHROMIUM_set_visibility GL_CHROMIUM_gpu_memory_manager GL_CHROMIUM_discard_backbuffer"); |
| - return WebString(); |
| - } |
| + // This method would normally do a glSwapBuffers under the hood. |
| + virtual void prepareTexture() { frame_++; } |
| + virtual void setMemoryAllocationChangedCallbackCHROMIUM( |
| + WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) { |
| + memory_allocation_changed_callback_ = callback; |
| + } |
| + virtual WebString getString(WebKit::WGC3Denum name) { |
| + if (name == GL_EXTENSIONS) |
| + return WebString( |
| + "GL_CHROMIUM_set_visibility GL_CHROMIUM_gpu_memory_manager " |
| + "GL_CHROMIUM_discard_backbuffer"); |
| + return WebString(); |
| + } |
| - // Methods added for test. |
| - int frameCount() { return m_frame; } |
| - void setMemoryAllocation(WebGraphicsMemoryAllocation allocation) |
| - { |
| - m_memoryAllocationChangedCallback->onMemoryAllocationChanged(allocation); |
| - } |
| + // Methods added for test. |
| + int FrameCount() { return frame_; } |
|
danakj
2013/03/22 21:44:12
frame_count()
ernstm
2013/03/22 22:15:52
Done.
|
| + void SetMemoryAllocation(WebGraphicsMemoryAllocation allocation) { |
| + memory_allocation_changed_callback_->onMemoryAllocationChanged(allocation); |
| + } |
| -private: |
| - int m_frame; |
| - WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* m_memoryAllocationChangedCallback; |
| + private: |
| + int frame_; |
| + WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* |
| + memory_allocation_changed_callback_; |
|
danakj
2013/03/22 21:44:12
indent 4 spaces (line continuation)
ernstm
2013/03/22 22:15:52
Done.
|
| }; |
| class FakeRendererClient : public RendererClient { |
| -public: |
| - FakeRendererClient() |
| - : m_hostImpl(&proxy_) |
| - , m_setFullRootLayerDamageCount(0) |
| - , m_lastCallWasSetVisibility(0) |
| - , m_rootLayer(LayerImpl::Create(m_hostImpl.active_tree(), 1)) |
| - , m_memoryAllocationLimitBytes(PrioritizedResourceManager::DefaultMemoryAllocationLimit()) |
| - { |
| - m_rootLayer->CreateRenderSurface(); |
| - RenderPass::Id renderPassId = m_rootLayer->render_surface()->RenderPassId(); |
| - scoped_ptr<RenderPass> root_render_pass = RenderPass::Create(); |
| - root_render_pass->SetNew(renderPassId, gfx::Rect(), gfx::Rect(), gfx::Transform()); |
| - m_renderPassesInDrawOrder.push_back(root_render_pass.Pass()); |
| - } |
| - |
| - // RendererClient methods. |
| - virtual gfx::Size DeviceViewportSize() const OVERRIDE { static gfx::Size fakeSize(1, 1); return fakeSize; } |
| - virtual const LayerTreeSettings& Settings() const OVERRIDE { static LayerTreeSettings fakeSettings; return fakeSettings; } |
| - virtual void DidLoseOutputSurface() OVERRIDE { } |
| - virtual void OnSwapBuffersComplete() OVERRIDE { } |
| - virtual void SetFullRootLayerDamage() OVERRIDE { m_setFullRootLayerDamageCount++; } |
| - virtual void SetManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE { m_memoryAllocationLimitBytes = policy.bytes_limit_when_visible; } |
| - virtual void EnforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) OVERRIDE { if (m_lastCallWasSetVisibility) *m_lastCallWasSetVisibility = false; } |
| - virtual bool HasImplThread() const OVERRIDE { return false; } |
| - virtual bool ShouldClearRootRenderPass() const OVERRIDE { return true; } |
| - virtual CompositorFrameMetadata MakeCompositorFrameMetadata() const |
| - OVERRIDE { return CompositorFrameMetadata(); } |
| - |
| - // Methods added for test. |
| - int setFullRootLayerDamageCount() const { return m_setFullRootLayerDamageCount; } |
| - void setLastCallWasSetVisibilityPointer(bool* lastCallWasSetVisibility) { m_lastCallWasSetVisibility = lastCallWasSetVisibility; } |
| - |
| - RenderPass* root_render_pass() { return m_renderPassesInDrawOrder.back(); } |
| - RenderPassList& renderPassesInDrawOrder() { return m_renderPassesInDrawOrder; } |
| - |
| - size_t memoryAllocationLimitBytes() const { return m_memoryAllocationLimitBytes; } |
| - |
| -private: |
| - FakeImplProxy proxy_; |
| - FakeLayerTreeHostImpl m_hostImpl; |
| - int m_setFullRootLayerDamageCount; |
| - bool* m_lastCallWasSetVisibility; |
| - scoped_ptr<LayerImpl> m_rootLayer; |
| - RenderPassList m_renderPassesInDrawOrder; |
| - size_t m_memoryAllocationLimitBytes; |
| -}; |
| + public: |
| + FakeRendererClient() |
| + : host_impl_(&proxy_), |
| + set_full_root_layer_damage_count_(0), |
| + last_call_was_set_visibility_(0), |
| + root_layer_(LayerImpl::Create(host_impl_.active_tree(), 1)), |
| + memory_allocation_limit_bytes_( |
| + PrioritizedResourceManager::DefaultMemoryAllocationLimit()) { |
| + root_layer_->CreateRenderSurface(); |
| + RenderPass::Id render_pass_id = |
| + root_layer_->render_surface()->RenderPassId(); |
| + scoped_ptr<RenderPass> root_render_pass = RenderPass::Create(); |
| + root_render_pass->SetNew( |
| + render_pass_id, gfx::Rect(), gfx::Rect(), gfx::Transform()); |
| + render_passes_in_draw_order_.push_back(root_render_pass.Pass()); |
| + } |
| -class FakeRendererGL : public GLRenderer { |
| -public: |
| - FakeRendererGL(RendererClient* client, OutputSurface* outputSurface, ResourceProvider* resourceProvider) : GLRenderer(client, outputSurface, resourceProvider) { } |
| + // RendererClient methods. |
| + virtual gfx::Size DeviceViewportSize() const OVERRIDE { |
| + static gfx::Size fakeSize(1, 1); |
|
danakj
2013/03/22 21:44:12
fake_size
script is not perfect yet :(
ernstm
2013/03/22 22:15:52
Done.
|
| + return fakeSize; |
| + } |
| + virtual const LayerTreeSettings& Settings() const OVERRIDE { |
| + static LayerTreeSettings fake_settings; |
| + return fake_settings; |
| + } |
| + virtual void DidLoseOutputSurface() OVERRIDE {} |
| + virtual void OnSwapBuffersComplete() OVERRIDE {} |
| + virtual void SetFullRootLayerDamage() OVERRIDE { |
| + set_full_root_layer_damage_count_++; |
| + } |
| + virtual void SetManagedMemoryPolicy(const ManagedMemoryPolicy& policy) |
| + OVERRIDE { |
| + memory_allocation_limit_bytes_ = policy.bytes_limit_when_visible; |
| + } |
| + virtual void EnforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) |
| + OVERRIDE { |
| + if (last_call_was_set_visibility_) |
| + *last_call_was_set_visibility_ = false; |
| + } |
| + virtual bool HasImplThread() const OVERRIDE { return false; } |
| + virtual bool ShouldClearRootRenderPass() const OVERRIDE { return true; } |
| + virtual CompositorFrameMetadata MakeCompositorFrameMetadata() const OVERRIDE { |
| + return CompositorFrameMetadata(); |
| + } |
| - // GLRenderer methods. |
| + // Methods added for test. |
| + int SetFullRootLayerDamageCount() const { |
|
danakj
2013/03/22 21:44:12
set_full_root_layer_damage_count()
ernstm
2013/03/22 22:15:52
Done.
|
| + return set_full_root_layer_damage_count_; |
| + } |
| + void SetLastCallWasSetVisibilityPointer(bool* last_call_was_set_visibility) { |
|
danakj
2013/03/22 21:44:12
set_last_call_...
ernstm
2013/03/22 22:15:52
Done.
|
| + last_call_was_set_visibility_ = last_call_was_set_visibility; |
| + } |
| - // Changing visibility to public. |
| - using GLRenderer::Initialize; |
| - using GLRenderer::IsBackbufferDiscarded; |
| - using GLRenderer::DoDrawQuad; |
| - using GLRenderer::BeginDrawingFrame; |
| - using GLRenderer::FinishDrawingQuadList; |
| -}; |
| + RenderPass* root_render_pass() { return render_passes_in_draw_order_.back(); } |
| + RenderPassList& RenderPassesInDrawOrder() { |
|
danakj
2013/03/22 21:44:12
render_passes_in_draw_order()
this should return
ernstm
2013/03/22 22:15:52
Done.
|
| + return render_passes_in_draw_order_; |
| + } |
| -class GLRendererTest : public testing::Test { |
| -protected: |
| - GLRendererTest() |
| - : m_suggestHaveBackbufferYes(1, true) |
| - , m_suggestHaveBackbufferNo(1, false) |
| - , m_outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new FrameCountingMemoryAllocationSettingContext()))) |
| - , resource_provider_(ResourceProvider::Create(m_outputSurface.get())) |
| - , m_renderer(&m_mockClient, m_outputSurface.get(), resource_provider_.get()) |
| - { |
| - } |
| + size_t MemoryAllocationLimitBytes() const { |
|
danakj
2013/03/22 21:44:12
memory_allocation_limit_bytes()
ernstm
2013/03/22 22:15:52
Done.
|
| + return memory_allocation_limit_bytes_; |
| + } |
| - virtual void SetUp() |
| - { |
| - m_renderer.Initialize(); |
| - } |
| + private: |
| + FakeImplProxy proxy_; |
| + FakeLayerTreeHostImpl host_impl_; |
| + int set_full_root_layer_damage_count_; |
| + bool* last_call_was_set_visibility_; |
| + scoped_ptr<LayerImpl> root_layer_; |
| + RenderPassList render_passes_in_draw_order_; |
| + size_t memory_allocation_limit_bytes_; |
| +}; |
| - void SwapBuffers() |
| - { |
| - m_renderer.SwapBuffers(); |
| - } |
| +class FakeRendererGL : public GLRenderer { |
| + public: |
| + FakeRendererGL(RendererClient* client, |
| + OutputSurface* output_surface, |
| + ResourceProvider* resource_provider) |
| + : GLRenderer(client, output_surface, resource_provider) {} |
| + |
| + // GLRenderer methods. |
| + |
| + // Changing visibility to public. |
| + using GLRenderer::Initialize; |
| + using GLRenderer::IsBackbufferDiscarded; |
| + using GLRenderer::DoDrawQuad; |
| + using GLRenderer::BeginDrawingFrame; |
| + using GLRenderer::FinishDrawingQuadList; |
| +}; |
| - FrameCountingMemoryAllocationSettingContext* context() { return static_cast<FrameCountingMemoryAllocationSettingContext*>(m_outputSurface->context3d()); } |
| +class GLRendererTest : public testing::Test { |
| + protected: |
| + GLRendererTest() |
| + : suggest_have_backbuffer_yes_(1, true), |
| + suggest_have_backbuffer_no_(1, false), |
| + output_surface_(FakeOutputSurface::Create3d( |
| + scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new FrameCountingMemoryAllocationSettingContext()))), |
| + resource_provider_(ResourceProvider::Create(output_surface_.get())), |
| + renderer_(&mock_client_, |
| + output_surface_.get(), |
| + resource_provider_.get()) {} |
| + |
| + virtual void SetUp() { renderer_.Initialize(); } |
| + |
| + void SwapBuffers() { renderer_.SwapBuffers(); } |
| + |
| + FrameCountingMemoryAllocationSettingContext* Context() { |
|
danakj
2013/03/22 21:44:12
context()
ernstm
2013/03/22 22:15:52
Done.
|
| + return static_cast<FrameCountingMemoryAllocationSettingContext*>( |
| + output_surface_->context3d()); |
| + } |
| - WebGraphicsMemoryAllocation m_suggestHaveBackbufferYes; |
| - WebGraphicsMemoryAllocation m_suggestHaveBackbufferNo; |
| + WebGraphicsMemoryAllocation suggest_have_backbuffer_yes_; |
| + WebGraphicsMemoryAllocation suggest_have_backbuffer_no_; |
| - scoped_ptr<OutputSurface> m_outputSurface; |
| - FakeRendererClient m_mockClient; |
| - scoped_ptr<ResourceProvider> resource_provider_; |
| - FakeRendererGL m_renderer; |
| + scoped_ptr<OutputSurface> output_surface_; |
| + FakeRendererClient mock_client_; |
| + scoped_ptr<ResourceProvider> resource_provider_; |
| + FakeRendererGL renderer_; |
| }; |
| // Test GLRenderer discardBackbuffer functionality: |
| // Suggest recreating framebuffer when one already exists. |
| // Expected: it does nothing. |
| -TEST_F(GLRendererTest, SuggestBackbufferYesWhenItAlreadyExistsShouldDoNothing) |
| -{ |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferYes); |
| - EXPECT_EQ(0, m_mockClient.setFullRootLayerDamageCount()); |
| - EXPECT_FALSE(m_renderer.IsBackbufferDiscarded()); |
| - |
| - SwapBuffers(); |
| - EXPECT_EQ(1, context()->frameCount()); |
| +TEST_F(GLRendererTest, SuggestBackbufferYesWhenItAlreadyExistsShouldDoNothing) { |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_yes_); |
| + EXPECT_EQ(0, mock_client_.SetFullRootLayerDamageCount()); |
| + EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
| + |
| + SwapBuffers(); |
| + EXPECT_EQ(1, Context()->FrameCount()); |
| } |
| // Test GLRenderer discardBackbuffer functionality: |
| -// Suggest discarding framebuffer when one exists and the renderer is not visible. |
| +// Suggest discarding framebuffer when one exists and the renderer is not |
| +// visible. |
| // Expected: it is discarded and damage tracker is reset. |
| -TEST_F(GLRendererTest, SuggestBackbufferNoShouldDiscardBackbufferAndDamageRootLayerWhileNotVisible) |
| -{ |
| - m_renderer.SetVisible(false); |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| +TEST_F( |
| + GLRendererTest, |
| + SuggestBackbufferNoShouldDiscardBackbufferAndDamageRootLayerWhileNotVisible) { |
|
danakj
2013/03/22 21:44:12
there's no hope of 80 col here. put GLRendererTest
ernstm
2013/03/22 22:15:52
Done.
|
| + renderer_.SetVisible(false); |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_EQ(1, mock_client_.SetFullRootLayerDamageCount()); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| } |
| // Test GLRenderer discardBackbuffer functionality: |
| // Suggest discarding framebuffer when one exists and the renderer is visible. |
| // Expected: the allocation is ignored. |
| -TEST_F(GLRendererTest, SuggestBackbufferNoDoNothingWhenVisible) |
| -{ |
| - m_renderer.SetVisible(true); |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_EQ(0, m_mockClient.setFullRootLayerDamageCount()); |
| - EXPECT_FALSE(m_renderer.IsBackbufferDiscarded()); |
| +TEST_F(GLRendererTest, SuggestBackbufferNoDoNothingWhenVisible) { |
| + renderer_.SetVisible(true); |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_EQ(0, mock_client_.SetFullRootLayerDamageCount()); |
| + EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
| } |
| - |
| // Test GLRenderer discardBackbuffer functionality: |
| // Suggest discarding framebuffer when one does not exist. |
| // Expected: it does nothing. |
| -TEST_F(GLRendererTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNothing) |
| -{ |
| - m_renderer.SetVisible(false); |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| - |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| +TEST_F(GLRendererTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNothing) { |
| + renderer_.SetVisible(false); |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_EQ(1, mock_client_.SetFullRootLayerDamageCount()); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| + |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_EQ(1, mock_client_.SetFullRootLayerDamageCount()); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| } |
| // Test GLRenderer discardBackbuffer functionality: |
| // Begin drawing a frame while a framebuffer is discarded. |
| // Expected: will recreate framebuffer. |
| -TEST_F(GLRendererTest, DiscardedBackbufferIsRecreatedForScopeDuration) |
| -{ |
| - m_renderer.SetVisible(false); |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| - EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| - |
| - m_renderer.SetVisible(true); |
| - m_renderer.DrawFrame(m_mockClient.renderPassesInDrawOrder()); |
| - EXPECT_FALSE(m_renderer.IsBackbufferDiscarded()); |
| - |
| - SwapBuffers(); |
| - EXPECT_EQ(1, context()->frameCount()); |
| +TEST_F(GLRendererTest, DiscardedBackbufferIsRecreatedForScopeDuration) { |
| + renderer_.SetVisible(false); |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| + EXPECT_EQ(1, mock_client_.SetFullRootLayerDamageCount()); |
| + |
| + renderer_.SetVisible(true); |
| + renderer_.DrawFrame(mock_client_.RenderPassesInDrawOrder()); |
| + EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
| + |
| + SwapBuffers(); |
| + EXPECT_EQ(1, Context()->FrameCount()); |
| } |
| -TEST_F(GLRendererTest, FramebufferDiscardedAfterReadbackWhenNotVisible) |
| -{ |
| - m_renderer.SetVisible(false); |
| - context()->setMemoryAllocation(m_suggestHaveBackbufferNo); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| - EXPECT_EQ(1, m_mockClient.setFullRootLayerDamageCount()); |
| +TEST_F(GLRendererTest, FramebufferDiscardedAfterReadbackWhenNotVisible) { |
| + renderer_.SetVisible(false); |
| + Context()->SetMemoryAllocation(suggest_have_backbuffer_no_); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| + EXPECT_EQ(1, mock_client_.SetFullRootLayerDamageCount()); |
| - char pixels[4]; |
| - m_renderer.DrawFrame(m_mockClient.renderPassesInDrawOrder()); |
| - EXPECT_FALSE(m_renderer.IsBackbufferDiscarded()); |
| + char pixels[4]; |
| + renderer_.DrawFrame(mock_client_.RenderPassesInDrawOrder()); |
| + EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
| - m_renderer.GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); |
| - EXPECT_TRUE(m_renderer.IsBackbufferDiscarded()); |
| - EXPECT_EQ(2, m_mockClient.setFullRootLayerDamageCount()); |
| + renderer_.GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); |
| + EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
| + EXPECT_EQ(2, mock_client_.SetFullRootLayerDamageCount()); |
| } |
| class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { |
| -public: |
| - ForbidSynchronousCallContext() { } |
| - |
| - virtual bool getActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; } |
| - virtual bool getActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&) { ADD_FAILURE(); return false; } |
| - virtual void getAttachedShaders(WebGLId program, WGC3Dsizei maxCount, WGC3Dsizei* count, WebGLId* shaders) { ADD_FAILURE(); } |
| - virtual WGC3Dint getAttribLocation(WebGLId program, const WGC3Dchar* name) { ADD_FAILURE(); return 0; } |
| - virtual void getBooleanv(WGC3Denum pname, WGC3Dboolean* value) { ADD_FAILURE(); } |
| - virtual void getBufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) { ADD_FAILURE(); } |
| - virtual Attributes getContextAttributes() { ADD_FAILURE(); return attributes_; } |
| - virtual WGC3Denum getError() { ADD_FAILURE(); return 0; } |
| - virtual void getFloatv(WGC3Denum pname, WGC3Dfloat* value) { ADD_FAILURE(); } |
| - virtual void getFramebufferAttachmentParameteriv(WGC3Denum target, WGC3Denum attachment, WGC3Denum pname, WGC3Dint* value) { ADD_FAILURE(); } |
| - virtual void getIntegerv(WGC3Denum pname, WGC3Dint* value) |
| - { |
| - if (pname == GL_MAX_TEXTURE_SIZE) |
| - *value = 1024; // MAX_TEXTURE_SIZE is cached client side, so it's OK to query. |
| - else |
| - ADD_FAILURE(); |
| + public: |
| + ForbidSynchronousCallContext() {} |
| + |
| + virtual bool GetActiveAttrib(WebGLId program, WGC3Duint index, ActiveInfo&) { |
|
danakj
2013/03/22 21:44:12
need a variable name for all parameters
ernstm
2013/03/22 22:15:52
Done. Also changed all get* functions back to lowe
|
| + ADD_FAILURE(); |
| + return false; |
| + } |
| + virtual bool GetActiveUniform(WebGLId program, WGC3Duint index, ActiveInfo&) { |
|
danakj
2013/03/22 21:44:12
need a variable name for all parameters
ernstm
2013/03/22 22:15:52
Done.
|
| + ADD_FAILURE(); |
| + return false; |
| + } |
| + virtual void GetAttachedShaders(WebGLId program, |
| + WGC3Dsizei max_count, |
| + WGC3Dsizei* count, |
| + WebGLId* shaders) { |
| + ADD_FAILURE(); |
| + } |
| + virtual WGC3Dint GetAttribLocation(WebGLId program, const WGC3Dchar* name) { |
| + ADD_FAILURE(); |
| + return 0; |
| + } |
| + virtual void GetBooleanv(WGC3Denum pname, WGC3Dboolean* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetBufferParameteriv(WGC3Denum target, |
| + WGC3Denum pname, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual Attributes GetContextAttributes() { |
| + ADD_FAILURE(); |
| + return attributes_; |
| + } |
| + virtual WGC3Denum GetError() { |
| + ADD_FAILURE(); |
| + return 0; |
| + } |
| + virtual void GetFloatv(WGC3Denum pname, WGC3Dfloat* value) { ADD_FAILURE(); } |
| + virtual void GetFramebufferAttachmentParameteriv(WGC3Denum target, |
| + WGC3Denum attachment, |
| + WGC3Denum pname, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetIntegerv(WGC3Denum pname, WGC3Dint* value) { |
| + if (pname == GL_MAX_TEXTURE_SIZE) { |
| + // MAX_TEXTURE_SIZE is cached client side, so it's OK to query. |
| + *value = 1024; |
| } |
| + else { |
| + ADD_FAILURE(); |
| + } |
| + } |
| - // We allow querying the shader compilation and program link status in debug mode, but not release. |
| - virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value) |
| - { |
| + // We allow querying the shader compilation and program link status in debug |
| + // mode, but not release. |
| + virtual void GetProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value) { |
| #ifndef NDEBUG |
| - *value = 1; |
| + *value = 1; |
| #else |
| - ADD_FAILURE(); |
| + ADD_FAILURE(); |
| #endif |
| - } |
| + } |
| - virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value) |
| - { |
| + virtual void GetShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value) { |
| #ifndef NDEBUG |
| - *value = 1; |
| + *value = 1; |
| #else |
| - ADD_FAILURE(); |
| + ADD_FAILURE(); |
| #endif |
| - } |
| + } |
| - virtual WebString getString(WGC3Denum name) |
| - { |
| - // We allow querying the extension string. |
| - // FIXME: It'd be better to check that we only do this before starting any other expensive work (like starting a compilation) |
| - if (name != GL_EXTENSIONS) |
| - ADD_FAILURE(); |
| - return WebString(); |
| - } |
| + virtual WebString GetString(WGC3Denum name) { |
| + // We allow querying the extension string. |
| + // FIXME: It'd be better to check that we only do this before starting any |
| + // other expensive work (like starting a compilation) |
| + if (name != GL_EXTENSIONS) |
| + ADD_FAILURE(); |
| + return WebString(); |
| + } |
| - virtual WebString getProgramInfoLog(WebGLId program) { ADD_FAILURE(); return WebString(); } |
| - virtual void getRenderbufferParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) { ADD_FAILURE(); } |
| - |
| - virtual WebString getShaderInfoLog(WebGLId shader) { ADD_FAILURE(); return WebString(); } |
| - virtual void getShaderPrecisionFormat(WGC3Denum shadertype, WGC3Denum precisiontype, WGC3Dint* range, WGC3Dint* precision) { ADD_FAILURE(); } |
| - virtual WebString getShaderSource(WebGLId shader) { ADD_FAILURE(); return WebString(); } |
| - virtual void getTexParameterfv(WGC3Denum target, WGC3Denum pname, WGC3Dfloat* value) { ADD_FAILURE(); } |
| - virtual void getTexParameteriv(WGC3Denum target, WGC3Denum pname, WGC3Dint* value) { ADD_FAILURE(); } |
| - virtual void getUniformfv(WebGLId program, WGC3Dint location, WGC3Dfloat* value) { ADD_FAILURE(); } |
| - virtual void getUniformiv(WebGLId program, WGC3Dint location, WGC3Dint* value) { ADD_FAILURE(); } |
| - virtual WGC3Dint getUniformLocation(WebGLId program, const WGC3Dchar* name) { ADD_FAILURE(); return 0; } |
| - virtual void getVertexAttribfv(WGC3Duint index, WGC3Denum pname, WGC3Dfloat* value) { ADD_FAILURE(); } |
| - virtual void getVertexAttribiv(WGC3Duint index, WGC3Denum pname, WGC3Dint* value) { ADD_FAILURE(); } |
| - virtual WGC3Dsizeiptr getVertexAttribOffset(WGC3Duint index, WGC3Denum pname) { ADD_FAILURE(); return 0; } |
| -}; |
| + virtual WebString GetProgramInfoLog(WebGLId program) { |
| + ADD_FAILURE(); |
| + return WebString(); |
| + } |
| + virtual void GetRenderbufferParameteriv(WGC3Denum target, |
| + WGC3Denum pname, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| -// This test isn't using the same fixture as GLRendererTest, and you can't mix TEST() and TEST_F() with the same name, hence LRC2. |
| -TEST(GLRendererTest2, initializationDoesNotMakeSynchronousCalls) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ForbidSynchronousCallContext))); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| + virtual WebString GetShaderInfoLog(WebGLId shader) { |
| + ADD_FAILURE(); |
| + return WebString(); |
| + } |
| + virtual void GetShaderPrecisionFormat(WGC3Denum shadertype, |
| + WGC3Denum precisiontype, |
| + WGC3Dint* range, |
| + WGC3Dint* precision) { |
| + ADD_FAILURE(); |
| + } |
| + virtual WebString GetShaderSource(WebGLId shader) { |
| + ADD_FAILURE(); |
| + return WebString(); |
| + } |
| + virtual void GetTexParameterfv(WGC3Denum target, |
| + WGC3Denum pname, |
| + WGC3Dfloat* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetTexParameteriv(WGC3Denum target, |
| + WGC3Denum pname, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetUniformfv(WebGLId program, |
| + WGC3Dint location, |
| + WGC3Dfloat* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetUniformiv(WebGLId program, |
| + WGC3Dint location, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual WGC3Dint GetUniformLocation(WebGLId program, const WGC3Dchar* name) { |
| + ADD_FAILURE(); |
| + return 0; |
| + } |
| + virtual void GetVertexAttribfv(WGC3Duint index, |
| + WGC3Denum pname, |
| + WGC3Dfloat* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual void GetVertexAttribiv(WGC3Duint index, |
| + WGC3Denum pname, |
| + WGC3Dint* value) { |
| + ADD_FAILURE(); |
| + } |
| + virtual WGC3Dsizeiptr GetVertexAttribOffset(WGC3Duint index, |
| + WGC3Denum pname) { |
| + ADD_FAILURE(); |
| + return 0; |
| + } |
| +}; |
| - EXPECT_TRUE(renderer.Initialize()); |
| +// This test isn't using the same fixture as GLRendererTest, and you can't mix |
| +// TEST() and TEST_F() with the same name, Hence LRC2. |
| +TEST(GLRendererTest2, InitializationDoesNotMakeSynchronousCalls) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new ForbidSynchronousCallContext))); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + |
| + EXPECT_TRUE(renderer.Initialize()); |
| } |
| class LoseContextOnFirstGetContext : public TestWebGraphicsContext3D { |
| -public: |
| - LoseContextOnFirstGetContext() |
| - : m_contextLost(false) |
| - { |
| - } |
| + public: |
| + LoseContextOnFirstGetContext() : context_lost_(false) {} |
| - virtual bool makeContextCurrent() OVERRIDE |
| - { |
| - return !m_contextLost; |
| - } |
| + virtual bool makeContextCurrent() OVERRIDE { return !context_lost_; } |
| - virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value) OVERRIDE |
| - { |
| - m_contextLost = true; |
| - *value = 0; |
| - } |
| + virtual void getProgramiv(WebGLId program, WGC3Denum pname, WGC3Dint* value) |
| + OVERRIDE { |
| + context_lost_ = true; |
| + *value = 0; |
| + } |
| - virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value) OVERRIDE |
| - { |
| - m_contextLost = true; |
| - *value = 0; |
| - } |
| + virtual void getShaderiv(WebGLId shader, WGC3Denum pname, WGC3Dint* value) |
| + OVERRIDE { |
| + context_lost_ = true; |
| + *value = 0; |
| + } |
| - virtual WGC3Denum getGraphicsResetStatusARB() OVERRIDE |
| - { |
| - return m_contextLost ? 1 : 0; |
| - } |
| + virtual WGC3Denum getGraphicsResetStatusARB() OVERRIDE { |
| + return context_lost_ ? 1 : 0; |
| + } |
| -private: |
| - bool m_contextLost; |
| + private: |
| + bool context_lost_; |
| }; |
| -TEST(GLRendererTest2, initializationWithQuicklyLostContextDoesNotAssert) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new LoseContextOnFirstGetContext))); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| - |
| - renderer.Initialize(); |
| +TEST(GLRendererTest2, InitializationWithQuicklyLostContextDoesNotAssert) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new LoseContextOnFirstGetContext))); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + |
| + renderer.Initialize(); |
| } |
| -class ContextThatDoesNotSupportMemoryManagmentExtensions : public TestWebGraphicsContext3D { |
| -public: |
| - ContextThatDoesNotSupportMemoryManagmentExtensions() { } |
| +class ContextThatDoesNotSupportMemoryManagmentExtensions : |
| + public TestWebGraphicsContext3D { |
| + public: |
| + ContextThatDoesNotSupportMemoryManagmentExtensions() {} |
| - // WebGraphicsContext3D methods. |
| + // WebGraphicsContext3D methods. |
| - // This method would normally do a glSwapBuffers under the hood. |
| - virtual void prepareTexture() { } |
| - virtual void setMemoryAllocationChangedCallbackCHROMIUM(WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) { } |
| - virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); } |
| + // This method would normally do a glSwapBuffers under the hood. |
| + virtual void prepareTexture() {} |
| + virtual void setMemoryAllocationChangedCallbackCHROMIUM( |
| + WebGraphicsMemoryAllocationChangedCallbackCHROMIUM* callback) {} |
| + virtual WebString getString(WebKit::WGC3Denum name) { return WebString(); } |
| }; |
| -TEST(GLRendererTest2, initializationWithoutGpuMemoryManagerExtensionSupportShouldDefaultToNonZeroAllocation) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ContextThatDoesNotSupportMemoryManagmentExtensions))); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| - |
| - renderer.Initialize(); |
| - |
| - EXPECT_GT(mockClient.memoryAllocationLimitBytes(), 0ul); |
| +TEST( |
| + GLRendererTest2, |
| + InitializationWithoutGpuMemoryManagerExtensionSupportShouldDefaultToNonZeroAllocation) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new ContextThatDoesNotSupportMemoryManagmentExtensions))); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + |
| + renderer.Initialize(); |
| + |
| + EXPECT_GT(mock_client.MemoryAllocationLimitBytes(), 0ul); |
| } |
| class ClearCountingContext : public TestWebGraphicsContext3D { |
| -public: |
| - ClearCountingContext() : m_clear(0) { } |
| + public: |
| + ClearCountingContext() : clear_(0) {} |
| - virtual void clear(WGC3Dbitfield) |
| - { |
| - m_clear++; |
| - } |
| + virtual void clear(WGC3Dbitfield) { clear_++; } |
| - int clearCount() const { return m_clear; } |
| + int ClearCount() const { return clear_; } |
|
danakj
2013/03/22 21:44:12
clear_count()
ernstm
2013/03/22 22:15:52
Done.
|
| -private: |
| - int m_clear; |
| + private: |
| + int clear_; |
| }; |
| -TEST(GLRendererTest2, opaqueBackground) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
| - ClearCountingContext* context = static_cast<ClearCountingContext*>(outputSurface->context3d()); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| +TEST(GLRendererTest2, OpaqueBackground) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| + scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
| + ClearCountingContext* context = |
| + static_cast<ClearCountingContext*>(output_surface->context3d()); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| - mockClient.root_render_pass()->has_transparent_background = false; |
| + mock_client.root_render_pass()->has_transparent_background = false; |
| - EXPECT_TRUE(renderer.Initialize()); |
| + EXPECT_TRUE(renderer.Initialize()); |
| - renderer.DrawFrame(mockClient.renderPassesInDrawOrder()); |
| + renderer.DrawFrame(mock_client.RenderPassesInDrawOrder()); |
| - // On DEBUG builds, render passes with opaque background clear to blue to |
| - // easily see regions that were not drawn on the screen. |
| +// On DEBUG builds, render passes with opaque background clear to blue to |
| +// easily see regions that were not drawn on the screen. |
| #ifdef NDEBUG |
| - EXPECT_EQ(0, context->clearCount()); |
| + EXPECT_EQ(0, context->ClearCount()); |
| #else |
| - EXPECT_EQ(1, context->clearCount()); |
| + EXPECT_EQ(1, context->ClearCount()); |
| #endif |
| } |
| -TEST(GLRendererTest2, transparentBackground) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
| - ClearCountingContext* context = static_cast<ClearCountingContext*>(outputSurface->context3d()); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| +TEST(GLRendererTest2, TransparentBackground) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
| + scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
| + ClearCountingContext* context = |
| + static_cast<ClearCountingContext*>(output_surface->context3d()); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| - mockClient.root_render_pass()->has_transparent_background = true; |
| + mock_client.root_render_pass()->has_transparent_background = true; |
| - EXPECT_TRUE(renderer.Initialize()); |
| + EXPECT_TRUE(renderer.Initialize()); |
| - renderer.DrawFrame(mockClient.renderPassesInDrawOrder()); |
| + renderer.DrawFrame(mock_client.RenderPassesInDrawOrder()); |
| - EXPECT_EQ(1, context->clearCount()); |
| + EXPECT_EQ(1, context->ClearCount()); |
| } |
| -class VisibilityChangeIsLastCallTrackingContext : public TestWebGraphicsContext3D { |
| -public: |
| - VisibilityChangeIsLastCallTrackingContext() |
| - : m_lastCallWasSetVisibility(0) |
| - { |
| - } |
| +class VisibilityChangeIsLastCallTrackingContext : |
| + public TestWebGraphicsContext3D { |
| + public: |
| + VisibilityChangeIsLastCallTrackingContext() |
| + : last_call_was_set_visibility_(0) {} |
| + |
| + // WebGraphicsContext3D methods. |
| + virtual void setVisibilityCHROMIUM(bool visible) { |
| + if (!last_call_was_set_visibility_) |
| + return; |
| + DCHECK(*last_call_was_set_visibility_ == false); |
| + *last_call_was_set_visibility_ = true; |
| + } |
| + virtual void flush() { |
| + if (last_call_was_set_visibility_) |
| + *last_call_was_set_visibility_ = false; |
| + } |
| + virtual void deleteTexture(WebGLId) { |
| + if (last_call_was_set_visibility_) |
| + *last_call_was_set_visibility_ = false; |
| + } |
| + virtual void deleteFramebuffer(WebGLId) { |
| + if (last_call_was_set_visibility_) |
| + *last_call_was_set_visibility_ = false; |
| + } |
| + virtual void deleteRenderbuffer(WebGLId) { |
| + if (last_call_was_set_visibility_) |
| + *last_call_was_set_visibility_ = false; |
| + } |
| - // WebGraphicsContext3D methods. |
| - virtual void setVisibilityCHROMIUM(bool visible) { |
| - if (!m_lastCallWasSetVisibility) |
| - return; |
| - DCHECK(*m_lastCallWasSetVisibility == false); |
| - *m_lastCallWasSetVisibility = true; |
| - } |
| - virtual void flush() { if (m_lastCallWasSetVisibility) *m_lastCallWasSetVisibility = false; } |
| - virtual void deleteTexture(WebGLId) { if (m_lastCallWasSetVisibility) *m_lastCallWasSetVisibility = false; } |
| - virtual void deleteFramebuffer(WebGLId) { if (m_lastCallWasSetVisibility) *m_lastCallWasSetVisibility = false; } |
| - virtual void deleteRenderbuffer(WebGLId) { if (m_lastCallWasSetVisibility) *m_lastCallWasSetVisibility = false; } |
| - |
| - // This method would normally do a glSwapBuffers under the hood. |
| - virtual WebString getString(WebKit::WGC3Denum name) |
| - { |
| - if (name == GL_EXTENSIONS) |
| - return WebString("GL_CHROMIUM_set_visibility GL_CHROMIUM_gpu_memory_manager GL_CHROMIUM_discard_backbuffer"); |
| - return WebString(); |
| - } |
| + // This method would normally do a glSwapBuffers under the hood. |
| + virtual WebString getString(WebKit::WGC3Denum name) { |
| + if (name == GL_EXTENSIONS) |
| + return WebString( |
| + "GL_CHROMIUM_set_visibility GL_CHROMIUM_gpu_memory_manager " |
| + "GL_CHROMIUM_discard_backbuffer"); |
| + return WebString(); |
| + } |
| - // Methods added for test. |
| - void setLastCallWasSetVisibilityPointer(bool* lastCallWasSetVisibility) { m_lastCallWasSetVisibility = lastCallWasSetVisibility; } |
| + // Methods added for test. |
| + void SetLastCallWasSetVisibilityPointer(bool* last_call_was_set_visibility) { |
|
danakj
2013/03/22 21:44:12
set_last_call_was..
ernstm
2013/03/22 22:15:52
Done.
|
| + last_call_was_set_visibility_ = last_call_was_set_visibility; |
| + } |
| -private: |
| - bool* m_lastCallWasSetVisibility; |
| + private: |
| + bool* last_call_was_set_visibility_; |
| }; |
| -TEST(GLRendererTest2, visibilityChangeIsLastCall) |
| -{ |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new VisibilityChangeIsLastCallTrackingContext))); |
| - VisibilityChangeIsLastCallTrackingContext* context = static_cast<VisibilityChangeIsLastCallTrackingContext*>(outputSurface->context3d()); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| - |
| - EXPECT_TRUE(renderer.Initialize()); |
| - |
| - bool lastCallWasSetVisiblity = false; |
| - // Ensure that the call to setVisibilityCHROMIUM is the last call issue to the GPU |
| - // process, after glFlush is called, and after the RendererClient's enforceManagedMemoryPolicy |
| - // is called. Plumb this tracking between both the RenderClient and the Context by giving |
| - // them both a pointer to a variable on the stack. |
| - context->setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity); |
| - mockClient.setLastCallWasSetVisibilityPointer(&lastCallWasSetVisiblity); |
| - renderer.SetVisible(true); |
| - renderer.DrawFrame(mockClient.renderPassesInDrawOrder()); |
| - renderer.SetVisible(false); |
| - EXPECT_TRUE(lastCallWasSetVisiblity); |
| +TEST(GLRendererTest2, VisibilityChangeIsLastCall) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new VisibilityChangeIsLastCallTrackingContext))); |
| + VisibilityChangeIsLastCallTrackingContext* context = |
| + static_cast<VisibilityChangeIsLastCallTrackingContext*>( |
| + output_surface->context3d()); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + |
| + EXPECT_TRUE(renderer.Initialize()); |
| + |
| + bool last_call_was_set_visiblity = false; |
| + // Ensure that the call to setVisibilityCHROMIUM is the last call issue to the |
| + // GPU process, after glFlush is called, and after the RendererClient's |
| + // enforceManagedMemoryPolicy is called. Plumb this tracking between both the |
| + // RenderClient and the Context by giving them both a pointer to a variable on |
| + // the stack. |
| + context->SetLastCallWasSetVisibilityPointer(&last_call_was_set_visiblity); |
| + mock_client.SetLastCallWasSetVisibilityPointer(&last_call_was_set_visiblity); |
| + renderer.SetVisible(true); |
| + renderer.DrawFrame(mock_client.RenderPassesInDrawOrder()); |
| + renderer.SetVisible(false); |
| + EXPECT_TRUE(last_call_was_set_visiblity); |
| } |
| class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
| -public: |
| - TextureStateTrackingContext() |
| - : m_activeTexture(GL_INVALID_ENUM) |
| - { |
| - } |
| - |
| - virtual WebString getString(WGC3Denum name) |
| - { |
| - if (name == GL_EXTENSIONS) |
| - return WebString("GL_OES_EGL_image_external"); |
| - return WebString(); |
| - } |
| + public: |
| + TextureStateTrackingContext() : active_texture_(GL_INVALID_ENUM) {} |
| - MOCK_METHOD3(texParameteri, void(WGC3Denum target, WGC3Denum pname, WGC3Dint param)); |
| - MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset)); |
| + virtual WebString getString(WGC3Denum name) { |
| + if (name == GL_EXTENSIONS) |
| + return WebString("GL_OES_EGL_image_external"); |
| + return WebString(); |
| + } |
| - virtual void activeTexture(WGC3Denum texture) |
| - { |
| - EXPECT_NE(texture, m_activeTexture); |
| - m_activeTexture = texture; |
| - } |
| + MOCK_METHOD3(texParameteri, |
| + void(WGC3Denum target, WGC3Denum pname, WGC3Dint param)); |
| + MOCK_METHOD4(drawElements, |
| + void(WGC3Denum mode, |
| + WGC3Dsizei count, |
| + WGC3Denum type, |
| + WGC3Dintptr offset)); |
| + |
| + virtual void activeTexture(WGC3Denum texture) { |
| + EXPECT_NE(texture, active_texture_); |
| + active_texture_ = texture; |
| + } |
| - WGC3Denum activeTexture() const { return m_activeTexture; } |
| + WGC3Denum ActiveTexture() const { return active_texture_; } |
|
danakj
2013/03/22 21:44:12
active_texture()
ernstm
2013/03/22 22:15:52
Done.
|
| -private: |
| - WGC3Denum m_activeTexture; |
| + private: |
| + WGC3Denum active_texture_; |
| }; |
| -TEST(GLRendererTest2, activeTextureState) |
| -{ |
| - FakeRendererClient fakeClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new TextureStateTrackingContext))); |
| - TextureStateTrackingContext* context = static_cast<TextureStateTrackingContext*>(outputSurface->context3d()); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&fakeClient, outputSurface.get(), resourceProvider.get()); |
| - |
| - // During initialization we are allowed to set any texture parameters. |
| - EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber()); |
| - EXPECT_TRUE(renderer.Initialize()); |
| - |
| - cc::RenderPass::Id id(1, 1); |
| - scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| - pass->SetNew(id, gfx::Rect(0, 0, 100, 100), gfx::Rect(0, 0, 100, 100), gfx::Transform()); |
| - pass->AppendOneOfEveryQuadType(resourceProvider.get(), RenderPass::Id(2, 1)); |
| - |
| - // Set up expected texture filter state transitions that match the quads |
| - // created in AppendOneOfEveryQuadType(). |
| - Mock::VerifyAndClearExpectations(context); |
| - { |
| - InSequence sequence; |
| - |
| - // yuv_quad is drawn with the default linear filter. |
| - EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| - |
| - // tile_quad is drawn with GL_NEAREST because it is not transformed or |
| - // scaled. |
| - EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); |
| - EXPECT_CALL(*context, texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); |
| - EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| - |
| - // transformed_tile_quad uses GL_LINEAR. |
| - EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| - |
| - // scaled_tile_quad also uses GL_LINEAR. |
| - EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| - |
| - // The remaining quads also use GL_LINEAR because nearest neighbor |
| - // filtering is currently only used with tile quads. |
| - EXPECT_CALL(*context, drawElements(_, _, _, _)).Times(6); |
| - } |
| +TEST(GLRendererTest2, ActiveTextureState) { |
| + FakeRendererClient fake_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new TextureStateTrackingContext))); |
| + TextureStateTrackingContext* context = |
| + static_cast<TextureStateTrackingContext*>(output_surface->context3d()); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &fake_client, output_surface.get(), resource_provider.get()); |
| + |
| + // During initialization we are allowed to set any texture parameters. |
| + EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber()); |
| + EXPECT_TRUE(renderer.Initialize()); |
| + |
| + cc::RenderPass::Id id(1, 1); |
| + scoped_ptr<TestRenderPass> pass = TestRenderPass::Create(); |
| + pass->SetNew(id, |
| + gfx::Rect(0, 0, 100, 100), |
| + gfx::Rect(0, 0, 100, 100), |
| + gfx::Transform()); |
| + pass->AppendOneOfEveryQuadType(resource_provider.get(), RenderPass::Id(2, 1)); |
| + |
| + // Set up expected texture filter state transitions that match the quads |
| + // created in AppendOneOfEveryQuadType(). |
| + Mock::VerifyAndClearExpectations(context); |
| + { |
| + InSequence sequence; |
| + |
| + // yuv_quad is drawn with the default linear filter. |
| + EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| + |
| + // tile_quad is drawn with GL_NEAREST because it is not transformed or |
| + // scaled. |
| + EXPECT_CALL( |
| + *context, |
| + texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)); |
| + EXPECT_CALL( |
| + *context, |
| + texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)); |
| + EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| + |
| + // transformed_tile_quad uses GL_LINEAR. |
| + EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| + |
| + // scaled_tile_quad also uses GL_LINEAR. |
| + EXPECT_CALL(*context, drawElements(_, _, _, _)); |
| + |
| + // The remaining quads also use GL_LINEAR because nearest neighbor |
| + // filtering is currently only used with tile quads. |
| + EXPECT_CALL(*context, drawElements(_, _, _, _)).Times(6); |
| + } |
| - cc::DirectRenderer::DrawingFrame drawingFrame; |
| - renderer.BeginDrawingFrame(drawingFrame); |
| - EXPECT_EQ(context->activeTexture(), GL_TEXTURE0); |
| + cc::DirectRenderer::DrawingFrame drawing_frame; |
| + renderer.BeginDrawingFrame(drawing_frame); |
| + EXPECT_EQ(context->ActiveTexture(), GL_TEXTURE0); |
| - for (cc::QuadList::backToFrontIterator it = pass->quad_list.backToFrontBegin(); |
| - it != pass->quad_list.backToFrontEnd(); ++it) { |
| - renderer.DoDrawQuad(drawingFrame, *it); |
| - } |
| - renderer.FinishDrawingQuadList(); |
| - EXPECT_EQ(context->activeTexture(), GL_TEXTURE0); |
| - Mock::VerifyAndClearExpectations(context); |
| + for (cc::QuadList::backToFrontIterator |
| + it = pass->quad_list.backToFrontBegin(); |
| + it != pass->quad_list.backToFrontEnd(); |
| + ++it) { |
| + renderer.DoDrawQuad(drawing_frame, *it); |
| + } |
| + renderer.FinishDrawingQuadList(); |
| + EXPECT_EQ(context->ActiveTexture(), GL_TEXTURE0); |
| + Mock::VerifyAndClearExpectations(context); |
| } |
| class NoClearRootRenderPassFakeClient : public FakeRendererClient { |
| -public: |
| - virtual bool ShouldClearRootRenderPass() const OVERRIDE { return false; } |
| + public: |
| + virtual bool ShouldClearRootRenderPass() const OVERRIDE { return false; } |
| }; |
| class NoClearRootRenderPassMockContext : public TestWebGraphicsContext3D { |
| -public: |
| - MOCK_METHOD1(clear, void(WGC3Dbitfield mask)); |
| - MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset)); |
| + public: |
| + MOCK_METHOD1(clear, void(WGC3Dbitfield mask)); |
| + MOCK_METHOD4(drawElements, |
| + void(WGC3Denum mode, |
| + WGC3Dsizei count, |
| + WGC3Denum type, |
| + WGC3Dintptr offset)); |
| }; |
| -TEST(GLRendererTest2, shouldClearRootRenderPass) |
| -{ |
| - NoClearRootRenderPassFakeClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new NoClearRootRenderPassMockContext))); |
| - NoClearRootRenderPassMockContext* mockContext = static_cast<NoClearRootRenderPassMockContext*>(outputSurface->context3d()); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| - EXPECT_TRUE(renderer.Initialize()); |
| - |
| - gfx::Rect viewportRect(mockClient.DeviceViewportSize()); |
| - ScopedPtrVector<RenderPass>& renderPasses = mockClient.renderPassesInDrawOrder(); |
| - renderPasses.clear(); |
| - |
| - RenderPass::Id rootPassId(1, 0); |
| - TestRenderPass* rootPass = addRenderPass(renderPasses, rootPassId, viewportRect, gfx::Transform()); |
| - addQuad(rootPass, viewportRect, SK_ColorGREEN); |
| - |
| - RenderPass::Id childPassId(2, 0); |
| - TestRenderPass* childPass = addRenderPass(renderPasses, childPassId, viewportRect, gfx::Transform()); |
| - addQuad(childPass, viewportRect, SK_ColorBLUE); |
| - |
| - addRenderPassQuad(rootPass, childPass); |
| - |
| - // First render pass is not the root one, clearing should happen. |
| - EXPECT_CALL(*mockContext, clear(GL_COLOR_BUFFER_BIT)) |
| - .Times(AtLeast(1)); |
| - |
| - Expectation firstRenderPass = EXPECT_CALL(*mockContext, drawElements(_, _, _, _)) |
| - .Times(1); |
| - |
| - // The second render pass is the root one, clearing should be prevented. |
| - EXPECT_CALL(*mockContext, clear(GL_COLOR_BUFFER_BIT)) |
| - .Times(0) |
| - .After(firstRenderPass); |
| - |
| - EXPECT_CALL(*mockContext, drawElements(_, _, _, _)) |
| - .Times(AnyNumber()) |
| - .After(firstRenderPass); |
| - |
| - renderer.DecideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOrder()); |
| - renderer.DrawFrame(mockClient.renderPassesInDrawOrder()); |
| - |
| - // In multiple render passes all but the root pass should clear the framebuffer. |
| - Mock::VerifyAndClearExpectations(&mockContext); |
| +TEST(GLRendererTest2, ShouldClearRootRenderPass) { |
| + NoClearRootRenderPassFakeClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new NoClearRootRenderPassMockContext))); |
| + NoClearRootRenderPassMockContext* mock_context = |
| + static_cast<NoClearRootRenderPassMockContext*>( |
| + output_surface->context3d()); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + EXPECT_TRUE(renderer.Initialize()); |
| + |
| + gfx::Rect viewport_rect(mock_client.DeviceViewportSize()); |
| + ScopedPtrVector<RenderPass>& render_passes = |
| + mock_client.RenderPassesInDrawOrder(); |
| + render_passes.clear(); |
| + |
| + RenderPass::Id root_pass_id(1, 0); |
| + TestRenderPass* root_pass = addRenderPass( |
| + render_passes, root_pass_id, viewport_rect, gfx::Transform()); |
| + addQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| + |
| + RenderPass::Id child_pass_id(2, 0); |
| + TestRenderPass* child_pass = addRenderPass( |
| + render_passes, child_pass_id, viewport_rect, gfx::Transform()); |
| + addQuad(child_pass, viewport_rect, SK_ColorBLUE); |
| + |
| + addRenderPassQuad(root_pass, child_pass); |
| + |
| + // First render pass is not the root one, clearing should happen. |
| + EXPECT_CALL(*mock_context, clear(GL_COLOR_BUFFER_BIT)).Times(AtLeast(1)); |
| + |
| + Expectation first_render_pass = |
| + EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(1); |
| + |
| + // The second render pass is the root one, clearing should be prevented. |
| + EXPECT_CALL(*mock_context, clear(GL_COLOR_BUFFER_BIT)).Times(0) |
| + .After(first_render_pass); |
| + |
| + EXPECT_CALL(*mock_context, drawElements(_, _, _, _)).Times(AnyNumber()) |
| + .After(first_render_pass); |
| + |
| + renderer.DecideRenderPassAllocationsForFrame( |
| + mock_client.RenderPassesInDrawOrder()); |
| + renderer.DrawFrame(mock_client.RenderPassesInDrawOrder()); |
| + |
| + // In multiple render passes all but the root pass should clear the |
| + // framebuffer. |
| + Mock::VerifyAndClearExpectations(&mock_context); |
| } |
| class ScissorTestOnClearCheckingContext : public TestWebGraphicsContext3D { |
| -public: |
| - ScissorTestOnClearCheckingContext() : m_scissorEnabled(false) { } |
| + public: |
| + ScissorTestOnClearCheckingContext() : scissor_enabled_(false) {} |
| - virtual void clear(WGC3Dbitfield) |
| - { |
| - EXPECT_FALSE(m_scissorEnabled); |
| - } |
| + virtual void clear(WGC3Dbitfield) { EXPECT_FALSE(scissor_enabled_); } |
| - virtual void enable(WGC3Denum cap) |
| - { |
| - if (cap == GL_SCISSOR_TEST) |
| - m_scissorEnabled = true; |
| - } |
| + virtual void enable(WGC3Denum cap) { |
| + if (cap == GL_SCISSOR_TEST) |
| + scissor_enabled_ = true; |
| + } |
| - virtual void disable(WGC3Denum cap) |
| - { |
| - if (cap == GL_SCISSOR_TEST) |
| - m_scissorEnabled = false; |
| - } |
| + virtual void disable(WGC3Denum cap) { |
| + if (cap == GL_SCISSOR_TEST) |
| + scissor_enabled_ = false; |
| + } |
| -private: |
| - bool m_scissorEnabled; |
| + private: |
| + bool scissor_enabled_; |
| }; |
| -TEST(GLRendererTest2, scissorTestWhenClearing) { |
| - FakeRendererClient mockClient; |
| - scoped_ptr<OutputSurface> outputSurface(FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>(new ScissorTestOnClearCheckingContext))); |
| - scoped_ptr<ResourceProvider> resourceProvider(ResourceProvider::Create(outputSurface.get())); |
| - FakeRendererGL renderer(&mockClient, outputSurface.get(), resourceProvider.get()); |
| - EXPECT_TRUE(renderer.Initialize()); |
| - EXPECT_FALSE(renderer.Capabilities().using_partial_swap); |
| - |
| - gfx::Rect viewportRect(mockClient.DeviceViewportSize()); |
| - ScopedPtrVector<RenderPass>& renderPasses = mockClient.renderPassesInDrawOrder(); |
| - renderPasses.clear(); |
| - |
| - gfx::Rect grandChildRect(25, 25); |
| - RenderPass::Id grandChildPassId(3, 0); |
| - TestRenderPass* grandChildPass = addRenderPass(renderPasses, grandChildPassId, grandChildRect, gfx::Transform()); |
| - addClippedQuad(grandChildPass, grandChildRect, SK_ColorYELLOW); |
| - |
| - gfx::Rect childRect(50, 50); |
| - RenderPass::Id childPassId(2, 0); |
| - TestRenderPass* childPass = addRenderPass(renderPasses, childPassId, childRect, gfx::Transform()); |
| - addQuad(childPass, childRect, SK_ColorBLUE); |
| - |
| - RenderPass::Id rootPassId(1, 0); |
| - TestRenderPass* rootPass = addRenderPass(renderPasses, rootPassId, viewportRect, gfx::Transform()); |
| - addQuad(rootPass, viewportRect, SK_ColorGREEN); |
| - |
| - addRenderPassQuad(rootPass, childPass); |
| - addRenderPassQuad(childPass, grandChildPass); |
| - |
| - renderer.DecideRenderPassAllocationsForFrame(mockClient.renderPassesInDrawOrder()); |
| - renderer.DrawFrame(mockClient.renderPassesInDrawOrder()); |
| +TEST(GLRendererTest2, ScissorTestWhenClearing) { |
| + FakeRendererClient mock_client; |
| + scoped_ptr<OutputSurface> output_surface( |
| + FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new ScissorTestOnClearCheckingContext))); |
| + scoped_ptr<ResourceProvider> resource_provider( |
| + ResourceProvider::Create(output_surface.get())); |
| + FakeRendererGL renderer( |
| + &mock_client, output_surface.get(), resource_provider.get()); |
| + EXPECT_TRUE(renderer.Initialize()); |
| + EXPECT_FALSE(renderer.Capabilities().using_partial_swap); |
| + |
| + gfx::Rect viewport_rect(mock_client.DeviceViewportSize()); |
| + ScopedPtrVector<RenderPass>& render_passes = |
| + mock_client.RenderPassesInDrawOrder(); |
| + render_passes.clear(); |
| + |
| + gfx::Rect grand_child_rect(25, 25); |
| + RenderPass::Id grand_child_pass_id(3, 0); |
| + TestRenderPass* grand_child_pass = addRenderPass( |
| + render_passes, grand_child_pass_id, grand_child_rect, gfx::Transform()); |
| + addClippedQuad(grand_child_pass, grand_child_rect, SK_ColorYELLOW); |
| + |
| + gfx::Rect child_rect(50, 50); |
| + RenderPass::Id child_pass_id(2, 0); |
| + TestRenderPass* child_pass = |
| + addRenderPass(render_passes, child_pass_id, child_rect, gfx::Transform()); |
| + addQuad(child_pass, child_rect, SK_ColorBLUE); |
| + |
| + RenderPass::Id root_pass_id(1, 0); |
| + TestRenderPass* root_pass = addRenderPass( |
| + render_passes, root_pass_id, viewport_rect, gfx::Transform()); |
| + addQuad(root_pass, viewport_rect, SK_ColorGREEN); |
| + |
| + addRenderPassQuad(root_pass, child_pass); |
| + addRenderPassQuad(child_pass, grand_child_pass); |
| + |
| + renderer.DecideRenderPassAllocationsForFrame( |
| + mock_client.RenderPassesInDrawOrder()); |
| + renderer.DrawFrame(mock_client.RenderPassesInDrawOrder()); |
| } |
| class OutputSurfaceMockContext : public TestWebGraphicsContext3D { |
| -public: |
| - // Specifically override methods even if they are unused (used in conjunction with StrictMock). |
| - // We need to make sure that GLRenderer does not issue framebuffer-related GL calls directly. Instead these |
| - // are supposed to go through the OutputSurface abstraction. |
| - MOCK_METHOD0(ensureBackbufferCHROMIUM, void()); |
| - MOCK_METHOD0(discardBackbufferCHROMIUM, void()); |
| - MOCK_METHOD2(bindFramebuffer, void(WGC3Denum target, WebGLId framebuffer)); |
| - MOCK_METHOD0(prepareTexture, void()); |
| - MOCK_METHOD2(reshape, void(int width, int height)); |
| - MOCK_METHOD4(drawElements, void(WGC3Denum mode, WGC3Dsizei count, WGC3Denum type, WGC3Dintptr offset)); |
| - |
| - virtual WebString getString(WebKit::WGC3Denum name) |
| - { |
| - if (name == GL_EXTENSIONS) |
| - return WebString("GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_discard_backbuffer"); |
| - return WebString(); |
| - } |
| + public: |
| + // Specifically override methods even if they are unused (used in conjunction |
| + // with StrictMock). We need to make sure that GLRenderer does not issue |
| + // framebuffer-related GL calls directly. Instead these are supposed to go |
| + // through the OutputSurface abstraction. |
| + MOCK_METHOD0(ensureBackbufferCHROMIUM, void()); |
| + MOCK_METHOD0(discardBackbufferCHROMIUM, void()); |
| + MOCK_METHOD2(bindFramebuffer, void(WGC3Denum target, WebGLId framebuffer)); |
| + MOCK_METHOD0(prepareTexture, void()); |
| + MOCK_METHOD2(reshape, void(int width, int height)); |
| + MOCK_METHOD4(drawElements, |
| + void(WGC3Denum mode, |
| + WGC3Dsizei count, |
| + WGC3Denum type, |
| + WGC3Dintptr offset)); |
| + |
| + virtual WebString getString(WebKit::WGC3Denum name) { |
| + if (name == GL_EXTENSIONS) |
| + return WebString( |
| + "GL_CHROMIUM_post_sub_buffer GL_CHROMIUM_discard_backbuffer"); |
| + return WebString(); |
| + } |
| }; |
| class MockOutputSurface : public OutputSurface { |
| public: |
| - MockOutputSurface() |
| - : OutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D>(new StrictMock<OutputSurfaceMockContext>)) { } |
| - virtual ~MockOutputSurface() { } |
| - |
| - MOCK_METHOD1(SendFrameToParentCompositor, void(CompositorFrame* frame)); |
| - MOCK_METHOD0(EnsureBackbuffer, void()); |
| - MOCK_METHOD0(DiscardBackbuffer, void()); |
| - MOCK_METHOD1(Reshape, void(gfx::Size size)); |
| - MOCK_METHOD0(BindFramebuffer, void()); |
| - MOCK_METHOD1(PostSubBuffer, void(gfx::Rect rect)); |
| - MOCK_METHOD0(SwapBuffers, void()); |
| + MockOutputSurface() |
| + : OutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D>( |
| + new StrictMock<OutputSurfaceMockContext>)) {} |
| + virtual ~MockOutputSurface() {} |
| + |
| + MOCK_METHOD1(SendFrameToParentCompositor, void(CompositorFrame* frame)); |
| + MOCK_METHOD0(EnsureBackbuffer, void()); |
| + MOCK_METHOD0(DiscardBackbuffer, void()); |
| + MOCK_METHOD1(Reshape, void(gfx::Size size)); |
| + MOCK_METHOD0(BindFramebuffer, void()); |
| + MOCK_METHOD1(PostSubBuffer, void(gfx::Rect rect)); |
| + MOCK_METHOD0(SwapBuffers, void()); |
| }; |
| -class MockOutputSurfaceTest : public testing::Test, |
| - public FakeRendererClient { |
| -protected: |
| - MockOutputSurfaceTest() |
| - : resource_provider_(ResourceProvider::Create(&m_outputSurface)) |
| - , m_renderer(this, &m_outputSurface, resource_provider_.get()) |
| - { |
| - } |
| +class MockOutputSurfaceTest : public testing::Test, public FakeRendererClient { |
| + protected: |
| + MockOutputSurfaceTest() |
| + : resource_provider_(ResourceProvider::Create(&output_surface_)), |
| + renderer_(this, &output_surface_, resource_provider_.get()) {} |
| - virtual void SetUp() |
| - { |
| - EXPECT_TRUE(m_renderer.Initialize()); |
| - } |
| + virtual void SetUp() { EXPECT_TRUE(renderer_.Initialize()); } |
| - void SwapBuffers() |
| - { |
| - m_renderer.SwapBuffers(); |
| - } |
| + void SwapBuffers() { renderer_.SwapBuffers(); } |
| - void DrawFrame() |
| - { |
| - gfx::Rect viewportRect(DeviceViewportSize()); |
| - ScopedPtrVector<RenderPass>& renderPasses = renderPassesInDrawOrder(); |
| - renderPasses.clear(); |
| + void DrawFrame() { |
| + gfx::Rect viewport_rect(DeviceViewportSize()); |
| + ScopedPtrVector<RenderPass>& render_passes = RenderPassesInDrawOrder(); |
| + render_passes.clear(); |
| - RenderPass::Id renderPassId(1, 0); |
| - TestRenderPass* renderPass = addRenderPass(renderPasses, renderPassId, viewportRect, gfx::Transform()); |
| - addQuad(renderPass, viewportRect, SK_ColorGREEN); |
| + RenderPass::Id render_pass_id(1, 0); |
| + TestRenderPass* render_pass = addRenderPass( |
| + render_passes, render_pass_id, viewport_rect, gfx::Transform()); |
| + addQuad(render_pass, viewport_rect, SK_ColorGREEN); |
| - EXPECT_CALL(m_outputSurface, EnsureBackbuffer()) |
| - .WillRepeatedly(Return()); |
| + EXPECT_CALL(output_surface_, EnsureBackbuffer()).WillRepeatedly(Return()); |
| - EXPECT_CALL(m_outputSurface, Reshape(_)) |
| - .Times(1); |
| + EXPECT_CALL(output_surface_, Reshape(_)).Times(1); |
| - EXPECT_CALL(m_outputSurface, BindFramebuffer()) |
| - .Times(1); |
| + EXPECT_CALL(output_surface_, BindFramebuffer()).Times(1); |
| - EXPECT_CALL(*context(), drawElements(_, _, _, _)) |
| - .Times(1); |
| + EXPECT_CALL(*Context(), drawElements(_, _, _, _)).Times(1); |
| - m_renderer.DecideRenderPassAllocationsForFrame(renderPassesInDrawOrder()); |
| - m_renderer.DrawFrame(renderPassesInDrawOrder()); |
| - } |
| + renderer_.DecideRenderPassAllocationsForFrame(RenderPassesInDrawOrder()); |
| + renderer_.DrawFrame(RenderPassesInDrawOrder()); |
| + } |
| - OutputSurfaceMockContext* context() { return static_cast<OutputSurfaceMockContext*>(m_outputSurface.context3d()); } |
| + OutputSurfaceMockContext* Context() { |
|
danakj
2013/03/22 21:44:12
context()
|
| + return static_cast<OutputSurfaceMockContext*>(output_surface_.context3d()); |
| + } |
| - StrictMock<MockOutputSurface> m_outputSurface; |
| - scoped_ptr<ResourceProvider> resource_provider_; |
| - FakeRendererGL m_renderer; |
| + StrictMock<MockOutputSurface> output_surface_; |
| + scoped_ptr<ResourceProvider> resource_provider_; |
| + FakeRendererGL renderer_; |
| }; |
| -TEST_F(MockOutputSurfaceTest, DrawFrameAndSwap) |
| -{ |
| - DrawFrame(); |
| +TEST_F(MockOutputSurfaceTest, DrawFrameAndSwap) { |
| + DrawFrame(); |
| - EXPECT_CALL(m_outputSurface, SwapBuffers()) |
| - .Times(1); |
| - m_renderer.SwapBuffers(); |
| + EXPECT_CALL(output_surface_, SwapBuffers()).Times(1); |
| + renderer_.SwapBuffers(); |
| } |
| class MockOutputSurfaceTestWithPartialSwap : public MockOutputSurfaceTest { |
| -public: |
| - virtual const LayerTreeSettings& Settings() const OVERRIDE |
| - { |
| - static LayerTreeSettings fakeSettings; |
| - fakeSettings.partial_swap_enabled = true; |
| - return fakeSettings; |
| - } |
| + public: |
| + virtual const LayerTreeSettings& Settings() const OVERRIDE { |
| + static LayerTreeSettings fake_settings; |
| + fake_settings.partial_swap_enabled = true; |
| + return fake_settings; |
| + } |
| }; |
| -TEST_F(MockOutputSurfaceTestWithPartialSwap, DrawFrameAndSwap) |
| -{ |
| - DrawFrame(); |
| +TEST_F(MockOutputSurfaceTestWithPartialSwap, DrawFrameAndSwap) { |
| + DrawFrame(); |
| - EXPECT_CALL(m_outputSurface, PostSubBuffer(_)) |
| - .Times(1); |
| - m_renderer.SwapBuffers(); |
| + EXPECT_CALL(output_surface_, PostSubBuffer(_)).Times(1); |
| + renderer_.SwapBuffers(); |
| } |
| -class MockOutputSurfaceTestWithSendCompositorFrame : public MockOutputSurfaceTest { |
| -public: |
| - virtual const LayerTreeSettings& Settings() const OVERRIDE |
| - { |
| - static LayerTreeSettings fakeSettings; |
| - fakeSettings.compositor_frame_message = true; |
| - return fakeSettings; |
| - } |
| +class MockOutputSurfaceTestWithSendCompositorFrame : |
| + public MockOutputSurfaceTest { |
| + public: |
| + virtual const LayerTreeSettings& Settings() const OVERRIDE { |
| + static LayerTreeSettings fake_settings; |
| + fake_settings.compositor_frame_message = true; |
| + return fake_settings; |
| + } |
| }; |
| -TEST_F(MockOutputSurfaceTestWithSendCompositorFrame, DrawFrame) |
| -{ |
| - EXPECT_CALL(m_outputSurface, SendFrameToParentCompositor(_)) |
| - .Times(1); |
| - DrawFrame(); |
| +TEST_F(MockOutputSurfaceTestWithSendCompositorFrame, DrawFrame) { |
| + EXPECT_CALL(output_surface_, SendFrameToParentCompositor(_)).Times(1); |
| + DrawFrame(); |
| } |
| } // namespace |