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

Unified Diff: cc/trees/layer_tree_host_unittest_context.cc

Issue 134623005: Make SingleThreadProxy a SchedulerClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More danakj review Created 6 years, 10 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
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 baf2b2ddbad5f0d43995504ebc24e2a96957b848..5c1bbac344d23a2836c070b004f8320c02862864 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -67,9 +67,17 @@ class LayerTreeHostContextTest : public LayerTreeTest {
}
void LoseContext() {
- context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
- GL_INNOCENT_CONTEXT_RESET_ARB);
+ // For sanity-checking tests, they should only call this when the
+ // context is not lost.
+ CHECK(context3d_);
+
+ // Set the context3d_ member to null *before* calling lose context,
+ // as the single-threaded proxy may synchronously recreate the
+ // output surface, setting context3d_ back to not-NULL.
+ TestWebGraphicsContext3D* temp_context3d = context3d_;
context3d_ = NULL;
+ temp_context3d->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
+ GL_INNOCENT_CONTEXT_RESET_ARB);
}
virtual scoped_ptr<TestWebGraphicsContext3D> CreateContext3d() {
@@ -497,10 +505,11 @@ class LayerTreeHostContextTestCreateOutputSurfaceFails
expect_fallback_attempt_(expect_fallback_attempt),
expect_to_give_up_(expect_to_give_up),
did_attempt_fallback_(false),
- times_initialized_(0) {}
+ times_initialized_(0) {
+ times_to_fail_create_ = times_to_fail_;
+ }
virtual void BeginTest() OVERRIDE {
- times_to_fail_create_ = times_to_fail_;
PostSetNeedsCommitToMainThread();
}
@@ -1233,9 +1242,29 @@ class LayerTreeHostContextTestCompositeAndReadbackBeforeOutputSurfaceInit
int times_output_surface_created_;
};
-SINGLE_AND_MULTI_THREAD_TEST_F(
+// This test is only valid for the multi-threaded proxy. The single-threaded
+// case synchronously creates the first output surface (tested just below)
+// and so there is no way that a readback could happen during this time.
+MULTI_THREAD_TEST_F(
LayerTreeHostContextTestCompositeAndReadbackBeforeOutputSurfaceInit);
+class LayerTreeHostContextTestSingleThreadSynchronouslyCreatesOutputSurface
+ : public LayerTreeHostContextTest {
+ public:
+ virtual void WillBeginTest() OVERRIDE {
+ // Output surface should be synchronously created, to avoid any potential
+ // readback issues before the first output surface is created.
+ ASSERT_TRUE(layer_tree_host()->output_surface_lost());
+ LayerTreeHostContextTest::WillBeginTest();
+ ASSERT_FALSE(layer_tree_host()->output_surface_lost());
+ }
+
+ virtual void BeginTest() OVERRIDE { EndTest(); }
+ virtual void AfterTest() OVERRIDE {}
+};
+SINGLE_THREAD_TEST_F(
+ LayerTreeHostContextTestSingleThreadSynchronouslyCreatesOutputSurface);
+
// This test verifies that losing an output surface during a
// simultaneous readback and forced redraw works and does not deadlock.
class LayerTreeHostContextTestLoseOutputSurfaceDuringReadbackAndForcedDraw
@@ -1481,12 +1510,6 @@ class ScrollbarLayerLostContext : public LayerTreeHostContextTest {
EXPECT_EQ(2, scrollbar_layer_->update_count());
EndTest();
break;
- case 3:
- // Single thread proxy issues extra commits after context lost.
- // http://crbug.com/287250
- if (HasImplThread())
- NOTREACHED();
- break;
default:
NOTREACHED();
}
@@ -1530,12 +1553,10 @@ class UIResourceLostTest : public LayerTreeHostContextTest {
void PostLoseContextToImplThread() {
EXPECT_TRUE(layer_tree_host()->proxy()->IsMainThread());
- base::SingleThreadTaskRunner* task_runner =
- HasImplThread() ? ImplThreadTaskRunner()
- : base::MessageLoopProxy::current();
- task_runner->PostTask(FROM_HERE,
- base::Bind(&LayerTreeHostContextTest::LoseContext,
- base::Unretained(this)));
+ ImplThreadTaskRunner()->PostTask(
+ FROM_HERE,
+ base::Bind(&LayerTreeHostContextTest::LoseContext,
+ base::Unretained(this)));
}
protected:
@@ -1590,13 +1611,8 @@ class UIResourceLostAfterCommit : public UIResourceLostTestSimple {
EndTest();
break;
case 5:
- // Single thread proxy issues extra commits after context lost.
- // http://crbug.com/287250
- if (HasImplThread())
- NOTREACHED();
- break;
- case 6:
NOTREACHED();
+ break;
}
}
@@ -1684,13 +1700,8 @@ class UIResourceLostBeforeCommit : public UIResourceLostTestSimple {
EndTest();
break;
case 6:
- // Single thread proxy issues extra commits after context lost.
- // http://crbug.com/287250
- if (HasImplThread())
- NOTREACHED();
- break;
- case 8:
NOTREACHED();
+ break;
}
}
@@ -1711,15 +1722,8 @@ class UIResourceLostBeforeCommit : public UIResourceLostTestSimple {
// Sequence 2 (continued):
// The previous resource should have been deleted.
EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id0_));
- if (HasImplThread()) {
- // The second resource should have been created.
- EXPECT_NE(0u, impl->ResourceIdForUIResource(test_id1_));
- } else {
- // The extra commit that happens at context lost in the single thread
- // proxy changes the timing so that the resource has been destroyed.
- // http://crbug.com/287250
- EXPECT_EQ(0u, impl->ResourceIdForUIResource(test_id1_));
- }
+ // The second resource should have been created.
+ EXPECT_NE(0u, impl->ResourceIdForUIResource(test_id1_));
// The second resource called the resource callback once and since the
// context is lost, a "resource lost" callback was also issued.
EXPECT_EQ(2, ui_resource_->resource_create_count);

Powered by Google App Engine
This is Rietveld 408576698