| Index: cc/output/output_surface_unittest.cc
|
| diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc
|
| index 1d365d99f4d3578f705b78bfa501bc378f9140ee..72bf0a4a26b13303b9502a21ad484e846a747e97 100644
|
| --- a/cc/output/output_surface_unittest.cc
|
| +++ b/cc/output/output_surface_unittest.cc
|
| @@ -4,7 +4,9 @@
|
|
|
| #include "cc/output/output_surface.h"
|
| #include "cc/output/output_surface_client.h"
|
| +#include "cc/output/software_output_device.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,13 +26,25 @@ 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(),
|
| + scoped_refptr<ContextProvider>());
|
| + }
|
| };
|
|
|
| class FakeOutputSurfaceClient : public OutputSurfaceClient {
|
| public:
|
| + FakeOutputSurfaceClient()
|
| + : deferred_initialize_result_(true),
|
| + deferred_initialize_called_(false),
|
| + did_lose_output_surface_called_(false) {}
|
| +
|
| virtual bool DeferredInitialize(
|
| scoped_refptr<ContextProvider> offscreen_context_provider) OVERRIDE {
|
| - return true;
|
| + deferred_initialize_called_ = true;
|
| + return deferred_initialize_result_;
|
| }
|
| virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {}
|
| virtual void OnVSyncParametersChanged(base::TimeTicks timebase,
|
| @@ -39,9 +53,28 @@ 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;
|
| + }
|
| virtual void SetExternalDrawConstraints(const gfx::Transform& transform,
|
| gfx::Rect viewport) OVERRIDE {}
|
| +
|
| + void set_deferred_initialize_result(bool result) {
|
| + deferred_initialize_result_ = result;
|
| + }
|
| +
|
| + bool deferred_initialize_called() {
|
| + return deferred_initialize_called_;
|
| + }
|
| +
|
| + bool did_lose_output_surface_called() {
|
| + return did_lose_output_surface_called_;
|
| + }
|
| +
|
| + private:
|
| + bool deferred_initialize_result_;
|
| + bool deferred_initialize_called_;
|
| + bool did_lose_output_surface_called_;
|
| };
|
|
|
| TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) {
|
| @@ -55,6 +88,13 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) {
|
| FakeOutputSurfaceClient client;
|
| EXPECT_TRUE(output_surface.BindToClient(&client));
|
| EXPECT_EQ(&client, output_surface.client());
|
| + EXPECT_FALSE(client.deferred_initialize_called());
|
| +
|
| + // Verify DidLoseOutputSurface callback is hooked up correctly.
|
| + EXPECT_FALSE(client.did_lose_output_surface_called());
|
| + output_surface.context3d()->loseContextCHROMIUM(
|
| + GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
|
| + EXPECT_TRUE(client.did_lose_output_surface_called());
|
| }
|
|
|
| TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) {
|
| @@ -73,5 +113,58 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) {
|
| EXPECT_EQ(NULL, output_surface.client());
|
| }
|
|
|
| +class InitializeNewContext3D : public ::testing::Test {
|
| + public:
|
| + InitializeNewContext3D()
|
| + : context3d_(TestWebGraphicsContext3D::Create()),
|
| + output_surface_(
|
| + scoped_ptr<SoftwareOutputDevice>(new SoftwareOutputDevice)) {}
|
| +
|
| + protected:
|
| + void BindOutputSurface() {
|
| + EXPECT_TRUE(output_surface_.BindToClient(&client_));
|
| + EXPECT_EQ(&client_, output_surface_.client());
|
| + }
|
| +
|
| + void InitializeNewContextExpectFail() {
|
| + EXPECT_FALSE(output_surface_.InitializeNewContext3D(
|
| + context3d_.PassAs<WebKit::WebGraphicsContext3D>()));
|
| + EXPECT_EQ(&client_, output_surface_.client());
|
| +
|
| + EXPECT_FALSE(output_surface_.context3d());
|
| + EXPECT_TRUE(output_surface_.software_device());
|
| + }
|
| +
|
| + scoped_ptr<TestWebGraphicsContext3D> context3d_;
|
| + TestOutputSurface output_surface_;
|
| + FakeOutputSurfaceClient client_;
|
| +};
|
| +
|
| +TEST_F(InitializeNewContext3D, Success) {
|
| + BindOutputSurface();
|
| + EXPECT_FALSE(client_.deferred_initialize_called());
|
| +
|
| + EXPECT_TRUE(output_surface_.InitializeNewContext3D(
|
| + context3d_.PassAs<WebKit::WebGraphicsContext3D>()));
|
| + EXPECT_TRUE(client_.deferred_initialize_called());
|
| +
|
| + EXPECT_FALSE(client_.did_lose_output_surface_called());
|
| + output_surface_.context3d()->loseContextCHROMIUM(
|
| + GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
|
| + EXPECT_TRUE(client_.did_lose_output_surface_called());
|
| +}
|
| +
|
| +TEST_F(InitializeNewContext3D, Context3dMakeCurrentFails) {
|
| + BindOutputSurface();
|
| + context3d_->set_times_make_current_succeeds(0);
|
| + InitializeNewContextExpectFail();
|
| +}
|
| +
|
| +TEST_F(InitializeNewContext3D, ClientDeferredInitializeFails) {
|
| + BindOutputSurface();
|
| + client_.set_deferred_initialize_result(false);
|
| + InitializeNewContextExpectFail();
|
| +}
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|