summaryrefslogtreecommitdiffstats
path: root/cc/output/output_surface_unittest.cc
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-07 23:38:45 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-07 23:38:45 +0000
commit5b86251b266a60f8fe4fee2e942b8299a75935cc (patch)
treeb00fca412064a45d83bac1e95570a2058a506192 /cc/output/output_surface_unittest.cc
parenta21d25b38343920a2ad1132f944f9ce53ae72ab9 (diff)
downloadchromium_src-5b86251b266a60f8fe4fee2e942b8299a75935cc.zip
chromium_src-5b86251b266a60f8fe4fee2e942b8299a75935cc.tar.gz
chromium_src-5b86251b266a60f8fe4fee2e942b8299a75935cc.tar.bz2
Factor out cc::OutputSurface::InitializeAndSetContext3D
This is a protected method so that it can be called by subclasses to set and initialize a new Context3D post construction time. BUG=230197 Review URL: https://chromiumcodereview.appspot.com/15647021 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@204976 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output/output_surface_unittest.cc')
-rw-r--r--cc/output/output_surface_unittest.cc97
1 files changed, 95 insertions, 2 deletions
diff --git a/cc/output/output_surface_unittest.cc b/cc/output/output_surface_unittest.cc
index 1d365d9..72bf0a4 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