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 879e5347e311078e380b072780e3c6ff6f393cd9..a5806ee4630f3f5ba27ba5fbf9df16bb33a030a7 100644 |
--- a/cc/trees/layer_tree_host_unittest_context.cc |
+++ b/cc/trees/layer_tree_host_unittest_context.cc |
@@ -65,9 +65,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() { |
@@ -200,45 +208,53 @@ class LayerTreeHostContextTestLostContextSucceeds |
static const TestCase kTests[] = { |
// Losing the context and failing to recreate it (or losing it again |
// immediately) a small number of times should succeed. |
- {1, // times_to_lose_during_commit |
+ { |
+ 1, // times_to_lose_during_commit |
0, // times_to_lose_during_draw |
0, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
- {0, // times_to_lose_during_commit |
+ { |
+ 0, // times_to_lose_during_commit |
1, // times_to_lose_during_draw |
0, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
- {1, // times_to_lose_during_commit |
+ { |
+ 1, // times_to_lose_during_commit |
0, // times_to_lose_during_draw |
3, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
- {0, // times_to_lose_during_commit |
+ { |
+ 0, // times_to_lose_during_commit |
1, // times_to_lose_during_draw |
3, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
// Losing the context and recreating it any number of times should |
// succeed. |
- {10, // times_to_lose_during_commit |
+ { |
+ 10, // times_to_lose_during_commit |
0, // times_to_lose_during_draw |
0, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
- {0, // times_to_lose_during_commit |
+ { |
+ 0, // times_to_lose_during_commit |
10, // times_to_lose_during_draw |
0, // times_to_fail_recreate |
false, // fallback_context_works |
}, |
// Losing the context, failing to reinitialize it, and making a fallback |
// context should work. |
- {0, // times_to_lose_during_commit |
+ { |
+ 0, // times_to_lose_during_commit |
1, // times_to_lose_during_draw |
0, // times_to_fail_recreate |
true, // fallback_context_works |
- }, }; |
+ }, |
+ }; |
if (test_case_ >= arraysize(kTests)) |
return false; |
@@ -358,10 +374,11 @@ class LayerTreeHostContextTestCreateOutputSurfaceFails |
: times_to_fail_(times_to_fail), |
expect_fallback_attempt_(expect_fallback_attempt), |
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(); |
} |
@@ -975,12 +992,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(); |
} |
@@ -1024,12 +1035,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: |
@@ -1084,13 +1093,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; |
} |
} |
@@ -1178,13 +1182,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; |
} |
} |
@@ -1205,15 +1204,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); |