Index: cc/output/gl_renderer_unittest.cc |
diff --git a/cc/output/gl_renderer_unittest.cc b/cc/output/gl_renderer_unittest.cc |
index 9e930ccd0238db40b030bf475ad106abab53d2b9..0c90b64d29f024fad5bff7c6b97a90360d46be53 100644 |
--- a/cc/output/gl_renderer_unittest.cc |
+++ b/cc/output/gl_renderer_unittest.cc |
@@ -15,6 +15,7 @@ |
#include "cc/test/fake_impl_proxy.h" |
#include "cc/test/fake_layer_tree_host_impl.h" |
#include "cc/test/fake_output_surface.h" |
+#include "cc/test/fake_output_surface_client.h" |
#include "cc/test/mock_quad_culler.h" |
#include "cc/test/pixel_test.h" |
#include "cc/test/render_pass_test_common.h" |
@@ -232,27 +233,32 @@ class FakeRendererGL : public GLRenderer { |
class GLRendererTest : public testing::Test { |
protected: |
- GLRendererTest() |
- : output_surface_(FakeOutputSurface::Create3d( |
- scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new FrameCountingContext()))), |
- resource_provider_(ResourceProvider::Create(output_surface_.get(), 0)), |
- renderer_(&mock_client_, |
- output_surface_.get(), |
- resource_provider_.get()) {} |
+ GLRendererTest() { |
+ scoped_ptr<FrameCountingContext> context3d(new FrameCountingContext); |
+ context3d_ = context3d.get(); |
- virtual void SetUp() { renderer_.Initialize(); } |
+ output_surface_ = FakeOutputSurface::Create3d( |
+ context3d.PassAs<TestWebGraphicsContext3D>()).Pass(); |
+ CHECK(output_surface_->BindToClient(&output_surface_client_)); |
- void SwapBuffers() { renderer_.SwapBuffers(); } |
- |
- FrameCountingContext* Context() { |
- return static_cast<FrameCountingContext*>(output_surface_->context3d()); |
+ resource_provider_ = |
+ ResourceProvider::Create(output_surface_.get(), 0).Pass(); |
+ renderer_ = make_scoped_ptr(new FakeRendererGL( |
+ &renderer_client_, |
+ output_surface_.get(), |
+ resource_provider_.get())); |
} |
- scoped_ptr<OutputSurface> output_surface_; |
- FakeRendererClient mock_client_; |
+ virtual void SetUp() { renderer_->Initialize(); } |
+ |
+ void SwapBuffers() { renderer_->SwapBuffers(); } |
+ |
+ FrameCountingContext* context3d_; |
+ FakeOutputSurfaceClient output_surface_client_; |
+ scoped_ptr<FakeOutputSurface> output_surface_; |
+ FakeRendererClient renderer_client_; |
scoped_ptr<ResourceProvider> resource_provider_; |
- FakeRendererGL renderer_; |
+ scoped_ptr<FakeRendererGL> renderer_; |
}; |
// Closing the namespace here so that GLRendererShaderTest can take advantage |
@@ -320,15 +326,17 @@ class ShaderCreatorMockGraphicsContext : public TestWebGraphicsContext3D { |
class GLRendererShaderTest : public testing::Test { |
protected: |
- GLRendererShaderTest() |
- : output_surface_(FakeOutputSurface::Create3d( |
- scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new ShaderCreatorMockGraphicsContext()))), |
- resource_provider_(ResourceProvider::Create(output_surface_.get(), 0)), |
- renderer_(scoped_ptr<FakeRendererGL>( |
- new FakeRendererGL(&mock_client_, |
- output_surface_.get(), |
- resource_provider_.get()))) { |
+ GLRendererShaderTest() { |
+ output_surface_ = FakeOutputSurface::Create3d( |
+ scoped_ptr<TestWebGraphicsContext3D>( |
+ new ShaderCreatorMockGraphicsContext())).Pass(); |
+ CHECK(output_surface_->BindToClient(&output_surface_client_)); |
+ |
+ resource_provider_ = ResourceProvider::Create(output_surface_.get(), |
+ 0).Pass(); |
+ renderer_.reset(new FakeRendererGL(&renderer_client_, |
+ output_surface_.get(), |
+ resource_provider_.get())); |
renderer_->Initialize(); |
} |
@@ -386,8 +394,9 @@ class GLRendererShaderTest : public testing::Test { |
renderer_->program_shadow_); |
} |
- scoped_ptr<OutputSurface> output_surface_; |
- FakeRendererClient mock_client_; |
+ FakeOutputSurfaceClient output_surface_client_; |
+ scoped_ptr<FakeOutputSurface> output_surface_; |
+ FakeRendererClient renderer_client_; |
scoped_ptr<ResourceProvider> resource_provider_; |
scoped_ptr<FakeRendererGL> renderer_; |
}; |
@@ -398,12 +407,12 @@ namespace { |
// Suggest recreating framebuffer when one already exists. |
// Expected: it does nothing. |
TEST_F(GLRendererTest, SuggestBackbufferYesWhenItAlreadyExistsShouldDoNothing) { |
- renderer_.SetDiscardBackBufferWhenNotVisible(false); |
- EXPECT_EQ(0, mock_client_.set_full_root_layer_damage_count()); |
- EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(false); |
+ EXPECT_EQ(0, renderer_client_.set_full_root_layer_damage_count()); |
+ EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
SwapBuffers(); |
- EXPECT_EQ(1, Context()->frame_count()); |
+ EXPECT_EQ(1, context3d_->frame_count()); |
} |
// Test GLRenderer DiscardBackbuffer functionality: |
@@ -413,76 +422,76 @@ TEST_F(GLRendererTest, SuggestBackbufferYesWhenItAlreadyExistsShouldDoNothing) { |
TEST_F( |
GLRendererTest, |
SuggestBackbufferNoShouldDiscardBackbufferAndDamageRootLayerIfNotVisible) { |
- renderer_.SetVisible(false); |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_EQ(1, mock_client_.set_full_root_layer_damage_count()); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->SetVisible(false); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
+ 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) { |
- renderer_.SetVisible(true); |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_EQ(0, mock_client_.set_full_root_layer_damage_count()); |
- EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->SetVisible(true); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_EQ(0, renderer_client_.set_full_root_layer_damage_count()); |
+ EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
} |
// Test GLRenderer DiscardBackbuffer functionality: |
// Suggest discarding framebuffer when one does not exist. |
// Expected: it does nothing. |
TEST_F(GLRendererTest, SuggestBackbufferNoWhenItDoesntExistShouldDoNothing) { |
- renderer_.SetVisible(false); |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_EQ(1, mock_client_.set_full_root_layer_damage_count()); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
- |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_EQ(1, mock_client_.set_full_root_layer_damage_count()); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->SetVisible(false); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
+ EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
+ |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
+ 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) { |
- renderer_.SetVisible(false); |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
- EXPECT_EQ(1, mock_client_.set_full_root_layer_damage_count()); |
+ renderer_->SetVisible(false); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
+ EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
- renderer_.SetVisible(true); |
- renderer_.DrawFrame(mock_client_.render_passes_in_draw_order()); |
- EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->SetVisible(true); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
+ EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
SwapBuffers(); |
- EXPECT_EQ(1, Context()->frame_count()); |
+ EXPECT_EQ(1, context3d_->frame_count()); |
} |
TEST_F(GLRendererTest, FramebufferDiscardedAfterReadbackWhenNotVisible) { |
- renderer_.SetVisible(false); |
- renderer_.SetDiscardBackBufferWhenNotVisible(true); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
- EXPECT_EQ(1, mock_client_.set_full_root_layer_damage_count()); |
+ renderer_->SetVisible(false); |
+ renderer_->SetDiscardBackBufferWhenNotVisible(true); |
+ EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
+ EXPECT_EQ(1, renderer_client_.set_full_root_layer_damage_count()); |
char pixels[4]; |
- renderer_.DrawFrame(mock_client_.render_passes_in_draw_order()); |
- EXPECT_FALSE(renderer_.IsBackbufferDiscarded()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
+ EXPECT_FALSE(renderer_->IsBackbufferDiscarded()); |
- renderer_.GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); |
- EXPECT_TRUE(renderer_.IsBackbufferDiscarded()); |
- EXPECT_EQ(2, mock_client_.set_full_root_layer_damage_count()); |
+ renderer_->GetFramebufferPixels(pixels, gfx::Rect(0, 0, 1, 1)); |
+ EXPECT_TRUE(renderer_->IsBackbufferDiscarded()); |
+ EXPECT_EQ(2, renderer_client_.set_full_root_layer_damage_count()); |
} |
TEST_F(GLRendererTest, ExternalStencil) { |
- EXPECT_FALSE(renderer_.stencil_enabled()); |
+ EXPECT_FALSE(renderer_->stencil_enabled()); |
- mock_client_.EnableExternalStencilTest(); |
- mock_client_.root_render_pass()->has_transparent_background = false; |
+ renderer_client_.EnableExternalStencilTest(); |
+ renderer_client_.root_render_pass()->has_transparent_background = false; |
- renderer_.DrawFrame(mock_client_.render_passes_in_draw_order()); |
- EXPECT_TRUE(renderer_.stencil_enabled()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
+ EXPECT_TRUE(renderer_->stencil_enabled()); |
} |
class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { |
@@ -638,14 +647,17 @@ class ForbidSynchronousCallContext : public TestWebGraphicsContext3D { |
// 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))); |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ scoped_ptr<TestWebGraphicsContext3D>(new ForbidSynchronousCallContext))); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
EXPECT_TRUE(renderer.Initialize()); |
} |
@@ -677,14 +689,17 @@ class LoseContextOnFirstGetContext : public TestWebGraphicsContext3D { |
}; |
TEST(GLRendererTest2, InitializationWithQuicklyLostContextDoesNotAssert) { |
- FakeRendererClient mock_client; |
- scoped_ptr<OutputSurface> output_surface( |
- FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new LoseContextOnFirstGetContext))); |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ scoped_ptr<TestWebGraphicsContext3D>(new LoseContextOnFirstGetContext))); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
renderer.Initialize(); |
} |
@@ -702,21 +717,26 @@ class ClearCountingContext : public TestWebGraphicsContext3D { |
}; |
TEST(GLRendererTest2, OpaqueBackground) { |
- FakeRendererClient mock_client; |
+ scoped_ptr<ClearCountingContext> context_owned(new ClearCountingContext); |
+ ClearCountingContext* context = context_owned.get(); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
- scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
- ClearCountingContext* context = |
- static_cast<ClearCountingContext*>(output_surface->context3d()); |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
- mock_client.root_render_pass()->has_transparent_background = false; |
+ renderer_client.root_render_pass()->has_transparent_background = false; |
EXPECT_TRUE(renderer.Initialize()); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
// On DEBUG builds, render passes with opaque background clear to blue to |
// easily see regions that were not drawn on the screen. |
@@ -728,21 +748,26 @@ TEST(GLRendererTest2, OpaqueBackground) { |
} |
TEST(GLRendererTest2, TransparentBackground) { |
- FakeRendererClient mock_client; |
+ scoped_ptr<ClearCountingContext> context_owned(new ClearCountingContext); |
+ ClearCountingContext* context = context_owned.get(); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
- scoped_ptr<WebKit::WebGraphicsContext3D>(new ClearCountingContext))); |
- ClearCountingContext* context = |
- static_cast<ClearCountingContext*>(output_surface->context3d()); |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
- mock_client.root_render_pass()->has_transparent_background = true; |
+ renderer_client.root_render_pass()->has_transparent_background = true; |
EXPECT_TRUE(renderer.Initialize()); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
EXPECT_EQ(1, context->clear_count()); |
} |
@@ -799,17 +824,21 @@ class VisibilityChangeIsLastCallTrackingContext |
}; |
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<VisibilityChangeIsLastCallTrackingContext> context_owned( |
+ new VisibilityChangeIsLastCallTrackingContext); |
+ VisibilityChangeIsLastCallTrackingContext* context = context_owned.get(); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
EXPECT_TRUE(renderer.Initialize()); |
@@ -819,7 +848,7 @@ TEST(GLRendererTest2, VisibilityChangeIsLastCall) { |
// RenderClient and the Context by giving them both a pointer to a variable on |
// the stack. |
renderer.SetVisible(true); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
renderer.SetVisible(false); |
EXPECT_TRUE(context->last_call_was_set_visibility()); |
} |
@@ -854,16 +883,21 @@ class TextureStateTrackingContext : public TestWebGraphicsContext3D { |
}; |
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<TextureStateTrackingContext> context_owned( |
+ new TextureStateTrackingContext); |
+ TextureStateTrackingContext* context = context_owned.get(); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &fake_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
// During initialization we are allowed to set any texture parameters. |
EXPECT_CALL(*context, texParameteri(_, _, _)).Times(AnyNumber()); |
@@ -938,22 +972,26 @@ class NoClearRootRenderPassMockContext : public TestWebGraphicsContext3D { |
}; |
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<NoClearRootRenderPassMockContext> mock_context_owned( |
+ new NoClearRootRenderPassMockContext); |
+ NoClearRootRenderPassMockContext* mock_context = mock_context_owned.get(); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ mock_context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ NoClearRootRenderPassFakeClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
EXPECT_TRUE(renderer.Initialize()); |
- gfx::Rect viewport_rect(mock_client.DeviceViewport()); |
+ gfx::Rect viewport_rect(renderer_client.DeviceViewport()); |
ScopedPtrVector<RenderPass>& render_passes = |
- *mock_client.render_passes_in_draw_order(); |
+ *renderer_client.render_passes_in_draw_order(); |
render_passes.clear(); |
RenderPass::Id root_pass_id(1, 0); |
@@ -988,8 +1026,8 @@ TEST(GLRendererTest2, ShouldClearRootRenderPass) { |
.After(first_render_pass); |
renderer.DecideRenderPassAllocationsForFrame( |
- *mock_client.render_passes_in_draw_order()); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ *renderer_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
// In multiple render passes all but the root pass should clear the |
// framebuffer. |
@@ -1017,20 +1055,26 @@ class ScissorTestOnClearCheckingContext : public TestWebGraphicsContext3D { |
}; |
TEST(GLRendererTest2, ScissorTestWhenClearing) { |
- FakeRendererClient mock_client; |
- scoped_ptr<OutputSurface> output_surface( |
- FakeOutputSurface::Create3d(scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new ScissorTestOnClearCheckingContext))); |
+ scoped_ptr<ScissorTestOnClearCheckingContext> context_owned( |
+ new ScissorTestOnClearCheckingContext); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(FakeOutputSurface::Create3d( |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ FakeRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
EXPECT_TRUE(renderer.Initialize()); |
EXPECT_FALSE(renderer.Capabilities().using_partial_swap); |
- gfx::Rect viewport_rect(mock_client.DeviceViewport()); |
+ gfx::Rect viewport_rect(renderer_client.DeviceViewport()); |
ScopedPtrVector<RenderPass>& render_passes = |
- *mock_client.render_passes_in_draw_order(); |
+ *renderer_client.render_passes_in_draw_order(); |
render_passes.clear(); |
gfx::Rect grand_child_rect(25, 25); |
@@ -1054,15 +1098,17 @@ TEST(GLRendererTest2, ScissorTestWhenClearing) { |
AddRenderPassQuad(child_pass, grand_child_pass); |
renderer.DecideRenderPassAllocationsForFrame( |
- *mock_client.render_passes_in_draw_order()); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ *renderer_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
} |
class NonReshapableOutputSurface : public FakeOutputSurface { |
public: |
explicit NonReshapableOutputSurface( |
- scoped_ptr<WebKit::WebGraphicsContext3D> context3d) |
- : FakeOutputSurface(context3d.Pass(), false) {} |
+ scoped_ptr<TestWebGraphicsContext3D> context3d) |
+ : FakeOutputSurface( |
+ TestContextProvider::Create(context3d.Pass()), |
+ false) {} |
virtual gfx::Size SurfaceSize() const OVERRIDE { return gfx::Size(500, 500); } |
}; |
@@ -1108,21 +1154,27 @@ TEST(GLRendererTest2, ScissorAndViewportWithinNonreshapableSurface) { |
// and maintains a fixed size. This test verifies that glViewport and |
// glScissor's Y coordinate is flipped correctly in this environment, and that |
// the glViewport can be at a nonzero origin within the surface. |
- OffsetViewportRendererClient mock_client; |
- scoped_ptr<OutputSurface> output_surface(make_scoped_ptr( |
- new NonReshapableOutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new FlippedScissorAndViewportContext)))); |
+ scoped_ptr<FlippedScissorAndViewportContext> context_owned( |
+ new FlippedScissorAndViewportContext); |
+ |
+ FakeOutputSurfaceClient output_surface_client; |
+ scoped_ptr<OutputSurface> output_surface(new NonReshapableOutputSurface( |
+ context_owned.PassAs<TestWebGraphicsContext3D>())); |
+ CHECK(output_surface->BindToClient(&output_surface_client)); |
+ |
scoped_ptr<ResourceProvider> resource_provider( |
ResourceProvider::Create(output_surface.get(), 0)); |
+ |
+ OffsetViewportRendererClient renderer_client; |
FakeRendererGL renderer( |
- &mock_client, output_surface.get(), resource_provider.get()); |
+ &renderer_client, output_surface.get(), resource_provider.get()); |
EXPECT_TRUE(renderer.Initialize()); |
EXPECT_FALSE(renderer.Capabilities().using_partial_swap); |
- gfx::Rect viewport_rect(mock_client.DeviceViewport().size()); |
+ gfx::Rect viewport_rect(renderer_client.DeviceViewport().size()); |
gfx::Rect quad_rect = gfx::Rect(20, 20, 20, 20); |
ScopedPtrVector<RenderPass>& render_passes = |
- *mock_client.render_passes_in_draw_order(); |
+ *renderer_client.render_passes_in_draw_order(); |
render_passes.clear(); |
RenderPass::Id root_pass_id(1, 0); |
@@ -1131,14 +1183,14 @@ TEST(GLRendererTest2, ScissorAndViewportWithinNonreshapableSurface) { |
AddClippedQuad(root_pass, quad_rect, SK_ColorGREEN); |
renderer.DecideRenderPassAllocationsForFrame( |
- *mock_client.render_passes_in_draw_order()); |
- renderer.DrawFrame(mock_client.render_passes_in_draw_order()); |
+ *renderer_client.render_passes_in_draw_order()); |
+ renderer.DrawFrame(renderer_client.render_passes_in_draw_order()); |
} |
TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
- gfx::Rect viewport_rect(mock_client_.DeviceViewport()); |
+ gfx::Rect viewport_rect(renderer_client_.DeviceViewport()); |
ScopedPtrVector<RenderPass>* render_passes = |
- mock_client_.render_passes_in_draw_order(); |
+ renderer_client_.render_passes_in_draw_order(); |
gfx::Rect child_rect(50, 50); |
RenderPass::Id child_pass_id(2, 0); |
@@ -1193,8 +1245,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
gfx::Transform()); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassProgram(); |
// RenderPassColorMatrixProgram |
@@ -1209,8 +1261,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
AddRenderPassQuad(root_pass, child_pass, 0, filter, gfx::Transform()); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassColorMatrixProgram(); |
// RenderPassMaskProgram |
@@ -1229,8 +1281,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
gfx::Transform()); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassMaskProgram(); |
// RenderPassMaskColorMatrixProgram |
@@ -1245,8 +1297,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
AddRenderPassQuad(root_pass, child_pass, mask, filter, gfx::Transform()); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassMaskColorMatrixProgram(); |
// RenderPassProgramAA |
@@ -1265,8 +1317,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
transform_causing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassProgramAA(); |
// RenderPassColorMatrixProgramAA |
@@ -1281,8 +1333,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
AddRenderPassQuad(root_pass, child_pass, 0, filter, transform_causing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassColorMatrixProgramAA(); |
// RenderPassMaskProgramAA |
@@ -1298,8 +1350,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
transform_causing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassMaskProgramAA(); |
// RenderPassMaskColorMatrixProgramAA |
@@ -1314,8 +1366,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadShaderPermutations) { |
AddRenderPassQuad(root_pass, child_pass, mask, filter, transform_causing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestRenderPassMaskColorMatrixProgramAA(); |
} |
@@ -1326,7 +1378,7 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
RenderPass::Id child_pass_id(2, 0); |
TestRenderPass* child_pass; |
- gfx::Rect viewport_rect(mock_client_.DeviceViewport()); |
+ gfx::Rect viewport_rect(renderer_client_.DeviceViewport()); |
RenderPass::Id root_pass_id(1, 0); |
TestRenderPass* root_pass; |
@@ -1345,7 +1397,7 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
// Set up the render pass quad to be drawn |
ScopedPtrVector<RenderPass>* render_passes = |
- mock_client_.render_passes_in_draw_order(); |
+ renderer_client_.render_passes_in_draw_order(); |
render_passes->clear(); |
@@ -1362,8 +1414,8 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
transform_preventing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
// If use_aa incorrectly ignores clipping, it will use the |
// RenderPassProgramAA shader instead of the RenderPassProgram. |
@@ -1371,9 +1423,9 @@ TEST_F(GLRendererShaderTest, DrawRenderPassQuadSkipsAAForClippingTransform) { |
} |
TEST_F(GLRendererShaderTest, DrawSolidColorShader) { |
- gfx::Rect viewport_rect(mock_client_.DeviceViewport()); |
+ gfx::Rect viewport_rect(renderer_client_.DeviceViewport()); |
ScopedPtrVector<RenderPass>* render_passes = |
- mock_client_.render_passes_in_draw_order(); |
+ renderer_client_.render_passes_in_draw_order(); |
RenderPass::Id root_pass_id(1, 0); |
TestRenderPass* root_pass; |
@@ -1392,8 +1444,8 @@ TEST_F(GLRendererShaderTest, DrawSolidColorShader) { |
pixel_aligned_transform_causing_aa); |
renderer_->DecideRenderPassAllocationsForFrame( |
- *mock_client_.render_passes_in_draw_order()); |
- renderer_->DrawFrame(mock_client_.render_passes_in_draw_order()); |
+ *renderer_client_.render_passes_in_draw_order()); |
+ renderer_->DrawFrame(renderer_client_.render_passes_in_draw_order()); |
TestSolidColorProgramAA(); |
} |
@@ -1427,8 +1479,9 @@ class OutputSurfaceMockContext : public TestWebGraphicsContext3D { |
class MockOutputSurface : public OutputSurface { |
public: |
MockOutputSurface() |
- : OutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D>( |
- new StrictMock<OutputSurfaceMockContext>)) { |
+ : OutputSurface(TestContextProvider::Create( |
+ scoped_ptr<TestWebGraphicsContext3D>( |
+ new StrictMock<OutputSurfaceMockContext>))) { |
surface_size_ = gfx::Size(100, 100); |
} |
virtual ~MockOutputSurface() {} |
@@ -1442,13 +1495,19 @@ class MockOutputSurface : public OutputSurface { |
class MockOutputSurfaceTest : public testing::Test, public FakeRendererClient { |
protected: |
- MockOutputSurfaceTest() |
- : resource_provider_(ResourceProvider::Create(&output_surface_, 0)), |
- renderer_(this, &output_surface_, resource_provider_.get()) {} |
+ virtual void SetUp() { |
+ FakeOutputSurfaceClient output_surface_client_; |
+ CHECK(output_surface_.BindToClient(&output_surface_client_)); |
+ |
+ resource_provider_ = ResourceProvider::Create(&output_surface_, 0).Pass(); |
- virtual void SetUp() { EXPECT_TRUE(renderer_.Initialize()); } |
+ renderer_.reset(new FakeRendererGL(this, |
+ &output_surface_, |
+ resource_provider_.get())); |
+ EXPECT_TRUE(renderer_->Initialize()); |
+ } |
- void SwapBuffers() { renderer_.SwapBuffers(); } |
+ void SwapBuffers() { renderer_->SwapBuffers(); } |
void DrawFrame() { |
gfx::Rect viewport_rect(DeviceViewport()); |
@@ -1469,49 +1528,51 @@ class MockOutputSurfaceTest : public testing::Test, public FakeRendererClient { |
EXPECT_CALL(*Context(), drawElements(_, _, _, _)).Times(1); |
- renderer_.DecideRenderPassAllocationsForFrame( |
+ renderer_->DecideRenderPassAllocationsForFrame( |
*render_passes_in_draw_order()); |
- renderer_.DrawFrame(render_passes_in_draw_order()); |
+ renderer_->DrawFrame(render_passes_in_draw_order()); |
} |
OutputSurfaceMockContext* Context() { |
- return static_cast<OutputSurfaceMockContext*>(output_surface_.context3d()); |
+ return static_cast<OutputSurfaceMockContext*>( |
+ output_surface_.context_provider()->Context3d()); |
} |
+ FakeOutputSurfaceClient output_surface_client_; |
StrictMock<MockOutputSurface> output_surface_; |
scoped_ptr<ResourceProvider> resource_provider_; |
- FakeRendererGL renderer_; |
+ scoped_ptr<FakeRendererGL> renderer_; |
}; |
TEST_F(MockOutputSurfaceTest, DrawFrameAndSwap) { |
DrawFrame(); |
EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
- renderer_.SwapBuffers(); |
+ renderer_->SwapBuffers(); |
} |
TEST_F(MockOutputSurfaceTest, DrawFrameAndResizeAndSwap) { |
DrawFrame(); |
EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
- renderer_.SwapBuffers(); |
+ renderer_->SwapBuffers(); |
set_viewport_and_scale(gfx::Size(2, 2), 2.f); |
- renderer_.ViewportChanged(); |
+ renderer_->ViewportChanged(); |
DrawFrame(); |
EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
- renderer_.SwapBuffers(); |
+ renderer_->SwapBuffers(); |
DrawFrame(); |
EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
- renderer_.SwapBuffers(); |
+ renderer_->SwapBuffers(); |
set_viewport_and_scale(gfx::Size(1, 1), 1.f); |
- renderer_.ViewportChanged(); |
+ renderer_->ViewportChanged(); |
DrawFrame(); |
EXPECT_CALL(output_surface_, SwapBuffers(_)).Times(1); |
- renderer_.SwapBuffers(); |
+ renderer_->SwapBuffers(); |
} |
class GLRendererTestSyncPoint : public GLRendererPixelTest { |
@@ -1531,20 +1592,21 @@ class GLRendererTestSyncPoint : public GLRendererPixelTest { |
TEST_F(GLRendererTestSyncPoint, SignalSyncPointOnLostContext) { |
int sync_point_callback_count = 0; |
int other_callback_count = 0; |
- unsigned sync_point = output_surface_->context3d()->insertSyncPoint(); |
+ unsigned sync_point = |
+ output_surface_->context_provider()->Context3d()->insertSyncPoint(); |
- output_surface_->context3d()->loseContextCHROMIUM( |
+ output_surface_->context_provider()->Context3d()->loseContextCHROMIUM( |
GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
SyncPointHelper::SignalSyncPoint( |
- output_surface_->context3d(), |
+ output_surface_->context_provider()->Context3d(), |
sync_point, |
base::Bind(&SyncPointCallback, &sync_point_callback_count)); |
EXPECT_EQ(0, sync_point_callback_count); |
EXPECT_EQ(0, other_callback_count); |
// Make the sync point happen. |
- output_surface_->context3d()->finish(); |
+ output_surface_->context_provider()->Context3d()->finish(); |
// Post a task after the sync point. |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
@@ -1560,17 +1622,18 @@ TEST_F(GLRendererTestSyncPoint, SignalSyncPointOnLostContext) { |
TEST_F(GLRendererTestSyncPoint, SignalSyncPoint) { |
int sync_point_callback_count = 0; |
int other_callback_count = 0; |
- unsigned sync_point = output_surface_->context3d()->insertSyncPoint(); |
+ unsigned sync_point = |
+ output_surface_->context_provider()->Context3d()->insertSyncPoint(); |
SyncPointHelper::SignalSyncPoint( |
- output_surface_->context3d(), |
+ output_surface_->context_provider()->Context3d(), |
sync_point, |
base::Bind(&SyncPointCallback, &sync_point_callback_count)); |
EXPECT_EQ(0, sync_point_callback_count); |
EXPECT_EQ(0, other_callback_count); |
// Make the sync point happen. |
- output_surface_->context3d()->finish(); |
+ output_surface_->context_provider()->Context3d()->finish(); |
// Post a task after the sync point. |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |