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

Side by Side Diff: cc/layer_tree_host_unittest_delegated.cc

Issue 12385085: cc: Unused resources should be given back to the child compositor (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layer_tree_host.h" 5 #include "cc/layer_tree_host.h"
6 6
7 #include "cc/delegated_frame_data.h" 7 #include "cc/delegated_frame_data.h"
8 #include "cc/delegated_renderer_layer.h" 8 #include "cc/delegated_renderer_layer.h"
9 #include "cc/delegated_renderer_layer_impl.h" 9 #include "cc/delegated_renderer_layer_impl.h"
10 #include "cc/layer_tree_impl.h" 10 #include "cc/layer_tree_impl.h"
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 357
358 const ResourceProvider::ResourceIdMap& map = 358 const ResourceProvider::ResourceIdMap& map =
359 host_impl->resourceProvider()->getChildToParentMap( 359 host_impl->resourceProvider()->getChildToParentMap(
360 delegated_impl->ChildId()); 360 delegated_impl->ChildId());
361 361
362 // Both frames' resources should be in the parent's resource provider. 362 // Both frames' resources should be in the parent's resource provider.
363 EXPECT_EQ(2u, map.size()); 363 EXPECT_EQ(2u, map.size());
364 EXPECT_EQ(1u, map.count(999)); 364 EXPECT_EQ(1u, map.count(999));
365 EXPECT_EQ(1u, map.count(555)); 365 EXPECT_EQ(1u, map.count(555));
366 366
367 // Both frames' resources should be saved on the layer.
368 EXPECT_EQ(2u, delegated_impl->Resources().size());
369 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
370 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(555)->second));
371
372 endTest(); 367 endTest();
373 } 368 }
374 369
375 virtual void afterTest() OVERRIDE {} 370 virtual void afterTest() OVERRIDE {}
376 }; 371 };
377 372
378 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestMergeResources) 373 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestMergeResources)
379 374
380 class LayerTreeHostDelegatedTestRemapResourcesInQuads 375 class LayerTreeHostDelegatedTestRemapResourcesInQuads
381 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 376 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 const ResourceProvider::ResourceIdMap& map = 625 const ResourceProvider::ResourceIdMap& map =
631 host_impl->resourceProvider()->getChildToParentMap( 626 host_impl->resourceProvider()->getChildToParentMap(
632 delegated_impl->ChildId()); 627 delegated_impl->ChildId());
633 628
634 // The bad frame should be dropped. So we should only have one quad (the 629 // The bad frame should be dropped. So we should only have one quad (the
635 // one with resource 999) on the impl tree. And only 999 will be present 630 // one with resource 999) on the impl tree. And only 999 will be present
636 // in the parent's resource provider. 631 // in the parent's resource provider.
637 EXPECT_EQ(1u, map.size()); 632 EXPECT_EQ(1u, map.size());
638 EXPECT_EQ(1u, map.count(999)); 633 EXPECT_EQ(1u, map.count(999));
639 634
640 EXPECT_EQ(1u, delegated_impl->Resources().size());
641 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
642
643 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; 635 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0];
644 EXPECT_EQ(1u, pass->quad_list.size()); 636 EXPECT_EQ(1u, pass->quad_list.size());
645 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast( 637 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(
646 pass->quad_list[0]); 638 pass->quad_list[0]);
647 EXPECT_EQ(map.find(999)->second, quad->resource_id); 639 EXPECT_EQ(map.find(999)->second, quad->resource_id);
648 640
649 endTest(); 641 endTest();
650 } 642 }
651 643
652 virtual void afterTest() OVERRIDE {} 644 virtual void afterTest() OVERRIDE {}
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
736 const ResourceProvider::ResourceIdMap& map = 728 const ResourceProvider::ResourceIdMap& map =
737 host_impl->resourceProvider()->getChildToParentMap( 729 host_impl->resourceProvider()->getChildToParentMap(
738 delegated_impl->ChildId()); 730 delegated_impl->ChildId());
739 731
740 // The bad frame should be dropped. So we should only have one quad (the 732 // The bad frame should be dropped. So we should only have one quad (the
741 // one with resource 999) on the impl tree. And only 999 will be present 733 // one with resource 999) on the impl tree. And only 999 will be present
742 // in the parent's resource provider. 734 // in the parent's resource provider.
743 EXPECT_EQ(1u, map.size()); 735 EXPECT_EQ(1u, map.size());
744 EXPECT_EQ(1u, map.count(999)); 736 EXPECT_EQ(1u, map.count(999));
745 737
746 EXPECT_EQ(1u, delegated_impl->Resources().size());
747 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
748
749 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; 738 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0];
750 EXPECT_EQ(1u, pass->quad_list.size()); 739 EXPECT_EQ(1u, pass->quad_list.size());
751 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast( 740 const TextureDrawQuad* quad = TextureDrawQuad::MaterialCast(
752 pass->quad_list[0]); 741 pass->quad_list[0]);
753 EXPECT_EQ(map.find(999)->second, quad->resource_id); 742 EXPECT_EQ(map.find(999)->second, quad->resource_id);
754 } 743 }
755 744
756 virtual void afterTest() OVERRIDE {} 745 virtual void afterTest() OVERRIDE {}
757 }; 746 };
758 747
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 delegated_impl->ChildId()); 831 delegated_impl->ChildId());
843 832
844 switch (host_impl->activeTree()->source_frame_number()) { 833 switch (host_impl->activeTree()->source_frame_number()) {
845 case 1: { 834 case 1: {
846 // We have the first good frame with just 990 and 555 in it. 835 // We have the first good frame with just 990 and 555 in it.
847 // layer. 836 // layer.
848 EXPECT_EQ(2u, map.size()); 837 EXPECT_EQ(2u, map.size());
849 EXPECT_EQ(1u, map.count(999)); 838 EXPECT_EQ(1u, map.count(999));
850 EXPECT_EQ(1u, map.count(555)); 839 EXPECT_EQ(1u, map.count(555));
851 840
852 EXPECT_EQ(2u, delegated_impl->Resources().size());
853 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
854 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(555)->second));
855
856 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; 841 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0];
857 EXPECT_EQ(2u, pass->quad_list.size()); 842 EXPECT_EQ(2u, pass->quad_list.size());
858 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast( 843 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast(
859 pass->quad_list[0]); 844 pass->quad_list[0]);
860 EXPECT_EQ(map.find(999)->second, quad1->resource_id); 845 EXPECT_EQ(map.find(999)->second, quad1->resource_id);
861 const TextureDrawQuad* quad2 = TextureDrawQuad::MaterialCast( 846 const TextureDrawQuad* quad2 = TextureDrawQuad::MaterialCast(
862 pass->quad_list[1]); 847 pass->quad_list[1]);
863 EXPECT_EQ(map.find(555)->second, quad2->resource_id); 848 EXPECT_EQ(map.find(555)->second, quad2->resource_id);
864 break; 849 break;
865 } 850 }
866 case 2: { 851 case 2: {
867 // We have all resources whose ownership has been given to the delegated 852 // We have all resources whose ownership has been given to the delegated
868 // layer. 853 // layer.
869 EXPECT_EQ(3u, map.size()); 854 EXPECT_EQ(3u, map.size());
870 EXPECT_EQ(1u, map.count(999)); 855 EXPECT_EQ(1u, map.count(999));
871 EXPECT_EQ(1u, map.count(555)); 856 EXPECT_EQ(1u, map.count(555));
872 EXPECT_EQ(1u, map.count(444)); 857 EXPECT_EQ(1u, map.count(444));
873 858
874 EXPECT_EQ(3u, delegated_impl->Resources().size());
875 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
876 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(555)->second));
877 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(444)->second));
878
879 // The bad frame is dropped though, we still have the frame with 999 and 859 // The bad frame is dropped though, we still have the frame with 999 and
880 // 555 in it. 860 // 555 in it.
881 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; 861 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0];
882 EXPECT_EQ(2u, pass->quad_list.size()); 862 EXPECT_EQ(2u, pass->quad_list.size());
883 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast( 863 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast(
884 pass->quad_list[0]); 864 pass->quad_list[0]);
885 EXPECT_EQ(map.find(999)->second, quad1->resource_id); 865 EXPECT_EQ(map.find(999)->second, quad1->resource_id);
886 const TextureDrawQuad* quad2 = TextureDrawQuad::MaterialCast( 866 const TextureDrawQuad* quad2 = TextureDrawQuad::MaterialCast(
887 pass->quad_list[1]); 867 pass->quad_list[1]);
888 EXPECT_EQ(map.find(555)->second, quad2->resource_id); 868 EXPECT_EQ(map.find(555)->second, quad2->resource_id);
889 break; 869 break;
890 } 870 }
891 case 3: { 871 case 3: {
892 // We have the new good frame with just 999 in it. 872 // We have the new good frame with just 999 in it.
893 EXPECT_EQ(1u, map.size()); 873 EXPECT_EQ(1u, map.size());
894 EXPECT_EQ(1u, map.count(999)); 874 EXPECT_EQ(1u, map.count(999));
895 875
896 EXPECT_EQ(1u, delegated_impl->Resources().size());
897 EXPECT_EQ(1u, delegated_impl->Resources().count(map.find(999)->second));
898
899 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0]; 876 const RenderPass* pass = delegated_impl->RenderPassesInDrawOrder()[0];
900 EXPECT_EQ(1u, pass->quad_list.size()); 877 EXPECT_EQ(1u, pass->quad_list.size());
901 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast( 878 const TextureDrawQuad* quad1 = TextureDrawQuad::MaterialCast(
902 pass->quad_list[0]); 879 pass->quad_list[0]);
903 EXPECT_EQ(map.find(999)->second, quad1->resource_id); 880 EXPECT_EQ(map.find(999)->second, quad1->resource_id);
904 break; 881 break;
905 } 882 }
906 } 883 }
907 } 884 }
908 885
909 virtual void afterTest() OVERRIDE {} 886 virtual void afterTest() OVERRIDE {}
910 }; 887 };
911 888
912 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestBadFrame) 889 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestBadFrame)
913 890
891 class LayerTreeHostDelegatedTestUnnamedResource
892 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
893 public:
894 virtual void beginTest() OVERRIDE {
895 postSetNeedsCommitToMainThread();
896 }
897
898 virtual void didCommit() OVERRIDE {
899 scoped_ptr<DelegatedFrameData> frame;
900 TransferableResourceArray resources;
901
902 int next_source_frame_number = m_layerTreeHost->commitNumber();
903 switch (next_source_frame_number) {
904 case 1:
905 // This frame includes two resources in it, but only uses one.
906 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
907 AddTransferableResource(frame.get(), 999);
908 AddTextureQuad(frame.get(), 555);
909 AddTransferableResource(frame.get(), 555);
910 delegated_->SetFrameData(frame.Pass());
911 break;
912 case 2:
913 // The unused resource should be returned.
914 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
915 EXPECT_EQ(1u, resources.size());
916 EXPECT_EQ(999, resources[0].id);
917
918 endTest();
919 break;
920 }
921 }
922
923 virtual void treeActivatedOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
924 if (host_impl->activeTree()->source_frame_number() != 1)
925 return;
926
927 LayerImpl* root_impl = host_impl->activeTree()->RootLayer();
928 FakeDelegatedRendererLayerImpl* delegated_impl =
929 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
930
931 const ResourceProvider::ResourceIdMap& map =
932 host_impl->resourceProvider()->getChildToParentMap(
933 delegated_impl->ChildId());
934
935 // The layer only held on to the resource that was used.
936 EXPECT_EQ(1u, map.size());
937 EXPECT_EQ(1u, map.count(555));
938 }
939
940 virtual void afterTest() OVERRIDE {}
941 };
942
943 SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostDelegatedTestUnnamedResource)
944
914 } // namespace 945 } // namespace
915 } // namespace cc 946 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698