Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3927)

Unified Diff: cc/output/output_surface_unittest.cc

Issue 15647021: Factor out cc::OutputSurface::InitializeAndSetContext3D (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« cc/output/output_surface.cc ('K') | « cc/output/output_surface.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« cc/output/output_surface.cc ('K') | « cc/output/output_surface.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698