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

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: minor clean up 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 a23ba9383d6f848e0c66a39a3132dc9afbd84d53..6273783ff6367c1f607a2863cd851f093491867b 100644
--- a/cc/output/output_surface_unittest.cc
+++ b/cc/output/output_surface_unittest.cc
@@ -5,6 +5,7 @@
#include "cc/output/output_surface.h"
#include "cc/output/output_surface_client.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,10 +25,17 @@ 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());
+ }
};
class FakeOutputSurfaceClient : public OutputSurfaceClient {
public:
+ FakeOutputSurfaceClient() : did_lose_output_surface_called_(false) {}
+
virtual void SetNeedsRedrawRect(gfx::Rect damage_rect) OVERRIDE {}
virtual void OnVSyncParametersChanged(base::TimeTicks timebase,
base::TimeDelta interval) OVERRIDE {}
@@ -35,7 +43,16 @@ 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;
+ }
+
+ bool did_lose_output_surface_called() {
+ return did_lose_output_surface_called_;
+ }
+
+ private:
+ bool did_lose_output_surface_called_;
};
TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) {
@@ -49,6 +66,12 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientSuccess) {
FakeOutputSurfaceClient client;
EXPECT_TRUE(output_surface.BindToClient(&client));
EXPECT_EQ(&client, output_surface.client());
+
+ // Verify DidLoseOutputSurface callback is hooked up correctly.
+ ASSERT_FALSE(client.did_lose_output_surface_called());
danakj 2013/06/05 18:50:22 nit: EXPECT instead of ASSERT throughout, this doe
boliu 2013/06/05 19:06:31 All except ASSERT_TRUE(output_surface.context3d())
+ output_surface.context3d()->loseContextCHROMIUM(
+ GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
+ ASSERT_TRUE(client.did_lose_output_surface_called());
}
TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) {
@@ -67,5 +90,53 @@ TEST(OutputSurfaceTest, ClientPointerIndicatesBindToClientFailure) {
EXPECT_EQ(NULL, output_surface.client());
}
+TEST(OutputSurfaceTest, InitializeNewContext3DSuccess) {
+ scoped_ptr<TestWebGraphicsContext3D> first_context3d =
+ TestWebGraphicsContext3D::Create();
+ TestOutputSurface output_surface(
+ first_context3d.PassAs<WebKit::WebGraphicsContext3D>());
+
+ FakeOutputSurfaceClient client;
+ EXPECT_TRUE(output_surface.BindToClient(&client));
+ EXPECT_EQ(&client, output_surface.client());
+
+ scoped_ptr<TestWebGraphicsContext3D> second_context3d =
+ TestWebGraphicsContext3D::Create();
+ EXPECT_TRUE(output_surface.InitializeNewContext3D(
+ second_context3d.PassAs<WebKit::WebGraphicsContext3D>()));
+ ASSERT_FALSE(client.did_lose_output_surface_called());
+ output_surface.context3d()->loseContextCHROMIUM(
+ GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
+ ASSERT_TRUE(client.did_lose_output_surface_called());
+}
+
+TEST(OutputSurfaceTest, InitializeNewContext3DFails) {
+ scoped_ptr<TestWebGraphicsContext3D> first_context3d =
+ TestWebGraphicsContext3D::Create();
+ TestWebGraphicsContext3D* first_context3d_ptr = first_context3d.get();
+ TestOutputSurface output_surface(
+ first_context3d.PassAs<WebKit::WebGraphicsContext3D>());
+
+ FakeOutputSurfaceClient client;
+ EXPECT_TRUE(output_surface.BindToClient(&client));
+ EXPECT_EQ(&client, output_surface.client());
+
+ scoped_ptr<TestWebGraphicsContext3D> second_context3d =
+ TestWebGraphicsContext3D::Create();
+ second_context3d->set_times_make_current_succeeds(0);
+
+ EXPECT_FALSE(output_surface.InitializeNewContext3D(
+ second_context3d.PassAs<WebKit::WebGraphicsContext3D>()));
+ EXPECT_EQ(&client, output_surface.client());
+
+ // First context3d still in place.
+ ASSERT_TRUE(output_surface.context3d());
+ EXPECT_EQ(first_context3d_ptr, output_surface.context3d());
+ ASSERT_FALSE(client.did_lose_output_surface_called());
+ output_surface.context3d()->loseContextCHROMIUM(
+ GL_GUILTY_CONTEXT_RESET_ARB, GL_INNOCENT_CONTEXT_RESET_ARB);
+ ASSERT_TRUE(client.did_lose_output_surface_called());
+}
+
} // 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