| Index: cc/trees/layer_tree_host_unittest_context.cc
|
| diff --git a/cc/trees/layer_tree_host_unittest_context.cc b/cc/trees/layer_tree_host_unittest_context.cc
|
| index 7112436595df55b22e4f1e5defca7da4d29f81c5..a3564defedfdb6233c7811a0f28d2bb6d085a44f 100644
|
| --- a/cc/trees/layer_tree_host_unittest_context.cc
|
| +++ b/cc/trees/layer_tree_host_unittest_context.cc
|
| @@ -345,6 +345,37 @@ class LayerTreeHostContextTestLostContextSucceeds
|
|
|
| SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostContextTestLostContextSucceeds);
|
|
|
| +class LayerTreeHostClientNotReadyDoesNotCreateOutputSurface
|
| + : public LayerTreeHostContextTest {
|
| + public:
|
| + LayerTreeHostClientNotReadyDoesNotCreateOutputSurface()
|
| + : LayerTreeHostContextTest() {}
|
| +
|
| + virtual void WillBeginTest() OVERRIDE {
|
| + // Override and do not signal SetLayerTreeHostClientReady.
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE {
|
| + PostSetNeedsCommitToMainThread();
|
| + EndTest();
|
| + }
|
| +
|
| + virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
|
| + OVERRIDE {
|
| + EXPECT_TRUE(false);
|
| + return scoped_ptr<OutputSurface>();
|
| + }
|
| +
|
| + virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE {
|
| + EXPECT_TRUE(false);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {
|
| + }
|
| +};
|
| +
|
| +MULTI_THREAD_TEST_F(LayerTreeHostClientNotReadyDoesNotCreateOutputSurface);
|
| +
|
| class LayerTreeHostContextTestLostContextSucceedsWithContent
|
| : public LayerTreeHostContextTestLostContextSucceeds {
|
| public:
|
| @@ -461,6 +492,97 @@ TEST_F(LayerTreeHostContextTestLostContextSucceedsWithContent,
|
| RunTest(true, false, false);
|
| }
|
|
|
| +class LayerTreeHostContextTestCreateOutputSurfaceFails
|
| + : public LayerTreeHostContextTest {
|
| + public:
|
| + // Run a test that initially fails OutputSurface creation |times_to_fail|
|
| + // times. If |expect_fallback_attempt| is |true|, an attempt to create a
|
| + // fallback/software OutputSurface is expected to occur.
|
| + LayerTreeHostContextTestCreateOutputSurfaceFails(int times_to_fail,
|
| + bool expect_fallback_attempt,
|
| + bool expect_to_give_up)
|
| + : times_to_fail_(times_to_fail),
|
| + expect_fallback_attempt_(expect_fallback_attempt),
|
| + expect_to_give_up_(expect_to_give_up),
|
| + did_attempt_fallback_(false),
|
| + times_initialized_(0) {}
|
| +
|
| + virtual void BeginTest() OVERRIDE {
|
| + times_to_fail_create_ = times_to_fail_;
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
|
| + OVERRIDE {
|
| + scoped_ptr<OutputSurface> surface =
|
| + LayerTreeHostContextTest::CreateOutputSurface(fallback);
|
| +
|
| + if (surface)
|
| + EXPECT_EQ(times_to_fail_, times_create_failed_);
|
| +
|
| + did_attempt_fallback_ = fallback;
|
| + return surface.Pass();
|
| + }
|
| +
|
| + virtual void DidInitializeOutputSurface(bool succeeded) OVERRIDE {
|
| + if (succeeded)
|
| + times_initialized_++;
|
| + else
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {
|
| + EXPECT_EQ(times_to_fail_, times_create_failed_);
|
| + EXPECT_EQ(expect_to_give_up_, times_initialized_ == 0);
|
| + EXPECT_EQ(expect_fallback_attempt_, did_attempt_fallback_);
|
| + }
|
| +
|
| + private:
|
| + int times_to_fail_;
|
| + bool expect_fallback_attempt_;
|
| + bool expect_to_give_up_;
|
| + bool did_attempt_fallback_;
|
| + int times_initialized_;
|
| +};
|
| +
|
| +class LayerTreeHostContextTestCreateOutputSurfaceFailsOnce
|
| + : public LayerTreeHostContextTestCreateOutputSurfaceFails {
|
| + public:
|
| + LayerTreeHostContextTestCreateOutputSurfaceFailsOnce()
|
| + : LayerTreeHostContextTestCreateOutputSurfaceFails(1, false, false) {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostContextTestCreateOutputSurfaceFailsOnce);
|
| +
|
| +// After 4 failures we expect an attempt to create a fallback/software
|
| +// OutputSurface.
|
| +class LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback
|
| + : public LayerTreeHostContextTestCreateOutputSurfaceFails {
|
| + public:
|
| + LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback()
|
| + : LayerTreeHostContextTestCreateOutputSurfaceFails(4, true, false) {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostContextTestCreateOutputSurfaceFailsWithFallback);
|
| +
|
| +// If we fail that often, we should be giving up cleanly.
|
| +class LayerTreeHostContextTestCreateOutputSurfaceIsHopeless
|
| + : public LayerTreeHostContextTestCreateOutputSurfaceFails {
|
| + public:
|
| + LayerTreeHostContextTestCreateOutputSurfaceIsHopeless()
|
| + : LayerTreeHostContextTestCreateOutputSurfaceFails(5, true, true) {}
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(
|
| + LayerTreeHostContextTestCreateOutputSurfaceIsHopeless);
|
| +
|
| +
|
| class LayerTreeHostContextTestOffscreenContextFails
|
| : public LayerTreeHostContextTest {
|
| public:
|
| @@ -1032,7 +1154,11 @@ class LayerTreeHostContextTestDontUseLostResources
|
|
|
| virtual scoped_ptr<OutputSurface> CreateOutputSurface(
|
| bool fallback) OVERRIDE {
|
| - if (layer_tree_host()) {
|
| + // This will get called twice:
|
| + // First when we create the initial output surface...
|
| + if (layer_tree_host()->source_frame_number() > 0) {
|
| + // ... and then again after we forced the context to be lost on the third
|
| + // frame. Verify this assumption here.
|
| lost_context_ = true;
|
| EXPECT_EQ(layer_tree_host()->source_frame_number(), 3);
|
| }
|
| @@ -1405,43 +1531,6 @@ class ScrollbarLayerLostContext : public LayerTreeHostContextTest {
|
|
|
| SINGLE_AND_MULTI_THREAD_TEST_F(ScrollbarLayerLostContext);
|
|
|
| -// Not reusing LayerTreeTest because it expects creating LTH to always succeed.
|
| -class LayerTreeHostTestCannotCreateIfCannotCreateOutputSurface
|
| - : public testing::Test,
|
| - public FakeLayerTreeHostClient {
|
| - public:
|
| - LayerTreeHostTestCannotCreateIfCannotCreateOutputSurface()
|
| - : FakeLayerTreeHostClient(FakeLayerTreeHostClient::DIRECT_3D) {}
|
| -
|
| - // FakeLayerTreeHostClient implementation.
|
| - virtual scoped_ptr<OutputSurface> CreateOutputSurface(bool fallback)
|
| - OVERRIDE {
|
| - return scoped_ptr<OutputSurface>();
|
| - }
|
| -
|
| - void RunTest(bool threaded,
|
| - bool delegating_renderer,
|
| - bool impl_side_painting) {
|
| - LayerTreeSettings settings;
|
| - settings.impl_side_painting = impl_side_painting;
|
| - if (threaded) {
|
| - scoped_ptr<base::Thread> impl_thread(new base::Thread("LayerTreeTest"));
|
| - ASSERT_TRUE(impl_thread->Start());
|
| - ASSERT_TRUE(impl_thread->message_loop_proxy().get());
|
| - scoped_ptr<LayerTreeHost> layer_tree_host = LayerTreeHost::CreateThreaded(
|
| - this, NULL, settings, impl_thread->message_loop_proxy());
|
| - EXPECT_FALSE(layer_tree_host);
|
| - } else {
|
| - scoped_ptr<LayerTreeHost> layer_tree_host =
|
| - LayerTreeHost::CreateSingleThreaded(this, this, NULL, settings);
|
| - EXPECT_FALSE(layer_tree_host);
|
| - }
|
| - }
|
| -};
|
| -
|
| -SINGLE_AND_MULTI_THREAD_TEST_F(
|
| - LayerTreeHostTestCannotCreateIfCannotCreateOutputSurface);
|
| -
|
| class UIResourceLostTest : public LayerTreeHostContextTest {
|
| public:
|
| UIResourceLostTest() : time_step_(0) {}
|
|
|