diff options
author | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-05 02:57:21 +0000 |
---|---|---|
committer | danakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-05 02:57:21 +0000 |
commit | 525efa2425894b17144053a93c1d9e13f4bff070 (patch) | |
tree | aad8b5cb26c139fdde82bd5fafbc5e84819a0945 /cc | |
parent | 6750fb868e1ff502423645340d7239163a201cbc (diff) | |
download | chromium_src-525efa2425894b17144053a93c1d9e13f4bff070.zip chromium_src-525efa2425894b17144053a93c1d9e13f4bff070.tar.gz chromium_src-525efa2425894b17144053a93c1d9e13f4bff070.tar.bz2 |
cc: Add a unit test to verify BindToClient behaviour.
The client pointer in the OutputSurface should indicate whether the
last call to BindToClient succeeded or failed. If the bind fails,
then the client pointer should always be null.
R=joaodasilva@chromium.org
BUG=
Review URL: https://chromiumcodereview.appspot.com/15861006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204138 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc')
-rw-r--r-- | cc/cc_tests.gyp | 1 | ||||
-rw-r--r-- | cc/output/output_surface_client.h | 3 | ||||
-rw-r--r-- | cc/output/output_surface_unittest.cc | 71 |
3 files changed, 74 insertions, 1 deletions
diff --git a/cc/cc_tests.gyp b/cc/cc_tests.gyp index 22659ca..4cc4109 100644 --- a/cc/cc_tests.gyp +++ b/cc/cc_tests.gyp @@ -41,6 +41,7 @@ 'layers/tiled_layer_unittest.cc', 'output/delegating_renderer_unittest.cc', 'output/gl_renderer_unittest.cc', + 'output/output_surface_unittest.cc', 'output/renderer_pixeltest.cc', 'output/render_surface_filters_unittest.cc', 'output/shader_unittest.cc', diff --git a/cc/output/output_surface_client.h b/cc/output/output_surface_client.h index 1f188af..cbb3b8c 100644 --- a/cc/output/output_surface_client.h +++ b/cc/output/output_surface_client.h @@ -19,7 +19,8 @@ class CC_EXPORT OutputSurfaceClient { virtual void OnVSyncParametersChanged(base::TimeTicks timebase, base::TimeDelta interval) = 0; virtual void BeginFrame(base::TimeTicks frame_time) = 0; - virtual void OnSendFrameToParentCompositorAck(const CompositorFrameAck&) = 0; + virtual void OnSendFrameToParentCompositorAck( + const CompositorFrameAck& ack) = 0; virtual void OnSwapBuffersComplete() = 0; virtual void DidLoseOutputSurface() = 0; diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc new file mode 100644 index 0000000..a23ba93 --- /dev/null +++ b/cc/output/output_surface_unittest.cc @@ -0,0 +1,71 @@ +// Copyright 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "cc/output/output_surface.h" +#include "cc/output/output_surface_client.h" +#include "cc/test/test_web_graphics_context_3d.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cc { +namespace { + +class TestOutputSurface : public OutputSurface { + public: + explicit TestOutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D> context3d) + : OutputSurface(context3d.Pass()) {} + + explicit TestOutputSurface( + scoped_ptr<cc::SoftwareOutputDevice> software_device) + : OutputSurface(software_device.Pass()) {} + + TestOutputSurface(scoped_ptr<WebKit::WebGraphicsContext3D> context3d, + scoped_ptr<cc::SoftwareOutputDevice> software_device) + : OutputSurface(context3d.Pass(), software_device.Pass()) {} + + OutputSurfaceClient* client() { return client_; } +}; + +class FakeOutputSurfaceClient : public OutputSurfaceClient { + public: + virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {} + virtual void OnVSyncParametersChanged(base::TimeTicks timebase, + base::TimeDelta interval) OVERRIDE {} + virtual void BeginFrame(base::TimeTicks frame_time) OVERRIDE {} + virtual void OnSendFrameToParentCompositorAck(const CompositorFrameAck& ack) + OVERRIDE {} + virtual void OnSwapBuffersComplete() OVERRIDE {} + virtual void DidLoseOutputSurface() OVERRIDE {} +}; + +TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) { + scoped_ptr<TestWebGraphicsContext3D> context3d = + TestWebGraphicsContext3D::Create(); + + TestOutputSurface output_surface( + context3d.PassAs<WebKit::WebGraphicsContext3D>()); + EXPECT_EQ(NULL, output_surface.client()); + + FakeOutputSurfaceClient client; + EXPECT_TRUE(output_surface.BindToClient(&client)); + EXPECT_EQ(&client, output_surface.client()); +} + +TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) { + scoped_ptr<TestWebGraphicsContext3D> context3d = + TestWebGraphicsContext3D::Create(); + + // Lose the context so BindToClient fails. + context3d->set_times_make_current_succeeds(0); + + TestOutputSurface output_surface( + context3d.PassAs<WebKit::WebGraphicsContext3D>()); + EXPECT_EQ(NULL, output_surface.client()); + + FakeOutputSurfaceClient client; + EXPECT_FALSE(output_surface.BindToClient(&client)); + EXPECT_EQ(NULL, output_surface.client()); +} + +} // namespace +} // namespace cc |