Chromium Code Reviews| Index: cc/trees/layer_tree_host_unittest_delegated.cc |
| diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc |
| index 79c615d2318f941a4281d077f7cf77161baeee6b..b6980ff1ef756385dce5254e45b231b88d9640a4 100644 |
| --- a/cc/trees/layer_tree_host_unittest_delegated.cc |
| +++ b/cc/trees/layer_tree_host_unittest_delegated.cc |
| @@ -11,6 +11,8 @@ |
| #include "base/synchronization/waitable_event.h" |
| #include "base/threading/thread.h" |
| #include "base/time/time.h" |
| +#include "cc/layers/delegated_frame_provider.h" |
| +#include "cc/layers/delegated_frame_resource_collection.h" |
| #include "cc/layers/delegated_renderer_layer.h" |
| #include "cc/layers/delegated_renderer_layer_client.h" |
| #include "cc/layers/delegated_renderer_layer_impl.h" |
| @@ -188,12 +190,6 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest { |
| frame->render_pass_list[0]->quad_list.push_back(quad.PassAs<DrawQuad>()); |
| } |
| - scoped_ptr<DelegatedFrameData> CreateEmptyFrameData() { |
| - scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
| - return frame.Pass(); |
| - } |
| - |
| - |
| static ResourceProvider::ResourceId AppendResourceId( |
| std::vector<ResourceProvider::ResourceId>* resources_in_last_sent_frame, |
| ResourceProvider::ResourceId resource_id) { |
| @@ -208,13 +204,9 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest { |
| return; |
| std::vector<ResourceProvider::ResourceId> resources_in_last_sent_frame; |
| - for (size_t i = 0; i < delegated_frame_data->render_pass_list.size(); ++i) { |
| - RenderPass* pass = delegated_frame_data->render_pass_list.at(i); |
| - for (size_t j = 0; j < pass->quad_list.size(); ++j) { |
| - DrawQuad* quad = pass->quad_list[j]; |
| - quad->IterateResources(base::Bind(&AppendResourceId, |
| - &resources_in_last_sent_frame)); |
| - } |
| + for (size_t i = 0; i < delegated_frame_data->resource_list.size(); ++i) { |
| + resources_in_last_sent_frame.push_back( |
| + delegated_frame_data->resource_list[i].id); |
| } |
| std::vector<ResourceProvider::ResourceId> resources_to_return; |
| @@ -245,21 +237,19 @@ class LayerTreeHostDelegatedTest : public LayerTreeTest { |
| class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer |
| : public LayerTreeHostDelegatedTest, |
| - public DelegatedRendererLayerClient { |
| + public DelegatedRendererLayerClient, |
| + public DelegatedFrameResourceCollectionClient { |
| public: |
| - LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() : available_(false) {} |
| + LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() |
| + : resource_collection_( |
| + make_scoped_ptr(new DelegatedFrameResourceCollection(this))), |
| + available_(false) {} |
| virtual void SetupTree() OVERRIDE { |
| root_ = Layer::Create(); |
| root_->SetAnchorPoint(gfx::PointF()); |
| root_->SetBounds(gfx::Size(10, 10)); |
| - delegated_ = FakeDelegatedRendererLayer::Create(this); |
| - delegated_->SetAnchorPoint(gfx::PointF()); |
| - delegated_->SetBounds(gfx::Size(10, 10)); |
| - delegated_->SetIsDrawable(true); |
| - |
| - root_->AddChild(delegated_); |
| layer_tree_host()->SetRootLayer(root_); |
| LayerTreeHostDelegatedTest::SetupTree(); |
| } |
| @@ -268,10 +258,42 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer |
| PostSetNeedsCommitToMainThread(); |
| } |
| + void SetFrameData(scoped_ptr<DelegatedFrameData> frame_data) { |
| + RenderPass* root_pass = frame_data->render_pass_list.back(); |
| + gfx::Size frame_size = root_pass->output_rect.size(); |
| + |
| + if (frame_provider_ && frame_size == frame_provider_->frame_size()) { |
| + frame_provider_->SetFrameData(frame_data.Pass()); |
| + return; |
| + } |
| + |
| + if (delegated_.get()) { |
| + delegated_->RemoveFromParent(); |
| + delegated_ = NULL; |
| + frame_provider_.reset(); |
| + } |
| + |
| + frame_provider_ = make_scoped_ptr(new DelegatedFrameProvider( |
| + resource_collection_.get(), frame_data.Pass())); |
| + |
| + CreateDelegatedLayer(frame_provider_.get()); |
| + } |
| + |
| + void CreateDelegatedLayer(DelegatedFrameProvider* frame_provider) { |
| + delegated_ = FakeDelegatedRendererLayer::Create(this, frame_provider); |
| + delegated_->SetAnchorPoint(gfx::PointF()); |
| + delegated_->SetBounds(gfx::Size(10, 10)); |
| + delegated_->SetIsDrawable(true); |
| + |
| + root_->AddChild(delegated_); |
| + } |
| + |
| virtual void AfterTest() OVERRIDE {} |
| // DelegatedRendererLayerClient implementation. |
| virtual void DidCommitFrameData() OVERRIDE {} |
| + |
| + // DelegatedFrameProviderClient implementation. |
| virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; } |
| bool TestAndResetAvailable() { |
| @@ -281,6 +303,8 @@ class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer |
| } |
| protected: |
| + scoped_ptr<DelegatedFrameResourceCollection> resource_collection_; |
| + scoped_ptr<DelegatedFrameProvider> frame_provider_; |
| scoped_refptr<Layer> root_; |
| scoped_refptr<DelegatedRendererLayer> delegated_; |
| bool available_; |
| @@ -302,8 +326,7 @@ class LayerTreeHostDelegatedTestClientDidCommitCallback |
| } |
| virtual void BeginTest() OVERRIDE { |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
| - gfx::Rect(0, 0, 1, 1))); |
| + SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -329,11 +352,13 @@ class LayerTreeHostDelegatedTestCreateChildId |
| virtual void DidCommit() OVERRIDE { |
| if (TestEnded()) |
| return; |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
| - gfx::Rect(0, 0, 1, 1))); |
| + SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
| } |
| virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { |
| + if (host_impl->active_tree()->source_frame_number() < 1) |
| + return; |
| + |
| LayerImpl* root_impl = host_impl->active_tree()->root_layer(); |
| FakeDelegatedRendererLayerImpl* delegated_impl = |
| static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); |
| @@ -391,7 +416,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_NoFilters |
| scoped_ptr<DelegatedFrameData> frame = |
| CreateFrameData(gfx::Rect(0, 0, 1, 1), |
| gfx::Rect(0, 0, 1, 1)); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -423,7 +448,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters |
| gfx::Rect(0, 0, 1, 1), |
| filters, |
| FilterOperations()); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -456,7 +481,7 @@ class LayerTreeHostDelegatedTestOffscreenContext_BackgroundFilters |
| gfx::Rect(0, 0, 1, 1), |
| FilterOperations(), |
| filters); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -477,21 +502,24 @@ class LayerTreeHostDelegatedTestOffscreenContext_Filters_AddedToTree |
| : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { |
| protected: |
| virtual void BeginTest() OVERRIDE { |
| - scoped_ptr<DelegatedFrameData> frame = |
| - CreateFrameData(gfx::Rect(0, 0, 1, 1), |
| - gfx::Rect(0, 0, 1, 1)); |
| + scoped_ptr<DelegatedFrameData> frame_no_filters = |
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + |
| + scoped_ptr<DelegatedFrameData> frame_with_filters = |
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| FilterOperations filters; |
| filters.Append(FilterOperation::CreateGrayscaleFilter(0.5f)); |
| - AddRenderPass(frame.get(), |
| + AddRenderPass(frame_with_filters.get(), |
| RenderPass::Id(2, 1), |
| gfx::Rect(0, 0, 1, 1), |
| gfx::Rect(0, 0, 1, 1), |
| filters, |
| FilterOperations()); |
| + SetFrameData(frame_no_filters.Pass()); |
| delegated_->RemoveFromParent(); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame_with_filters.Pass()); |
| layer_tree_host()->root_layer()->AddChild(delegated_); |
| PostSetNeedsCommitToMainThread(); |
| @@ -522,100 +550,96 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage |
| case 1: |
| // The first time the layer gets a frame the whole layer should be |
| // damaged. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 1, 1), |
| - gfx::Rect(0, 0, 1, 1))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1))); |
| break; |
| case 2: |
| + // A different frame size will damage the whole layer. |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(0, 0, 0, 0))); |
| + break; |
| + case 3: |
| // Should create a total amount of gfx::Rect(2, 2, 10, 6) damage. |
| // The frame size is 20x20 while the layer is 10x10, so this should |
| // produce a gfx::Rect(1, 1, 5, 3) damage rect. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20), |
| - gfx::Rect(2, 2, 5, 5))); |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 20, 20), |
| - gfx::Rect(7, 2, 5, 6))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(2, 2, 5, 5))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(7, 2, 5, 6))); |
| break; |
| - case 3: |
| + case 4: |
| // Should create zero damage. |
| layer_tree_host()->SetNeedsCommit(); |
| break; |
| - case 4: |
| + case 5: |
| // Should damage the full viewport. |
| delegated_->SetBounds(gfx::Size(2, 2)); |
| break; |
| - case 5: |
| + case 6: |
| // Should create zero damage. |
| layer_tree_host()->SetNeedsCommit(); |
| break; |
| - case 6: |
| - // Should damage the full layer. |
| + case 7: |
| + // Should damage the full layer, tho the frame size is not changing. |
| delegated_->SetBounds(gfx::Size(6, 6)); |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), |
| - gfx::Rect(1, 1, 2, 2))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 20, 20), gfx::Rect(1, 1, 2, 2))); |
| break; |
| - case 7: |
| + case 8: |
| // Should create zero damage. |
| layer_tree_host()->SetNeedsCommit(); |
| break; |
| - case 8: |
| + case 9: |
| // Should damage the full layer. |
| delegated_->SetDisplaySize(gfx::Size(10, 10)); |
| break; |
| - case 9: |
| + case 10: |
| // Should create zero damage. |
| layer_tree_host()->SetNeedsCommit(); |
| break; |
| - case 10: |
| - // Setting an empty frame should damage the whole layer the |
| - // first time. |
| - delegated_->SetFrameData(CreateEmptyFrameData()); |
| - break; |
| case 11: |
| - // Setting an empty frame shouldn't damage anything after the |
| - // first time. |
| - delegated_->SetFrameData(CreateEmptyFrameData()); |
| + // Changing the frame size damages the full layer. |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(4, 4, 1, 1))); |
| break; |
| case 12: |
| - // Having valid content to display agains should damage the whole layer. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), |
| - gfx::Rect(5, 5, 1, 1))); |
| - break; |
| - case 13: |
| // An invalid frame isn't used, so it should not cause damage. |
| - delegated_->SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 10, 10), |
| - gfx::Rect(5, 5, 1, 1))); |
| + SetFrameData(CreateInvalidFrameData(gfx::Rect(0, 0, 5, 5), |
| + gfx::Rect(4, 4, 1, 1))); |
| break; |
| - case 14: |
| + case 13: |
| // Should create gfx::Rect(1, 1, 2, 2) of damage. The frame size is |
| // 5x5 and the display size is now set to 10x10, so this should result |
| // in a gfx::Rect(2, 2, 4, 4) damage rect. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), |
| - gfx::Rect(1, 1, 2, 2))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); |
| break; |
| - case 15: |
| + case 14: |
| // Should create zero damage. |
| layer_tree_host()->SetNeedsCommit(); |
| break; |
| - case 16: |
| + case 15: |
| // Moving the layer out of the tree and back in will damage the whole |
| // impl layer. |
| delegated_->RemoveFromParent(); |
| layer_tree_host()->root_layer()->AddChild(delegated_); |
| break; |
| - case 17: |
| + case 16: |
| // Make a larger frame with lots of damage. Then a frame smaller than |
| // the first frame's damage. The entire layer should be damaged, but |
| // nothing more. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), |
| - gfx::Rect(0, 0, 10, 10))); |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 5, 5), |
| - gfx::Rect(1, 1, 2, 2))); |
| - break; |
| - case 18: |
| - // Make a frame with lots of damage. Then replace it with an empty |
| - // frame. The entire layer should be damaged, but nothing more. |
| - delegated_->SetFrameData(CreateFrameData(gfx::Rect(0, 0, 10, 10), |
| - gfx::Rect(0, 0, 10, 10))); |
| - delegated_->SetFrameData(CreateEmptyFrameData()); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 5, 5), gfx::Rect(1, 1, 2, 2))); |
| + break; |
| + case 17: |
| + // Make a frame with lots of damage. Then replace it with a frame with |
| + // no damage. The entire layer should be damaged, but nothing more. |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 10, 10))); |
| + SetFrameData( |
| + CreateFrameData(gfx::Rect(0, 0, 10, 10), gfx::Rect(0, 0, 0, 0))); |
| break; |
| } |
| first_draw_for_source_frame_ = true; |
| @@ -648,71 +672,67 @@ class LayerTreeHostDelegatedTestLayerUsesFrameDamage |
| damage_rect.ToString()); |
| break; |
| case 2: |
| - EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 3: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(1.f, 1.f, 5.f, 3.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 4: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 5: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 6: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 7: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 8: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 9: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 10: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 11: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 12: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 13: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 14: |
| - EXPECT_EQ(gfx::RectF(2.f, 2.f, 4.f, 4.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 15: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 0.f, 0.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 16: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| break; |
| case 17: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| - damage_rect.ToString()); |
| - break; |
| - case 18: |
| - EXPECT_EQ(gfx::RectF(0.f, 0.f, 6.f, 6.f).ToString(), |
| + EXPECT_EQ(gfx::RectF(0.f, 0.f, 10.f, 10.f).ToString(), |
| damage_rect.ToString()); |
| EndTest(); |
| break; |
| @@ -738,7 +758,7 @@ class LayerTreeHostDelegatedTestMergeResources |
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame1.get(), 999); |
| AddTransferableResource(frame1.get(), 999); |
| - delegated_->SetFrameData(frame1.Pass()); |
| + SetFrameData(frame1.Pass()); |
| // The second frame uses resource 999 still, but also adds 555. |
| scoped_ptr<DelegatedFrameData> frame2 = |
| @@ -747,12 +767,13 @@ class LayerTreeHostDelegatedTestMergeResources |
| AddTransferableResource(frame2.get(), 999); |
| AddTextureQuad(frame2.get(), 555); |
| AddTransferableResource(frame2.get(), 555); |
| - delegated_->SetFrameData(frame2.Pass()); |
| + SetFrameData(frame2.Pass()); |
| // The resource 999 from frame1 is returned since it is still on the main |
| // thread. |
| ReturnedResourceArray returned_resources; |
| - delegated_->TakeUnusedResourcesForChildCompositor(&returned_resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor( |
| + &returned_resources); |
| { |
| unsigned expected[] = {999}; |
| EXPECT_RESOURCES(expected, returned_resources); |
| @@ -799,7 +820,7 @@ class LayerTreeHostDelegatedTestRemapResourcesInQuads |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -859,11 +880,11 @@ class LayerTreeHostDelegatedTestReturnUnusedResources |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // All of the resources are in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -873,11 +894,11 @@ class LayerTreeHostDelegatedTestReturnUnusedResources |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 3: |
| // 555 is no longer in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {555}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -886,7 +907,7 @@ class LayerTreeHostDelegatedTestReturnUnusedResources |
| // Stop using any resources. |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 4: |
| // Postpone collecting resources for a frame. They should still be there |
| @@ -896,7 +917,7 @@ class LayerTreeHostDelegatedTestReturnUnusedResources |
| case 5: |
| // 444 and 999 are no longer in use. We sent two refs to 999, so we |
| // should get two back. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {444, 999, 999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -908,7 +929,8 @@ class LayerTreeHostDelegatedTestReturnUnusedResources |
| // Resources are never immediately released. |
| ReturnedResourceArray empty_resources; |
| - delegated_->TakeUnusedResourcesForChildCompositor(&empty_resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor( |
| + &empty_resources); |
| EXPECT_EQ(0u, empty_resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| } |
| @@ -946,11 +968,11 @@ class LayerTreeHostDelegatedTestReusedResources |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // All of the resources are in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -958,10 +980,10 @@ class LayerTreeHostDelegatedTestReusedResources |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 999); |
| AddTransferableResource(frame.get(), 999); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // Resource are not immediately released. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -971,12 +993,12 @@ class LayerTreeHostDelegatedTestReusedResources |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 3: |
| // The 999 resource is the only unused one. Two references were sent, so |
| // two should be returned. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {999, 999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1019,11 +1041,11 @@ class LayerTreeHostDelegatedTestFrameBeforeAck |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // All of the resources are in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1031,17 +1053,17 @@ class LayerTreeHostDelegatedTestFrameBeforeAck |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 999); |
| AddTransferableResource(frame.get(), 999); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // Resource are not immediately released. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| // The parent compositor (this one) does a commit. |
| break; |
| case 3: |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {444, 555}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1054,7 +1076,7 @@ class LayerTreeHostDelegatedTestFrameBeforeAck |
| AddTextureQuad(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| } |
| } |
| @@ -1121,11 +1143,11 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // All of the resources are in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1133,10 +1155,10 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 999); |
| AddTransferableResource(frame.get(), 999); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // Resource are not immediately released. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1153,11 +1175,11 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // The resources are used by the new frame but are returned anyway since |
| // we passed them again. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {444, 555}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1165,7 +1187,7 @@ class LayerTreeHostDelegatedTestFrameBeforeTakeResources |
| } |
| break; |
| case 4: |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| EndTest(); |
| @@ -1241,11 +1263,11 @@ class LayerTreeHostDelegatedTestBadFrame |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // All of the resources are in use. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1259,13 +1281,13 @@ class LayerTreeHostDelegatedTestBadFrame |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| AddTextureQuad(frame.get(), 775); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // The parent compositor (this one) does a commit. |
| break; |
| case 3: |
| // The bad frame's resource is given back to the child compositor. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {444}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1275,11 +1297,11 @@ class LayerTreeHostDelegatedTestBadFrame |
| // Now send a good frame with 999 again. |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 999); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 4: |
| // The unused 555 from the last good frame is now released. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {555}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1392,11 +1414,11 @@ class LayerTreeHostDelegatedTestUnnamedResource |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // The unused resource should be returned. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1453,18 +1475,18 @@ class LayerTreeHostDelegatedTestDontLeakResource |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // But then we immediately stop using 999. |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| // The unused resources should be returned. 555 is still used, but it's |
| // returned once to account for the first frame. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {555, 999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1472,12 +1494,12 @@ class LayerTreeHostDelegatedTestDontLeakResource |
| } |
| // Send a frame with no resources in it. |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 3: |
| // The now unused resource 555 should be returned. |
| resources.clear(); |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {555}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1534,10 +1556,10 @@ class LayerTreeHostDelegatedTestResourceSentToParent |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1546,11 +1568,11 @@ class LayerTreeHostDelegatedTestResourceSentToParent |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 3: |
| // Since 999 is in the grandparent it is not returned. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1583,7 +1605,7 @@ class LayerTreeHostDelegatedTestResourceSentToParent |
| ReturnedResourceArray resources; |
| // 999 was returned from the grandparent and could be released. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1675,10 +1697,10 @@ class LayerTreeHostDelegatedTestCommitWithoutTake |
| AddTransferableResource(frame.get(), 555); |
| AddTextureQuad(frame.get(), 444); |
| AddTransferableResource(frame.get(), 444); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 2: |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| EXPECT_EQ(0u, resources.size()); |
| EXPECT_FALSE(TestAndResetAvailable()); |
| @@ -1686,7 +1708,7 @@ class LayerTreeHostDelegatedTestCommitWithoutTake |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // 999 and 444 will be returned for frame 1, but not 555 since it's in |
| // the current frame. |
| break; |
| @@ -1697,12 +1719,12 @@ class LayerTreeHostDelegatedTestCommitWithoutTake |
| AddTransferableResource(frame.get(), 999); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| break; |
| case 4: |
| // 555 from frame 1 and 2 isn't returned since it's still in use. 999 |
| // from frame 1 is returned though. |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {444, 999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1710,12 +1732,12 @@ class LayerTreeHostDelegatedTestCommitWithoutTake |
| } |
| frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be |
| // returned once for frame 3. |
| break; |
| case 5: |
| - delegated_->TakeUnusedResourcesForChildCompositor(&resources); |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| { |
| unsigned expected[] = {555, 555, 555, 999}; |
| EXPECT_RESOURCES(expected, resources); |
| @@ -1790,7 +1812,7 @@ class DelegatedFrameIsActivatedDuringCommit |
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 999); |
| AddTransferableResource(frame.get(), 999); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| PostSetNeedsCommitToMainThread(); |
| } |
| @@ -1828,7 +1850,7 @@ class DelegatedFrameIsActivatedDuringCommit |
| CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| AddTextureQuad(frame.get(), 555); |
| AddTransferableResource(frame.get(), 555); |
| - delegated_->SetFrameData(frame.Pass()); |
| + SetFrameData(frame.Pass()); |
| // So this commit number should complete after the second activate. |
| EXPECT_EQ(1, layer_tree_host()->source_frame_number()); |
| break; |
| @@ -1859,6 +1881,14 @@ class DelegatedFrameIsActivatedDuringCommit |
| // The activate to remove the layer should have happened before now. |
| base::AutoLock lock(activate_lock_); |
| EXPECT_EQ(3, activate_count_); |
| + |
| + ReturnedResourceArray resources; |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + { |
| + unsigned expected[] = {999, 555}; |
| + EXPECT_RESOURCES(expected, resources); |
| + EXPECT_TRUE(TestAndResetAvailable()); |
| + } |
| break; |
| } |
| } |
| @@ -1876,5 +1906,139 @@ class DelegatedFrameIsActivatedDuringCommit |
| SINGLE_AND_MULTI_THREAD_TEST_F( |
| DelegatedFrameIsActivatedDuringCommit); |
| +class LayerTreeHostDelegatedTestTwoImplLayers |
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { |
| + public: |
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| + |
| + virtual void DidCommitAndDrawFrame() OVERRIDE { |
| + scoped_ptr<DelegatedFrameData> frame; |
| + ReturnedResourceArray resources; |
| + |
| + int next_source_frame_number = layer_tree_host()->source_frame_number(); |
| + switch (next_source_frame_number) { |
| + case 1: |
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + AddTextureQuad(frame.get(), 999); |
| + AddTransferableResource(frame.get(), 999); |
| + AddTextureQuad(frame.get(), 555); |
| + AddTransferableResource(frame.get(), 555); |
| + SetFrameData(frame.Pass()); |
| + break; |
| + case 2: |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + EXPECT_EQ(0u, resources.size()); |
| + EXPECT_FALSE(TestAndResetAvailable()); |
| + |
| + // Remove the delegated layer and replace it with a new one. Use the |
| + // same frame and resources for it. |
| + delegated_->RemoveFromParent(); |
| + delegated_ = NULL; |
| + CreateDelegatedLayer(frame_provider_.get()); |
| + break; |
| + case 3: |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + EXPECT_EQ(0u, resources.size()); |
| + EXPECT_FALSE(TestAndResetAvailable()); |
| + |
| + // Use a frame with no resources in it. |
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + SetFrameData(frame.Pass()); |
| + break; |
| + case 4: |
| + // We gave one frame to the frame provider, so we should get one |
| + // ref back for each resource. |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + { |
| + unsigned expected[] = {555, 999}; |
| + EXPECT_RESOURCES(expected, resources); |
| + EXPECT_TRUE(TestAndResetAvailable()); |
| + } |
| + EndTest(); |
| + break; |
| + } |
| + } |
| + |
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, |
| + bool result) OVERRIDE { |
| + ReturnUnusedResourcesFromParent(host_impl); |
| + } |
| + |
| + virtual void AfterTest() OVERRIDE {} |
| +}; |
| + |
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestTwoImplLayers); |
| + |
| +class LayerTreeHostDelegatedTestTwoImplLayersTwoFrames |
| + : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { |
| + public: |
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); } |
| + |
| + virtual void DidCommitAndDrawFrame() OVERRIDE { |
| + scoped_ptr<DelegatedFrameData> frame; |
| + ReturnedResourceArray resources; |
| + |
| + int next_source_frame_number = layer_tree_host()->source_frame_number(); |
| + switch (next_source_frame_number) { |
| + case 1: |
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + AddTextureQuad(frame.get(), 999); |
| + AddTransferableResource(frame.get(), 999); |
| + AddTextureQuad(frame.get(), 555); |
| + AddTransferableResource(frame.get(), 555); |
| + SetFrameData(frame.Pass()); |
| + break; |
| + case 2: |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + EXPECT_EQ(0u, resources.size()); |
| + EXPECT_FALSE(TestAndResetAvailable()); |
| + |
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + AddTextureQuad(frame.get(), 999); |
| + AddTransferableResource(frame.get(), 999); |
| + AddTextureQuad(frame.get(), 555); |
| + AddTransferableResource(frame.get(), 555); |
| + |
| + // Remove the delegated layer and replace it with a new one. Make a new |
| + // frame but with the same resources for it. |
| + delegated_->RemoveFromParent(); |
| + delegated_ = NULL; |
| + frame_provider_->SetFrameData(frame.Pass()); |
| + CreateDelegatedLayer(frame_provider_.get()); |
| + break; |
| + case 3: |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + EXPECT_EQ(0u, resources.size()); |
| + EXPECT_FALSE(TestAndResetAvailable()); |
| + |
| + // Use a frame with no resources in it. |
| + frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); |
| + SetFrameData(frame.Pass()); |
| + break; |
| + case 4: |
| + // We gave two frames to the frame provider, so we should get two |
| + // refs back for each resource. |
| + resource_collection_->TakeUnusedResourcesForChildCompositor(&resources); |
| + { |
| + unsigned expected[] = {555, 555, 999, 999}; |
| + EXPECT_RESOURCES(expected, resources); |
| + EXPECT_TRUE(TestAndResetAvailable()); |
| + } |
| + EndTest(); |
| + break; |
| + } |
| + } |
| + |
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, |
| + bool result) OVERRIDE { |
| + ReturnUnusedResourcesFromParent(host_impl); |
| + } |
| + |
| + virtual void AfterTest() OVERRIDE {} |
| +}; |
| + |
| +SINGLE_AND_MULTI_THREAD_TEST_F( |
| + LayerTreeHostDelegatedTestTwoImplLayersTwoFrames); |
|
piman
2013/10/04 23:42:25
Could we add one test that tries to put a layer in
danakj
2013/10/07 21:57:39
Done. The main thread needs to hold a reference, s
|
| + |
| } // namespace |
| } // namespace cc |