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

Unified Diff: cc/output/gl_renderer_unittest.cc

Issue 20185002: ContextProvider in OutputSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: contextprovider: don't access Context3d() in OutputSurface contructors, it's not bound yet Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « cc/output/gl_renderer.cc ('k') | cc/output/output_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698