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

Side by Side Diff: cc/resources/resource_provider_unittest.cc

Issue 1185443005: cc: Propagate read lock fences constraints to parent compositors. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resources/resource_provider.h" 5 #include "cc/resources/resource_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 10
(...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 id1); 1038 id1);
1039 child_resource_provider_->DeleteResource(id1); 1039 child_resource_provider_->DeleteResource(id1);
1040 EXPECT_EQ(1u, child_resource_provider_->num_resources()); 1040 EXPECT_EQ(1u, child_resource_provider_->num_resources());
1041 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1)); 1041 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1042 } 1042 }
1043 1043
1044 EXPECT_EQ(0u, child_resource_provider_->num_resources()); 1044 EXPECT_EQ(0u, child_resource_provider_->num_resources());
1045 resource_provider_->DestroyChild(child_id); 1045 resource_provider_->DestroyChild(child_id);
1046 } 1046 }
1047 1047
1048 TEST_P(ResourceProviderTest, ReadLockFenceStopsReturnToChildOrDelete) {
1049 if (GetParam() != ResourceProvider::RESOURCE_TYPE_GL_TEXTURE)
1050 return;
1051 gfx::Size size(1, 1);
1052 ResourceFormat format = RGBA_8888;
1053
1054 ResourceId id1 = child_resource_provider_->CreateResource(
1055 size, GL_CLAMP_TO_EDGE, ResourceProvider::TEXTURE_HINT_IMMUTABLE, format);
1056 uint8_t data1[4] = {1, 2, 3, 4};
1057 child_resource_provider_->CopyToResource(id1, data1, size);
1058 child_resource_provider_->EnableReadLockFences(id1);
1059 ReturnedResourceArray returned_to_child;
1060 int child_id =
1061 resource_provider_->CreateChild(GetReturnCallback(&returned_to_child));
1062
1063 // Transfer some resources to the parent.
1064 ResourceProvider::ResourceIdArray resource_ids_to_transfer;
1065 resource_ids_to_transfer.push_back(id1);
1066 TransferableResourceArray list;
1067 child_resource_provider_->PrepareSendToParent(resource_ids_to_transfer,
1068 &list);
1069 ASSERT_EQ(1u, list.size());
1070 EXPECT_TRUE(child_resource_provider_->InUseByConsumer(id1));
1071
1072 resource_provider_->ReceiveFromChild(child_id, list);
1073 class TestFence : public ResourceProvider::Fence {
1074 public:
1075 TestFence() {}
1076
1077 void Set() override { NOTIMPLEMENTED(); }
1078 bool HasPassed() override { return passed; }
1079 void Wait() override { NOTIMPLEMENTED(); }
1080
1081 bool passed = false;
1082
1083 private:
1084 ~TestFence() override {}
1085 };
1086
1087 scoped_refptr<TestFence> fence(new TestFence);
1088 resource_provider_->SetReadLockFence(fence.get());
1089 {
1090 unsigned parent_id = list.front().id;
1091 resource_provider_->WaitSyncPointIfNeeded(parent_id);
1092 ResourceProvider::ScopedReadLockGL lock(resource_provider_.get(),
1093 parent_id);
1094 }
1095 resource_provider_->DeclareUsedResourcesFromChild(
1096 child_id, ResourceProvider::ResourceIdSet());
1097 EXPECT_EQ(0u, returned_to_child.size());
1098
1099 resource_provider_->DeclareUsedResourcesFromChild(
1100 child_id, ResourceProvider::ResourceIdSet());
1101 EXPECT_EQ(0u, returned_to_child.size());
1102 fence->passed = true;
1103
1104 resource_provider_->DeclareUsedResourcesFromChild(
1105 child_id, ResourceProvider::ResourceIdSet());
1106 EXPECT_EQ(1u, returned_to_child.size());
1107
1108 child_resource_provider_->ReceiveReturnsFromParent(returned_to_child);
1109 child_resource_provider_->DeleteResource(id1);
1110 EXPECT_EQ(0u, child_resource_provider_->num_resources());
1111 }
piman 2015/06/12 01:53:52 Could you add another test for the lost resource c
Daniele Castagna 2015/06/12 23:36:42 If DestroyChild is called after a context lost Fen
1112
1048 TEST_P(ResourceProviderTest, TransferSoftwareResources) { 1113 TEST_P(ResourceProviderTest, TransferSoftwareResources) {
1049 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP) 1114 if (GetParam() != ResourceProvider::RESOURCE_TYPE_BITMAP)
1050 return; 1115 return;
1051 1116
1052 gfx::Size size(1, 1); 1117 gfx::Size size(1, 1);
1053 ResourceFormat format = RGBA_8888; 1118 ResourceFormat format = RGBA_8888;
1054 size_t pixel_size = TextureSizeBytes(size, format); 1119 size_t pixel_size = TextureSizeBytes(size, format);
1055 ASSERT_EQ(4U, pixel_size); 1120 ASSERT_EQ(4U, pixel_size);
1056 1121
1057 ResourceId id1 = child_resource_provider_->CreateResource( 1122 ResourceId id1 = child_resource_provider_->CreateResource(
(...skipping 2570 matching lines...) Expand 10 before | Expand all | Expand 10 after
3628 resource_provider->AllocateForTesting(id); 3693 resource_provider->AllocateForTesting(id);
3629 Mock::VerifyAndClearExpectations(context); 3694 Mock::VerifyAndClearExpectations(context);
3630 3695
3631 DCHECK_EQ(10u, context->PeekTextureId()); 3696 DCHECK_EQ(10u, context->PeekTextureId());
3632 resource_provider->DeleteResource(id); 3697 resource_provider->DeleteResource(id);
3633 } 3698 }
3634 } 3699 }
3635 3700
3636 } // namespace 3701 } // namespace
3637 } // namespace cc 3702 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698