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

Side by Side Diff: cc/trees/layer_tree_host_unittest_delegated.cc

Issue 24303008: cc: Provide notifications when resources are available. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: callback-rwhva2: fixandroid Created 7 years, 3 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/trees/layer_tree_host.h" 5 #include "cc/trees/layer_tree_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/location.h" 10 #include "base/location.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 output_surface()->ReturnResource(resources_to_return[i], &ack); 241 output_surface()->ReturnResource(resources_to_return[i], &ack);
242 host_impl->ReclaimResources(&ack); 242 host_impl->ReclaimResources(&ack);
243 host_impl->OnSwapBuffersComplete(); 243 host_impl->OnSwapBuffersComplete();
244 } 244 }
245 }; 245 };
246 246
247 class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer 247 class LayerTreeHostDelegatedTestCaseSingleDelegatedLayer
248 : public LayerTreeHostDelegatedTest, 248 : public LayerTreeHostDelegatedTest,
249 public DelegatedRendererLayerClient { 249 public DelegatedRendererLayerClient {
250 public: 250 public:
251 LayerTreeHostDelegatedTestCaseSingleDelegatedLayer() : available_(false) {}
252
251 virtual void SetupTree() OVERRIDE { 253 virtual void SetupTree() OVERRIDE {
252 root_ = Layer::Create(); 254 root_ = Layer::Create();
253 root_->SetAnchorPoint(gfx::PointF()); 255 root_->SetAnchorPoint(gfx::PointF());
254 root_->SetBounds(gfx::Size(10, 10)); 256 root_->SetBounds(gfx::Size(10, 10));
255 257
256 delegated_ = FakeDelegatedRendererLayer::Create(this); 258 delegated_ = FakeDelegatedRendererLayer::Create(this);
257 delegated_->SetAnchorPoint(gfx::PointF()); 259 delegated_->SetAnchorPoint(gfx::PointF());
258 delegated_->SetBounds(gfx::Size(10, 10)); 260 delegated_->SetBounds(gfx::Size(10, 10));
259 delegated_->SetIsDrawable(true); 261 delegated_->SetIsDrawable(true);
260 262
261 root_->AddChild(delegated_); 263 root_->AddChild(delegated_);
262 layer_tree_host()->SetRootLayer(root_); 264 layer_tree_host()->SetRootLayer(root_);
263 LayerTreeHostDelegatedTest::SetupTree(); 265 LayerTreeHostDelegatedTest::SetupTree();
264 } 266 }
265 267
266 virtual void BeginTest() OVERRIDE { 268 virtual void BeginTest() OVERRIDE {
267 PostSetNeedsCommitToMainThread(); 269 PostSetNeedsCommitToMainThread();
268 } 270 }
269 271
270 virtual void AfterTest() OVERRIDE {} 272 virtual void AfterTest() OVERRIDE {}
271 273
274 // DelegatedRendererLayerClient implementation.
272 virtual void DidCommitFrameData() OVERRIDE {} 275 virtual void DidCommitFrameData() OVERRIDE {}
276 virtual void UnusedResourcesAreAvailable() OVERRIDE { available_ = true; }
277
278 bool TestAndResetAvailable() {
279 bool available = available_;
280 available_ = false;
281 return available;
282 }
273 283
274 protected: 284 protected:
275 scoped_refptr<Layer> root_; 285 scoped_refptr<Layer> root_;
276 scoped_refptr<DelegatedRendererLayer> delegated_; 286 scoped_refptr<DelegatedRendererLayer> delegated_;
287 bool available_;
277 }; 288 };
278 289
279 class LayerTreeHostDelegatedTestClientDidCommitCallback 290 class LayerTreeHostDelegatedTestClientDidCommitCallback
280 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer { 291 : public LayerTreeHostDelegatedTestCaseSingleDelegatedLayer {
281 public: 292 public:
282 LayerTreeHostDelegatedTestClientDidCommitCallback() 293 LayerTreeHostDelegatedTestClientDidCommitCallback()
283 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(), 294 : LayerTreeHostDelegatedTestCaseSingleDelegatedLayer(),
284 num_did_commit_frame_data_(0) {} 295 num_did_commit_frame_data_(0) {}
285 296
286 virtual void DidCommit() OVERRIDE { 297 virtual void DidCommit() OVERRIDE {
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
739 AddTransferableResource(frame2.get(), 555); 750 AddTransferableResource(frame2.get(), 555);
740 delegated_->SetFrameData(frame2.Pass()); 751 delegated_->SetFrameData(frame2.Pass());
741 752
742 // The resource 999 from frame1 is returned since it is still on the main 753 // The resource 999 from frame1 is returned since it is still on the main
743 // thread. 754 // thread.
744 ReturnedResourceArray returned_resources; 755 ReturnedResourceArray returned_resources;
745 delegated_->TakeUnusedResourcesForChildCompositor(&returned_resources); 756 delegated_->TakeUnusedResourcesForChildCompositor(&returned_resources);
746 { 757 {
747 unsigned expected[] = {999}; 758 unsigned expected[] = {999};
748 EXPECT_RESOURCES(expected, returned_resources); 759 EXPECT_RESOURCES(expected, returned_resources);
760 EXPECT_TRUE(TestAndResetAvailable());
749 } 761 }
750 762
751 PostSetNeedsCommitToMainThread(); 763 PostSetNeedsCommitToMainThread();
752 } 764 }
753 765
754 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 766 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
755 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 767 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
756 FakeDelegatedRendererLayerImpl* delegated_impl = 768 FakeDelegatedRendererLayerImpl* delegated_impl =
757 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); 769 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
758 770
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
847 AddTextureQuad(frame.get(), 999); 859 AddTextureQuad(frame.get(), 999);
848 AddTransferableResource(frame.get(), 999); 860 AddTransferableResource(frame.get(), 999);
849 AddTextureQuad(frame.get(), 555); 861 AddTextureQuad(frame.get(), 555);
850 AddTransferableResource(frame.get(), 555); 862 AddTransferableResource(frame.get(), 555);
851 delegated_->SetFrameData(frame.Pass()); 863 delegated_->SetFrameData(frame.Pass());
852 break; 864 break;
853 case 2: 865 case 2:
854 // All of the resources are in use. 866 // All of the resources are in use.
855 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 867 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
856 EXPECT_EQ(0u, resources.size()); 868 EXPECT_EQ(0u, resources.size());
869 EXPECT_FALSE(TestAndResetAvailable());
857 870
858 // Keep using 999 but stop using 555. 871 // Keep using 999 but stop using 555.
859 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 872 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
860 AddTextureQuad(frame.get(), 999); 873 AddTextureQuad(frame.get(), 999);
861 AddTransferableResource(frame.get(), 999); 874 AddTransferableResource(frame.get(), 999);
862 AddTextureQuad(frame.get(), 444); 875 AddTextureQuad(frame.get(), 444);
863 AddTransferableResource(frame.get(), 444); 876 AddTransferableResource(frame.get(), 444);
864 delegated_->SetFrameData(frame.Pass()); 877 delegated_->SetFrameData(frame.Pass());
865 break; 878 break;
866 case 3: 879 case 3:
867 // 555 is no longer in use. 880 // 555 is no longer in use.
868 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 881 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
869 { 882 {
870 unsigned expected[] = {555}; 883 unsigned expected[] = {555};
871 EXPECT_RESOURCES(expected, resources); 884 EXPECT_RESOURCES(expected, resources);
885 EXPECT_TRUE(TestAndResetAvailable());
872 } 886 }
873 887
874 // Stop using any resources. 888 // Stop using any resources.
875 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 889 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
876 delegated_->SetFrameData(frame.Pass()); 890 delegated_->SetFrameData(frame.Pass());
877 break; 891 break;
878 case 4: 892 case 4:
879 // Postpone collecting resources for a frame. They should still be there 893 // Postpone collecting resources for a frame. They should still be there
880 // the next frame. 894 // the next frame.
881 layer_tree_host()->SetNeedsCommit(); 895 layer_tree_host()->SetNeedsCommit();
882 return; 896 return;
883 case 5: 897 case 5:
884 // 444 and 999 are no longer in use. We sent two refs to 999, so we 898 // 444 and 999 are no longer in use. We sent two refs to 999, so we
885 // should get two back. 899 // should get two back.
886 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 900 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
887 { 901 {
888 unsigned expected[] = {444, 999, 999}; 902 unsigned expected[] = {444, 999, 999};
889 EXPECT_RESOURCES(expected, resources); 903 EXPECT_RESOURCES(expected, resources);
904 EXPECT_TRUE(TestAndResetAvailable());
890 } 905 }
891 EndTest(); 906 EndTest();
892 break; 907 break;
893 } 908 }
894 909
895 // Resource are never immediately released. 910 // Resources are never immediately released.
896 ReturnedResourceArray empty_resources; 911 ReturnedResourceArray empty_resources;
897 delegated_->TakeUnusedResourcesForChildCompositor(&empty_resources); 912 delegated_->TakeUnusedResourcesForChildCompositor(&empty_resources);
898 EXPECT_TRUE(empty_resources.empty()); 913 EXPECT_EQ(0u, empty_resources.size());
914 EXPECT_FALSE(TestAndResetAvailable());
899 } 915 }
900 916
901 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 917 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
902 bool result) OVERRIDE { 918 bool result) OVERRIDE {
903 ReturnUnusedResourcesFromParent(host_impl); 919 ReturnUnusedResourcesFromParent(host_impl);
904 } 920 }
905 921
906 virtual void AfterTest() OVERRIDE {} 922 virtual void AfterTest() OVERRIDE {}
907 }; 923 };
908 924
(...skipping 21 matching lines...) Expand all
930 AddTextureQuad(frame.get(), 555); 946 AddTextureQuad(frame.get(), 555);
931 AddTransferableResource(frame.get(), 555); 947 AddTransferableResource(frame.get(), 555);
932 AddTextureQuad(frame.get(), 444); 948 AddTextureQuad(frame.get(), 444);
933 AddTransferableResource(frame.get(), 444); 949 AddTransferableResource(frame.get(), 444);
934 delegated_->SetFrameData(frame.Pass()); 950 delegated_->SetFrameData(frame.Pass());
935 break; 951 break;
936 case 2: 952 case 2:
937 // All of the resources are in use. 953 // All of the resources are in use.
938 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 954 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
939 EXPECT_EQ(0u, resources.size()); 955 EXPECT_EQ(0u, resources.size());
956 EXPECT_FALSE(TestAndResetAvailable());
940 957
941 // Keep using 999 but stop using 555 and 444. 958 // Keep using 999 but stop using 555 and 444.
942 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 959 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
943 AddTextureQuad(frame.get(), 999); 960 AddTextureQuad(frame.get(), 999);
944 AddTransferableResource(frame.get(), 999); 961 AddTransferableResource(frame.get(), 999);
945 delegated_->SetFrameData(frame.Pass()); 962 delegated_->SetFrameData(frame.Pass());
946 963
947 // Resource are not immediately released. 964 // Resource are not immediately released.
948 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 965 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
949 EXPECT_EQ(0u, resources.size()); 966 EXPECT_EQ(0u, resources.size());
967 EXPECT_FALSE(TestAndResetAvailable());
950 968
951 // Now using 555 and 444 again, but not 999. 969 // Now using 555 and 444 again, but not 999.
952 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 970 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
953 AddTextureQuad(frame.get(), 555); 971 AddTextureQuad(frame.get(), 555);
954 AddTransferableResource(frame.get(), 555); 972 AddTransferableResource(frame.get(), 555);
955 AddTextureQuad(frame.get(), 444); 973 AddTextureQuad(frame.get(), 444);
956 AddTransferableResource(frame.get(), 444); 974 AddTransferableResource(frame.get(), 444);
957 delegated_->SetFrameData(frame.Pass()); 975 delegated_->SetFrameData(frame.Pass());
958 break; 976 break;
959 case 3: 977 case 3:
960 // The 999 resource is the only unused one. Two references were sent, so 978 // The 999 resource is the only unused one. Two references were sent, so
961 // two should be returned. 979 // two should be returned.
962 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 980 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
963 { 981 {
964 unsigned expected[] = {999, 999}; 982 unsigned expected[] = {999, 999};
965 EXPECT_RESOURCES(expected, resources); 983 EXPECT_RESOURCES(expected, resources);
984 EXPECT_TRUE(TestAndResetAvailable());
966 } 985 }
967 EndTest(); 986 EndTest();
968 break; 987 break;
969 } 988 }
970 } 989 }
971 990
972 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 991 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
973 bool result) OVERRIDE { 992 bool result) OVERRIDE {
974 ReturnUnusedResourcesFromParent(host_impl); 993 ReturnUnusedResourcesFromParent(host_impl);
975 } 994 }
(...skipping 24 matching lines...) Expand all
1000 AddTextureQuad(frame.get(), 555); 1019 AddTextureQuad(frame.get(), 555);
1001 AddTransferableResource(frame.get(), 555); 1020 AddTransferableResource(frame.get(), 555);
1002 AddTextureQuad(frame.get(), 444); 1021 AddTextureQuad(frame.get(), 444);
1003 AddTransferableResource(frame.get(), 444); 1022 AddTransferableResource(frame.get(), 444);
1004 delegated_->SetFrameData(frame.Pass()); 1023 delegated_->SetFrameData(frame.Pass());
1005 break; 1024 break;
1006 case 2: 1025 case 2:
1007 // All of the resources are in use. 1026 // All of the resources are in use.
1008 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1027 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1009 EXPECT_EQ(0u, resources.size()); 1028 EXPECT_EQ(0u, resources.size());
1029 EXPECT_FALSE(TestAndResetAvailable());
1010 1030
1011 // Keep using 999 but stop using 555 and 444. 1031 // Keep using 999 but stop using 555 and 444.
1012 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1032 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1013 AddTextureQuad(frame.get(), 999); 1033 AddTextureQuad(frame.get(), 999);
1014 AddTransferableResource(frame.get(), 999); 1034 AddTransferableResource(frame.get(), 999);
1015 delegated_->SetFrameData(frame.Pass()); 1035 delegated_->SetFrameData(frame.Pass());
1016 1036
1017 // Resource are not immediately released. 1037 // Resource are not immediately released.
1018 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1038 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1019 EXPECT_EQ(0u, resources.size()); 1039 EXPECT_EQ(0u, resources.size());
1040 EXPECT_FALSE(TestAndResetAvailable());
1020 1041
1021 // The parent compositor (this one) does a commit. 1042 // The parent compositor (this one) does a commit.
1022 break; 1043 break;
1023 case 3: 1044 case 3:
1024 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1045 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1025 { 1046 {
1026 unsigned expected[] = {444, 555}; 1047 unsigned expected[] = {444, 555};
1027 EXPECT_RESOURCES(expected, resources); 1048 EXPECT_RESOURCES(expected, resources);
1049 EXPECT_TRUE(TestAndResetAvailable());
1028 } 1050 }
1029 1051
1030 // The child compositor sends a frame referring to resources not in the 1052 // The child compositor sends a frame referring to resources not in the
1031 // frame. 1053 // frame.
1032 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1054 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1033 AddTextureQuad(frame.get(), 999); 1055 AddTextureQuad(frame.get(), 999);
1034 AddTextureQuad(frame.get(), 555); 1056 AddTextureQuad(frame.get(), 555);
1035 AddTextureQuad(frame.get(), 444); 1057 AddTextureQuad(frame.get(), 444);
1036 delegated_->SetFrameData(frame.Pass()); 1058 delegated_->SetFrameData(frame.Pass());
1037 break; 1059 break;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 AddTextureQuad(frame.get(), 555); 1121 AddTextureQuad(frame.get(), 555);
1100 AddTransferableResource(frame.get(), 555); 1122 AddTransferableResource(frame.get(), 555);
1101 AddTextureQuad(frame.get(), 444); 1123 AddTextureQuad(frame.get(), 444);
1102 AddTransferableResource(frame.get(), 444); 1124 AddTransferableResource(frame.get(), 444);
1103 delegated_->SetFrameData(frame.Pass()); 1125 delegated_->SetFrameData(frame.Pass());
1104 break; 1126 break;
1105 case 2: 1127 case 2:
1106 // All of the resources are in use. 1128 // All of the resources are in use.
1107 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1129 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1108 EXPECT_EQ(0u, resources.size()); 1130 EXPECT_EQ(0u, resources.size());
1131 EXPECT_FALSE(TestAndResetAvailable());
1109 1132
1110 // Keep using 999 but stop using 555 and 444. 1133 // Keep using 999 but stop using 555 and 444.
1111 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1134 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1112 AddTextureQuad(frame.get(), 999); 1135 AddTextureQuad(frame.get(), 999);
1113 AddTransferableResource(frame.get(), 999); 1136 AddTransferableResource(frame.get(), 999);
1114 delegated_->SetFrameData(frame.Pass()); 1137 delegated_->SetFrameData(frame.Pass());
1115 1138
1116 // Resource are not immediately released. 1139 // Resource are not immediately released.
1117 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1140 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1118 EXPECT_EQ(0u, resources.size()); 1141 EXPECT_EQ(0u, resources.size());
1142 EXPECT_FALSE(TestAndResetAvailable());
1119 1143
1120 // The parent compositor (this one) does a commit. 1144 // The parent compositor (this one) does a commit.
1121 break; 1145 break;
1122 case 3: 1146 case 3:
1123 // The child compositor sends a frame before taking resources back 1147 // The child compositor sends a frame before taking resources back
1124 // from the previous commit. This frame makes use of the resources 555 1148 // from the previous commit. This frame makes use of the resources 555
1125 // and 444, which were just released during commit. 1149 // and 444, which were just released during commit.
1126 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1150 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1127 AddTextureQuad(frame.get(), 999); 1151 AddTextureQuad(frame.get(), 999);
1128 AddTransferableResource(frame.get(), 999); 1152 AddTransferableResource(frame.get(), 999);
1129 AddTextureQuad(frame.get(), 555); 1153 AddTextureQuad(frame.get(), 555);
1130 AddTransferableResource(frame.get(), 555); 1154 AddTransferableResource(frame.get(), 555);
1131 AddTextureQuad(frame.get(), 444); 1155 AddTextureQuad(frame.get(), 444);
1132 AddTransferableResource(frame.get(), 444); 1156 AddTransferableResource(frame.get(), 444);
1133 delegated_->SetFrameData(frame.Pass()); 1157 delegated_->SetFrameData(frame.Pass());
1134 1158
1135 // The resources are used by the new frame but are returned anyway since 1159 // The resources are used by the new frame but are returned anyway since
1136 // we passed them again. 1160 // we passed them again.
1137 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1161 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1138 { 1162 {
1139 unsigned expected[] = {444, 555}; 1163 unsigned expected[] = {444, 555};
1140 EXPECT_RESOURCES(expected, resources); 1164 EXPECT_RESOURCES(expected, resources);
1165 EXPECT_TRUE(TestAndResetAvailable());
1141 } 1166 }
1142 break; 1167 break;
1143 case 4: 1168 case 4:
1144 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1169 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1145 EXPECT_EQ(0u, resources.size()); 1170 EXPECT_EQ(0u, resources.size());
1171 EXPECT_FALSE(TestAndResetAvailable());
1146 EndTest(); 1172 EndTest();
1147 break; 1173 break;
1148 } 1174 }
1149 } 1175 }
1150 1176
1151 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1177 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1152 if (host_impl->active_tree()->source_frame_number() != 3) 1178 if (host_impl->active_tree()->source_frame_number() != 3)
1153 return; 1179 return;
1154 1180
1155 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 1181 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1215 AddTextureQuad(frame.get(), 999); 1241 AddTextureQuad(frame.get(), 999);
1216 AddTransferableResource(frame.get(), 999); 1242 AddTransferableResource(frame.get(), 999);
1217 AddTextureQuad(frame.get(), 555); 1243 AddTextureQuad(frame.get(), 555);
1218 AddTransferableResource(frame.get(), 555); 1244 AddTransferableResource(frame.get(), 555);
1219 delegated_->SetFrameData(frame.Pass()); 1245 delegated_->SetFrameData(frame.Pass());
1220 break; 1246 break;
1221 case 2: 1247 case 2:
1222 // All of the resources are in use. 1248 // All of the resources are in use.
1223 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1249 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1224 EXPECT_EQ(0u, resources.size()); 1250 EXPECT_EQ(0u, resources.size());
1251 EXPECT_FALSE(TestAndResetAvailable());
1225 1252
1226 // Generate a bad frame with a resource the layer doesn't have. The 1253 // Generate a bad frame with a resource the layer doesn't have. The
1227 // 885 and 775 resources are unknown, while ownership of the legit 444 1254 // 885 and 775 resources are unknown, while ownership of the legit 444
1228 // resource is passed in here. The bad frame does not use any of the 1255 // resource is passed in here. The bad frame does not use any of the
1229 // previous resources, 999 or 555. 1256 // previous resources, 999 or 555.
1230 // A bad quad is present both before and after the good quad. 1257 // A bad quad is present both before and after the good quad.
1231 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1258 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1232 AddTextureQuad(frame.get(), 885); 1259 AddTextureQuad(frame.get(), 885);
1233 AddTextureQuad(frame.get(), 444); 1260 AddTextureQuad(frame.get(), 444);
1234 AddTransferableResource(frame.get(), 444); 1261 AddTransferableResource(frame.get(), 444);
1235 AddTextureQuad(frame.get(), 775); 1262 AddTextureQuad(frame.get(), 775);
1236 delegated_->SetFrameData(frame.Pass()); 1263 delegated_->SetFrameData(frame.Pass());
1237 1264
1238 // The parent compositor (this one) does a commit. 1265 // The parent compositor (this one) does a commit.
1239 break; 1266 break;
1240 case 3: 1267 case 3:
1241 // The bad frame's resource is given back to the child compositor. 1268 // The bad frame's resource is given back to the child compositor.
1242 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1269 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1243 { 1270 {
1244 unsigned expected[] = {444}; 1271 unsigned expected[] = {444};
1245 EXPECT_RESOURCES(expected, resources); 1272 EXPECT_RESOURCES(expected, resources);
1273 EXPECT_TRUE(TestAndResetAvailable());
1246 } 1274 }
1247 1275
1248 // Now send a good frame with 999 again. 1276 // Now send a good frame with 999 again.
1249 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1277 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1250 AddTextureQuad(frame.get(), 999); 1278 AddTextureQuad(frame.get(), 999);
1251 delegated_->SetFrameData(frame.Pass()); 1279 delegated_->SetFrameData(frame.Pass());
1252 break; 1280 break;
1253 case 4: 1281 case 4:
1254 // The unused 555 from the last good frame is now released. 1282 // The unused 555 from the last good frame is now released.
1255 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1283 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1256 { 1284 {
1257 unsigned expected[] = {555}; 1285 unsigned expected[] = {555};
1258 EXPECT_RESOURCES(expected, resources); 1286 EXPECT_RESOURCES(expected, resources);
1287 EXPECT_TRUE(TestAndResetAvailable());
1259 } 1288 }
1260 1289
1261 EndTest(); 1290 EndTest();
1262 break; 1291 break;
1263 } 1292 }
1264 } 1293 }
1265 1294
1266 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl, 1295 virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
1267 bool result) OVERRIDE { 1296 bool result) OVERRIDE {
1268 if (host_impl->active_tree()->source_frame_number() < 1) 1297 if (host_impl->active_tree()->source_frame_number() < 1)
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1365 AddTextureQuad(frame.get(), 555); 1394 AddTextureQuad(frame.get(), 555);
1366 AddTransferableResource(frame.get(), 555); 1395 AddTransferableResource(frame.get(), 555);
1367 delegated_->SetFrameData(frame.Pass()); 1396 delegated_->SetFrameData(frame.Pass());
1368 break; 1397 break;
1369 case 2: 1398 case 2:
1370 // The unused resource should be returned. 1399 // The unused resource should be returned.
1371 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1400 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1372 { 1401 {
1373 unsigned expected[] = {999}; 1402 unsigned expected[] = {999};
1374 EXPECT_RESOURCES(expected, resources); 1403 EXPECT_RESOURCES(expected, resources);
1404 EXPECT_TRUE(TestAndResetAvailable());
1375 } 1405 }
1376 1406
1377 EndTest(); 1407 EndTest();
1378 break; 1408 break;
1379 } 1409 }
1380 } 1410 }
1381 1411
1382 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1412 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1383 if (host_impl->active_tree()->source_frame_number() != 1) 1413 if (host_impl->active_tree()->source_frame_number() != 1)
1384 return; 1414 return;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 AddTransferableResource(frame.get(), 555); 1462 AddTransferableResource(frame.get(), 555);
1433 delegated_->SetFrameData(frame.Pass()); 1463 delegated_->SetFrameData(frame.Pass());
1434 break; 1464 break;
1435 case 2: 1465 case 2:
1436 // The unused resources should be returned. 555 is still used, but it's 1466 // The unused resources should be returned. 555 is still used, but it's
1437 // returned once to account for the first frame. 1467 // returned once to account for the first frame.
1438 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1468 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1439 { 1469 {
1440 unsigned expected[] = {555, 999}; 1470 unsigned expected[] = {555, 999};
1441 EXPECT_RESOURCES(expected, resources); 1471 EXPECT_RESOURCES(expected, resources);
1472 EXPECT_TRUE(TestAndResetAvailable());
1442 } 1473 }
1443 // Send a frame with no resources in it. 1474 // Send a frame with no resources in it.
1444 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1475 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1445 delegated_->SetFrameData(frame.Pass()); 1476 delegated_->SetFrameData(frame.Pass());
1446 break; 1477 break;
1447 case 3: 1478 case 3:
1448 // The now unused resource 555 should be returned. 1479 // The now unused resource 555 should be returned.
1449 resources.clear(); 1480 resources.clear();
1450 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1481 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1451 { 1482 {
1452 unsigned expected[] = {555}; 1483 unsigned expected[] = {555};
1453 EXPECT_RESOURCES(expected, resources); 1484 EXPECT_RESOURCES(expected, resources);
1485 EXPECT_TRUE(TestAndResetAvailable());
1454 } 1486 }
1455 EndTest(); 1487 EndTest();
1456 break; 1488 break;
1457 } 1489 }
1458 } 1490 }
1459 1491
1460 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1492 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1461 if (host_impl->active_tree()->source_frame_number() != 1) 1493 if (host_impl->active_tree()->source_frame_number() != 1)
1462 return; 1494 return;
1463 1495
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1533 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1502 AddTextureQuad(frame.get(), 999); 1534 AddTextureQuad(frame.get(), 999);
1503 AddTransferableResource(frame.get(), 999); 1535 AddTransferableResource(frame.get(), 999);
1504 AddTextureQuad(frame.get(), 555); 1536 AddTextureQuad(frame.get(), 555);
1505 AddTransferableResource(frame.get(), 555); 1537 AddTransferableResource(frame.get(), 555);
1506 delegated_->SetFrameData(frame.Pass()); 1538 delegated_->SetFrameData(frame.Pass());
1507 break; 1539 break;
1508 case 2: 1540 case 2:
1509 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1541 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1510 EXPECT_EQ(0u, resources.size()); 1542 EXPECT_EQ(0u, resources.size());
1543 EXPECT_FALSE(TestAndResetAvailable());
1511 1544
1512 // 999 is in use in the grandparent compositor, generate a frame without 1545 // 999 is in use in the grandparent compositor, generate a frame without
1513 // it present. 1546 // it present.
1514 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1547 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1515 AddTextureQuad(frame.get(), 555); 1548 AddTextureQuad(frame.get(), 555);
1516 AddTransferableResource(frame.get(), 555); 1549 AddTransferableResource(frame.get(), 555);
1517 delegated_->SetFrameData(frame.Pass()); 1550 delegated_->SetFrameData(frame.Pass());
1518 break; 1551 break;
1519 case 3: 1552 case 3:
1520 // Since 999 is in the grandparent it is not returned. 1553 // Since 999 is in the grandparent it is not returned.
1521 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1554 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1522 EXPECT_EQ(0u, resources.size()); 1555 EXPECT_EQ(0u, resources.size());
1556 EXPECT_FALSE(TestAndResetAvailable());
1523 1557
1524 // The impl side will get back the resource at some point. 1558 // The impl side will get back the resource at some point.
1525 ImplThreadTaskRunner()->PostTask(FROM_HERE, 1559 ImplThreadTaskRunner()->PostTask(FROM_HERE,
1526 receive_resource_on_thread_); 1560 receive_resource_on_thread_);
1527 break; 1561 break;
1528 } 1562 }
1529 } 1563 }
1530 1564
1531 void ReceiveResourceOnThread(LayerTreeHostImpl* host_impl) { 1565 void ReceiveResourceOnThread(LayerTreeHostImpl* host_impl) {
1532 LayerImpl* root_impl = host_impl->active_tree()->root_layer(); 1566 LayerImpl* root_impl = host_impl->active_tree()->root_layer();
1533 FakeDelegatedRendererLayerImpl* delegated_impl = 1567 FakeDelegatedRendererLayerImpl* delegated_impl =
1534 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]); 1568 static_cast<FakeDelegatedRendererLayerImpl*>(root_impl->children()[0]);
1535 1569
1536 const ResourceProvider::ResourceIdMap& map = 1570 const ResourceProvider::ResourceIdMap& map =
1537 host_impl->resource_provider()->GetChildToParentMap( 1571 host_impl->resource_provider()->GetChildToParentMap(
1538 delegated_impl->ChildId()); 1572 delegated_impl->ChildId());
1539 1573
1540 // Receive 999 back from the grandparent. 1574 // Receive 999 back from the grandparent.
1541 CompositorFrameAck ack; 1575 CompositorFrameAck ack;
1542 output_surface()->ReturnResource(map.find(999)->second, &ack); 1576 output_surface()->ReturnResource(map.find(999)->second, &ack);
1543 host_impl->ReclaimResources(&ack); 1577 host_impl->ReclaimResources(&ack);
1544 host_impl->OnSwapBuffersComplete(); 1578 host_impl->OnSwapBuffersComplete();
1545
1546 // And then it should be released by the DelegatedRendererLayer.
1547 MainThreadTaskRunner()->PostTask(
1548 FROM_HERE,
1549 base::Bind(&LayerTreeHostDelegatedTestResourceSentToParent::
1550 DidReceiveResourceOnMainThread,
1551 base::Unretained(this)));
1552 } 1579 }
1553 1580
1554 void DidReceiveResourceOnMainThread() { 1581 virtual void UnusedResourcesAreAvailable() OVERRIDE {
1582 EXPECT_EQ(3, layer_tree_host()->source_frame_number());
1583
1555 ReturnedResourceArray resources; 1584 ReturnedResourceArray resources;
1556 1585
1557 // 999 was returned from the grandparent and could be released. 1586 // 999 was returned from the grandparent and could be released.
1558 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1587 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1559 { 1588 {
1560 unsigned expected[] = {999}; 1589 unsigned expected[] = {999};
1561 EXPECT_RESOURCES(expected, resources); 1590 EXPECT_RESOURCES(expected, resources);
1562 } 1591 }
1563 1592
1564 EndTest(); 1593 EndTest();
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1645 AddTransferableResource(frame.get(), 999); 1674 AddTransferableResource(frame.get(), 999);
1646 AddTextureQuad(frame.get(), 555); 1675 AddTextureQuad(frame.get(), 555);
1647 AddTransferableResource(frame.get(), 555); 1676 AddTransferableResource(frame.get(), 555);
1648 AddTextureQuad(frame.get(), 444); 1677 AddTextureQuad(frame.get(), 444);
1649 AddTransferableResource(frame.get(), 444); 1678 AddTransferableResource(frame.get(), 444);
1650 delegated_->SetFrameData(frame.Pass()); 1679 delegated_->SetFrameData(frame.Pass());
1651 break; 1680 break;
1652 case 2: 1681 case 2:
1653 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1682 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1654 EXPECT_EQ(0u, resources.size()); 1683 EXPECT_EQ(0u, resources.size());
1684 EXPECT_FALSE(TestAndResetAvailable());
1655 1685
1656 // Stop using 999 and 444 in this frame and commit. 1686 // Stop using 999 and 444 in this frame and commit.
1657 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1687 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1658 AddTextureQuad(frame.get(), 555); 1688 AddTextureQuad(frame.get(), 555);
1659 AddTransferableResource(frame.get(), 555); 1689 AddTransferableResource(frame.get(), 555);
1660 delegated_->SetFrameData(frame.Pass()); 1690 delegated_->SetFrameData(frame.Pass());
1661 // 999 and 444 will be returned for frame 1, but not 555 since it's in 1691 // 999 and 444 will be returned for frame 1, but not 555 since it's in
1662 // the current frame. 1692 // the current frame.
1663 break; 1693 break;
1664 case 3: 1694 case 3:
1665 // Don't take resources here, but set a new frame that uses 999 again. 1695 // Don't take resources here, but set a new frame that uses 999 again.
1666 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1696 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1667 AddTextureQuad(frame.get(), 999); 1697 AddTextureQuad(frame.get(), 999);
1668 AddTransferableResource(frame.get(), 999); 1698 AddTransferableResource(frame.get(), 999);
1669 AddTextureQuad(frame.get(), 555); 1699 AddTextureQuad(frame.get(), 555);
1670 AddTransferableResource(frame.get(), 555); 1700 AddTransferableResource(frame.get(), 555);
1671 delegated_->SetFrameData(frame.Pass()); 1701 delegated_->SetFrameData(frame.Pass());
1672 break; 1702 break;
1673 case 4: 1703 case 4:
1674 // 555 from frame 1 and 2 isn't returned since it's still in use. 999 1704 // 555 from frame 1 and 2 isn't returned since it's still in use. 999
1675 // from frame 1 is returned though. 1705 // from frame 1 is returned though.
1676 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1706 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1677 { 1707 {
1678 unsigned expected[] = {444, 999}; 1708 unsigned expected[] = {444, 999};
1679 EXPECT_RESOURCES(expected, resources); 1709 EXPECT_RESOURCES(expected, resources);
1710 EXPECT_TRUE(TestAndResetAvailable());
1680 } 1711 }
1681 1712
1682 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1)); 1713 frame = CreateFrameData(gfx::Rect(0, 0, 1, 1), gfx::Rect(0, 0, 1, 1));
1683 delegated_->SetFrameData(frame.Pass()); 1714 delegated_->SetFrameData(frame.Pass());
1684 // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be 1715 // 555 will be returned 3 times for frames 1 2 and 3, and 999 will be
1685 // returned once for frame 3. 1716 // returned once for frame 3.
1686 break; 1717 break;
1687 case 5: 1718 case 5:
1688 delegated_->TakeUnusedResourcesForChildCompositor(&resources); 1719 delegated_->TakeUnusedResourcesForChildCompositor(&resources);
1689 { 1720 {
1690 unsigned expected[] = {555, 555, 555, 999}; 1721 unsigned expected[] = {555, 555, 555, 999};
1691 EXPECT_RESOURCES(expected, resources); 1722 EXPECT_RESOURCES(expected, resources);
1723 EXPECT_TRUE(TestAndResetAvailable());
1692 } 1724 }
1693 1725
1694 EndTest(); 1726 EndTest();
1695 break; 1727 break;
1696 } 1728 }
1697 } 1729 }
1698 1730
1699 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE { 1731 virtual void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
1700 if (host_impl->active_tree()->source_frame_number() < 1) 1732 if (host_impl->active_tree()->source_frame_number() < 1)
1701 return; 1733 return;
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1840 base::WaitableEvent wait_event_; 1872 base::WaitableEvent wait_event_;
1841 base::Lock activate_lock_; 1873 base::Lock activate_lock_;
1842 int activate_count_; 1874 int activate_count_;
1843 }; 1875 };
1844 1876
1845 SINGLE_AND_MULTI_THREAD_TEST_F( 1877 SINGLE_AND_MULTI_THREAD_TEST_F(
1846 DelegatedFrameIsActivatedDuringCommit); 1878 DelegatedFrameIsActivatedDuringCommit);
1847 1879
1848 } // namespace 1880 } // namespace
1849 } // namespace cc 1881 } // namespace cc
OLDNEW
« no previous file with comments | « cc/layers/delegated_renderer_layer_client.h ('k') | content/browser/renderer_host/render_widget_host_view_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698