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

Unified Diff: cc/trees/layer_tree_host_unittest_context.cc

Issue 478703002: Remove cc::LayerTreeHostImpl::IsContextLost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ctx4
Patch Set: DoComposite draws even if context lost (fixed comments) Created 6 years, 4 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 8fd9743f6d11a527018c6cab91265180ca68b2e3..a80ec86d31d4f2dbf917e1dcb542e442e52ad014 100644
--- a/cc/trees/layer_tree_host_unittest_context.cc
+++ b/cc/trees/layer_tree_host_unittest_context.cc
@@ -65,6 +65,8 @@ class LayerTreeHostContextTest : public LayerTreeTest {
}
void LoseContext() {
+ if (!context3d_)
danakj 2014/08/20 18:22:10 Is this still needed?
dneto 2014/08/20 19:15:20 Yes. Otherwise 6 tests crash with null ptr except
+ return;
context3d_->loseContextCHROMIUM(GL_GUILTY_CONTEXT_RESET_ARB,
GL_INNOCENT_CONTEXT_RESET_ARB);
context3d_ = NULL;
@@ -594,11 +596,18 @@ class LayerTreeHostContextTestLostContextWhileUpdatingResources
virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
- EXPECT_EQ(0, times_to_lose_on_end_query_);
+ // In the multi-thread case, the scheduler sees the context loss and forces
+ // re-creation of the output surface before any drawing is attempted.
+ // In the single-thread case, we still draw even if the context is lost
+ // during resource creation. The loss will be detected later.
+ if (HasImplThread())
+ EXPECT_EQ(0, times_to_lose_on_end_query_);
EndTest();
}
virtual void AfterTest() OVERRIDE {
+ // We have recovered from all context losses in both the single- and
+ // multi-threaded cases.
EXPECT_EQ(0, times_to_lose_on_end_query_);
}
@@ -657,6 +666,12 @@ class LayerTreeHostContextTestLayersNotified : public LayerTreeHostContextTest {
EXPECT_GE(1u, grandchild->lost_output_surface_count());
EndTest();
break;
+ case 3:
danakj 2014/08/20 18:22:10 did you verify that you still need this extra case
dneto 2014/08/20 19:15:20 Yes, it's still needed.
+ // The single thread proxy issues extra commits after context lost.
+ // http://crbug.com/287250
+ if (HasImplThread())
+ NOTREACHED();
+ break;
default:
NOTREACHED();
}
@@ -984,6 +999,7 @@ class ScrollbarLayerLostContext : public LayerTreeHostContextTest {
EndTest();
break;
case 3:
+ case 4:
danakj 2014/08/20 18:22:10 did you verify that you still need this extra case
// Single thread proxy issues extra commits after context lost.
// http://crbug.com/287250
if (HasImplThread())
@@ -1097,7 +1113,7 @@ class UIResourceLostAfterCommit : public UIResourceLostTestSimple {
if (HasImplThread())
NOTREACHED();
break;
- case 6:
+ case 7:
danakj 2014/08/20 18:22:10 case 6? or should case 6 be up with case 5?
dneto 2014/08/20 19:15:20 Single thread case does reach case 6, so changing
danakj 2014/08/20 19:19:12 Ah ok, since we don't reach 5 we won't reach 6, su
NOTREACHED();
}
}
@@ -1114,16 +1130,27 @@ class UIResourceLostAfterCommit : public UIResourceLostTestSimple {
LoseContext();
break;
case 3:
- // The resources should have been recreated. The bitmap callback should
- // have been called once with the resource_lost flag set to true.
- EXPECT_EQ(1, ui_resource_->lost_resource_count);
- // Resource Id on the impl-side have been recreated as well. Note
- // that the same UIResourceId persists after the context lost.
- EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id()));
- PostSetNeedsCommitToMainThread();
+ if (HasImplThread())
+ CheckForLossRecoveryThenContinue(impl);
+ break;
+ case 4:
+ // In the single-threaded case, the layer tree host sees the
+ // loss one step later.
+ if (!HasImplThread())
+ CheckForLossRecoveryThenContinue(impl);
break;
}
}
+
+ void CheckForLossRecoveryThenContinue(LayerTreeHostImpl* impl) {
+ // The resources should have been recreated. The bitmap callback should
+ // have been called once with the resource_lost flag set to true.
+ EXPECT_EQ(1, ui_resource_->lost_resource_count);
+ // The resource id on the impl-side should have been recreated as well.
+ // Note that the same UIResourceId persists after the context is lost.
+ EXPECT_NE(0u, impl->ResourceIdForUIResource(ui_resource_->id()));
+ PostSetNeedsCommitToMainThread();
+ }
};
SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostAfterCommit);
@@ -1450,8 +1477,18 @@ class LayerTreeHostContextTestSurfaceCreateCallback
EXPECT_EQ(1u, layer_->output_surface_created_count());
break;
case 4:
- EXPECT_EQ(2u, layer_->output_surface_created_count());
- layer_tree_host()->SetNeedsCommit();
+ if (HasImplThread()) {
+ EXPECT_EQ(2u, layer_->output_surface_created_count());
+ layer_tree_host()->SetNeedsCommit();
+ }
+ break;
+ case 5:
+ // The single thread proxy notices the context is lost after the commit
+ // has completed.
+ if (!HasImplThread()) {
+ EXPECT_EQ(2u, layer_->output_surface_created_count());
+ layer_tree_host()->SetNeedsCommit();
+ }
break;
}
}

Powered by Google App Engine
This is Rietveld 408576698