Index: cc/trees/layer_tree_host_unittest_context.cc |
=================================================================== |
--- cc/trees/layer_tree_host_unittest_context.cc (revision 210393) |
+++ cc/trees/layer_tree_host_unittest_context.cc (working copy) |
@@ -29,6 +29,7 @@ |
#include "cc/test/fake_video_frame_provider.h" |
#include "cc/test/layer_tree_test.h" |
#include "cc/test/render_pass_test_common.h" |
+#include "cc/test/test_ui_resource_client.h" |
#include "cc/test/test_web_graphics_context_3d.h" |
#include "cc/trees/layer_tree_host_impl.h" |
#include "cc/trees/layer_tree_impl.h" |
@@ -1501,21 +1502,17 @@ |
LayerTreeHostContextTest::CommitCompleteOnThread(impl); |
++commits_; |
- size_t upload_count = scrollbar_layer_->last_update_full_upload_size() + |
- scrollbar_layer_->last_update_partial_upload_size(); |
switch (commits_) { |
case 1: |
// First (regular) update, we should upload 2 resources (thumb, and |
// backtrack). |
EXPECT_EQ(1, scrollbar_layer_->update_count()); |
- EXPECT_EQ(2u, upload_count); |
LoseContext(); |
break; |
case 2: |
// Second update, after the lost context, we should still upload 2 |
// resources even if the contents haven't changed. |
EXPECT_EQ(2, scrollbar_layer_->update_count()); |
- EXPECT_EQ(2u, upload_count); |
EndTest(); |
break; |
default: |
@@ -1602,5 +1599,86 @@ |
SINGLE_AND_MULTI_THREAD_TEST_F( |
LayerTreeHostTestCannotCreateIfCannotCreateOutputSurface); |
+// Test handling of lost resource with the UI resource manager. |
+class UIResourceLostContext : public LayerTreeHostContextTest { |
+ public: |
+ UIResourceLostContext() : time_step_(0) { |
+ ui_resource_client_ = new TestUIResourceClient(); |
+ } |
+ |
+ virtual void BeginTest() OVERRIDE { |
+ PostSetNeedsCommitToMainThread(); |
+ } |
+ |
+ virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
+ LayerTreeHostContextTest::CommitCompleteOnThread(impl); |
+ switch (time_step_) { |
+ case 0: |
+ ui_resource_client_->CreateResource(layer_tree_host()); |
+ // A valid UIResourceId. |
+ EXPECT_NE(0, ui_resource_client_->id); |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 1: |
+ // A valid Resource Id on the impl-side. |
enne (OOO)
2013/07/22 23:09:15
I'm not sure what this comment is trying to say.
powei
2013/07/24 02:28:29
Done. Changed wording.
|
+ if (!layer_tree_host()->settings().impl_side_painting) { |
+ EXPECT_NE(0u, |
+ impl->ResourceIdForUIResource(ui_resource_client_->id)); |
+ } |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 2: |
+ LoseContext(); |
+ // Resource Id on the impl-side should no longer be valid after |
+ // context is lost. |
+ EXPECT_EQ(0u, |
+ impl->ResourceIdForUIResource(ui_resource_client_->id)); |
+ 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(1u, ui_resource_client_->lost_resource_count); |
+ // Resource Id on the impl-side have been recreated as well. Note |
+ // that the same UIResourceId persists after the context lost. |
+ if (!layer_tree_host()->settings().impl_side_painting) { |
+ EXPECT_NE(0u, |
+ impl->ResourceIdForUIResource(ui_resource_client_->id)); |
+ } |
+ PostSetNeedsCommitToMainThread(); |
+ break; |
+ case 4: |
+ EndTest(); |
+ break; |
+ } |
+ } |
+ |
+ virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE { |
+ LayerTreeHostContextTest::DidActivateTreeOnThread(impl); |
+ switch (time_step_) { |
+ case 1: |
+ if (layer_tree_host()->settings().impl_side_painting) { |
enne (OOO)
2013/07/22 23:09:15
Does this even get called for non-impl-side painti
powei
2013/07/24 02:28:29
Done. I wasn't sure, but apparently it does get c
|
+ EXPECT_NE(0u, |
+ impl->ResourceIdForUIResource(ui_resource_client_->id)); |
+ } |
+ break; |
+ case 3: |
+ if (layer_tree_host()->settings().impl_side_painting) { |
+ EXPECT_NE(0u, |
+ impl->ResourceIdForUIResource(ui_resource_client_->id)); |
+ } |
+ break; |
+ } |
+ ++time_step_; |
+ } |
+ |
+ virtual void AfterTest() OVERRIDE {} |
+ |
+ private: |
+ int time_step_; |
+ scoped_refptr<TestUIResourceClient> ui_resource_client_; |
+}; |
+ |
+SINGLE_AND_MULTI_THREAD_TEST_F(UIResourceLostContext); |
+ |
} // namespace |
} // namespace cc |