Chromium Code Reviews| Index: cc/output/output_surface_unittest.cc |
| diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc |
| index a23ba9383d6f848e0c66a39a3132dc9afbd84d53..6273783ff6367c1f607a2863cd851f093491867b 100644 |
| --- a/cc/output/output_surface_unittest.cc |
| +++ b/cc/output/output_surface_unittest.cc |
| @@ -5,6 +5,7 @@ |
| #include "cc/output/output_surface.h" |
| #include "cc/output/output_surface_client.h" |
| #include "cc/test/test_web_graphics_context_3d.h" |
| +#include "gpu/GLES2/gl2extchromium.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| namespace cc { |
| @@ -24,10 +25,17 @@ class TestOutputSurface : public OutputSurface { |
| : OutputSurface(context3d.Pass(), software_device.Pass()) {} |
| OutputSurfaceClient* client() { return client_; } |
| + |
| + bool InitializeNewContext3D( |
| + scoped_ptr<WebKit::WebGraphicsContext3D> new_context3d) { |
| + return InitializeAndSetContext3D(new_context3d.Pass()); |
| + } |
| }; |
| class FakeOutputSurfaceClient : public OutputSurfaceClient { |
| public: |
| + FakeOutputSurfaceClient() : did_lose_output_surface_called_(false) {} |
| + |
| virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {} |
| virtual void OnVSyncParametersChanged(base::TimeTicks timebase, |
| base::TimeDelta interval) OVERRIDE {} |
| @@ -35,7 +43,16 @@ class FakeOutputSurfaceClient : public OutputSurfaceClient { |
| virtual void OnSendFrameToParentCompositorAck(const CompositorFrameAck& ack) |
| OVERRIDE {} |
| virtual void OnSwapBuffersComplete() OVERRIDE {} |
| - virtual void DidLoseOutputSurface() OVERRIDE {} |
| + virtual void DidLoseOutputSurface() OVERRIDE { |
| + did_lose_output_surface_called_ = true; |
| + } |
| + |
| + bool did_lose_output_surface_called() { |
| + return did_lose_output_surface_called_; |
| + } |
| + |
| + private: |
| + bool did_lose_output_surface_called_; |
| }; |
| TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) { |
| @@ -49,6 +66,12 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) { |
| FakeOutputSurfaceClient client; |
| EXPECT_TRUE(output_surface.BindToClient(&client)); |
| EXPECT_EQ(&client, output_surface.client()); |
| + |
| + // Verify DidLoseOutputSurface callback is hooked up correctly. |
| + ASSERT_FALSE(client.did_lose_output_surface_called()); |
|
danakj
2013/06/05 18:50:22
nit: EXPECT instead of ASSERT throughout, this doe
boliu
2013/06/05 19:06:31
All except ASSERT_TRUE(output_surface.context3d())
|
| + output_surface.context3d()->loseContextCHROMIUM( |
| + GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
| + ASSERT_TRUE(client.did_lose_output_surface_called()); |
| } |
| TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) { |
| @@ -67,5 +90,53 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) { |
| EXPECT_EQ(NULL, output_surface.client()); |
| } |
| +TEST(OutputSurfaceTest, InitializeNewContext3DSuccess) { |
| + scoped_ptr<TestWebGraphicsContext3D> first_context3d = |
| + TestWebGraphicsContext3D::Create(); |
| + TestOutputSurface output_surface( |
| + first_context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| + |
| + FakeOutputSurfaceClient client; |
| + EXPECT_TRUE(output_surface.BindToClient(&client)); |
| + EXPECT_EQ(&client, output_surface.client()); |
| + |
| + scoped_ptr<TestWebGraphicsContext3D> second_context3d = |
| + TestWebGraphicsContext3D::Create(); |
| + EXPECT_TRUE(output_surface.InitializeNewContext3D( |
| + second_context3d.PassAs<WebKit::WebGraphicsContext3D>())); |
| + ASSERT_FALSE(client.did_lose_output_surface_called()); |
| + output_surface.context3d()->loseContextCHROMIUM( |
| + GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
| + ASSERT_TRUE(client.did_lose_output_surface_called()); |
| +} |
| + |
| +TEST(OutputSurfaceTest, InitializeNewContext3DFails) { |
| + scoped_ptr<TestWebGraphicsContext3D> first_context3d = |
| + TestWebGraphicsContext3D::Create(); |
| + TestWebGraphicsContext3D* first_context3d_ptr = first_context3d.get(); |
| + TestOutputSurface output_surface( |
| + first_context3d.PassAs<WebKit::WebGraphicsContext3D>()); |
| + |
| + FakeOutputSurfaceClient client; |
| + EXPECT_TRUE(output_surface.BindToClient(&client)); |
| + EXPECT_EQ(&client, output_surface.client()); |
| + |
| + scoped_ptr<TestWebGraphicsContext3D> second_context3d = |
| + TestWebGraphicsContext3D::Create(); |
| + second_context3d->set_times_make_current_succeeds(0); |
| + |
| + EXPECT_FALSE(output_surface.InitializeNewContext3D( |
| + second_context3d.PassAs<WebKit::WebGraphicsContext3D>())); |
| + EXPECT_EQ(&client, output_surface.client()); |
| + |
| + // First context3d still in place. |
| + ASSERT_TRUE(output_surface.context3d()); |
| + EXPECT_EQ(first_context3d_ptr, output_surface.context3d()); |
| + ASSERT_FALSE(client.did_lose_output_surface_called()); |
| + output_surface.context3d()->loseContextCHROMIUM( |
| + GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB); |
| + ASSERT_TRUE(client.did_lose_output_surface_called()); |
| +} |
| + |
| } // namespace |
| } // namespace cc |