summaryrefslogtreecommitdiffstats
path: root/cc
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-05 02:57:21 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-05 02:57:21 +0000
commit525efa2425894b17144053a93c1d9e13f4bff070 (patch)
treeaad8b5cb26c139fdde82bd5fafbc5e84819a0945 /cc
parent6750fb868e1ff502423645340d7239163a201cbc (diff)
downloadchromium_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.gyp1
-rw-r--r--cc/output/output_surface_client.h3
-rw-r--r--cc/output/output_surface_unittest.cc71
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