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

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

Issue 2235623003: cc: Add gfx::ColorSpace to cc::ResourceProvider resource creation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 4 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
« no previous file with comments | « cc/resources/resource_pool.cc ('k') | cc/resources/resource_provider.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_pool.h" 5 #include "cc/resources/resource_pool.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 26 matching lines...) Expand all
37 std::unique_ptr<FakeOutputSurface> output_surface_; 37 std::unique_ptr<FakeOutputSurface> output_surface_;
38 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; 38 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_;
39 std::unique_ptr<ResourceProvider> resource_provider_; 39 std::unique_ptr<ResourceProvider> resource_provider_;
40 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 40 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
41 std::unique_ptr<ResourcePool> resource_pool_; 41 std::unique_ptr<ResourcePool> resource_pool_;
42 }; 42 };
43 43
44 TEST_F(ResourcePoolTest, AcquireRelease) { 44 TEST_F(ResourcePoolTest, AcquireRelease) {
45 gfx::Size size(100, 100); 45 gfx::Size size(100, 100);
46 ResourceFormat format = RGBA_8888; 46 ResourceFormat format = RGBA_8888;
47 Resource* resource = resource_pool_->AcquireResource(size, format); 47 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB();
48 Resource* resource =
49 resource_pool_->AcquireResource(size, format, color_space);
48 EXPECT_EQ(size, resource->size()); 50 EXPECT_EQ(size, resource->size());
49 EXPECT_EQ(format, resource->format()); 51 EXPECT_EQ(format, resource->format());
50 EXPECT_TRUE(resource_provider_->CanLockForWrite(resource->id())); 52 EXPECT_TRUE(resource_provider_->CanLockForWrite(resource->id()));
51 53
52 resource_pool_->ReleaseResource(resource); 54 resource_pool_->ReleaseResource(resource);
53 } 55 }
54 56
55 TEST_F(ResourcePoolTest, AccountingSingleResource) { 57 TEST_F(ResourcePoolTest, AccountingSingleResource) {
56 // Limits high enough to not be hit by this test. 58 // Limits high enough to not be hit by this test.
57 size_t bytes_limit = 10 * 1024 * 1024; 59 size_t bytes_limit = 10 * 1024 * 1024;
58 size_t count_limit = 100; 60 size_t count_limit = 100;
59 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 61 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
60 62
61 gfx::Size size(100, 100); 63 gfx::Size size(100, 100);
62 ResourceFormat format = RGBA_8888; 64 ResourceFormat format = RGBA_8888;
65 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB();
63 size_t resource_bytes = 66 size_t resource_bytes =
64 ResourceUtil::UncheckedSizeInBytes<size_t>(size, format); 67 ResourceUtil::UncheckedSizeInBytes<size_t>(size, format);
65 Resource* resource = resource_pool_->AcquireResource(size, format); 68 Resource* resource =
69 resource_pool_->AcquireResource(size, format, color_space);
66 70
67 EXPECT_EQ(resource_bytes, resource_pool_->GetTotalMemoryUsageForTesting()); 71 EXPECT_EQ(resource_bytes, resource_pool_->GetTotalMemoryUsageForTesting());
68 EXPECT_EQ(resource_bytes, resource_pool_->memory_usage_bytes()); 72 EXPECT_EQ(resource_bytes, resource_pool_->memory_usage_bytes());
69 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); 73 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting());
70 EXPECT_EQ(1u, resource_pool_->resource_count()); 74 EXPECT_EQ(1u, resource_pool_->resource_count());
71 EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting()); 75 EXPECT_EQ(0u, resource_pool_->GetBusyResourceCountForTesting());
72 76
73 resource_pool_->ReleaseResource(resource); 77 resource_pool_->ReleaseResource(resource);
74 EXPECT_EQ(resource_bytes, resource_pool_->GetTotalMemoryUsageForTesting()); 78 EXPECT_EQ(resource_bytes, resource_pool_->GetTotalMemoryUsageForTesting());
75 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); 79 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting());
(...skipping 16 matching lines...) Expand all
92 } 96 }
93 97
94 TEST_F(ResourcePoolTest, SimpleResourceReuse) { 98 TEST_F(ResourcePoolTest, SimpleResourceReuse) {
95 // Limits high enough to not be hit by this test. 99 // Limits high enough to not be hit by this test.
96 size_t bytes_limit = 10 * 1024 * 1024; 100 size_t bytes_limit = 10 * 1024 * 1024;
97 size_t count_limit = 100; 101 size_t count_limit = 100;
98 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 102 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
99 103
100 gfx::Size size(100, 100); 104 gfx::Size size(100, 100);
101 ResourceFormat format = RGBA_8888; 105 ResourceFormat format = RGBA_8888;
106 gfx::ColorSpace color_space1;
107 gfx::ColorSpace color_space2 = gfx::ColorSpace::CreateSRGB();
102 108
103 Resource* resource = resource_pool_->AcquireResource(size, format); 109 Resource* resource =
110 resource_pool_->AcquireResource(size, format, color_space1);
104 resource_pool_->ReleaseResource(resource); 111 resource_pool_->ReleaseResource(resource);
105 resource_pool_->CheckBusyResources(); 112 resource_pool_->CheckBusyResources();
106 EXPECT_EQ(1u, resource_provider_->num_resources()); 113 EXPECT_EQ(1u, resource_provider_->num_resources());
107 114
108 // Same size/format should re-use resource. 115 // Same size/format should re-use resource.
109 resource = resource_pool_->AcquireResource(size, format); 116 resource = resource_pool_->AcquireResource(size, format, color_space1);
110 EXPECT_EQ(1u, resource_provider_->num_resources()); 117 EXPECT_EQ(1u, resource_provider_->num_resources());
111 resource_pool_->ReleaseResource(resource); 118 resource_pool_->ReleaseResource(resource);
112 resource_pool_->CheckBusyResources(); 119 resource_pool_->CheckBusyResources();
113 EXPECT_EQ(1u, resource_provider_->num_resources()); 120 EXPECT_EQ(1u, resource_provider_->num_resources());
114 121
115 // Different size/format should alloate new resource. 122 // Different size/format should allocate new resource.
116 resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8); 123 resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8,
124 color_space1);
117 EXPECT_EQ(2u, resource_provider_->num_resources()); 125 EXPECT_EQ(2u, resource_provider_->num_resources());
118 resource_pool_->ReleaseResource(resource); 126 resource_pool_->ReleaseResource(resource);
119 resource_pool_->CheckBusyResources(); 127 resource_pool_->CheckBusyResources();
120 EXPECT_EQ(2u, resource_provider_->num_resources()); 128 EXPECT_EQ(2u, resource_provider_->num_resources());
129
130 // Different color space should allocate new resource.
131 resource = resource_pool_->AcquireResource(size, format, color_space2);
132 EXPECT_EQ(3u, resource_provider_->num_resources());
133 resource_pool_->ReleaseResource(resource);
134 resource_pool_->CheckBusyResources();
135 EXPECT_EQ(3u, resource_provider_->num_resources());
121 } 136 }
122 137
123 TEST_F(ResourcePoolTest, LostResource) { 138 TEST_F(ResourcePoolTest, LostResource) {
124 // Limits high enough to not be hit by this test. 139 // Limits high enough to not be hit by this test.
125 size_t bytes_limit = 10 * 1024 * 1024; 140 size_t bytes_limit = 10 * 1024 * 1024;
126 size_t count_limit = 100; 141 size_t count_limit = 100;
127 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 142 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
128 143
129 gfx::Size size(100, 100); 144 gfx::Size size(100, 100);
130 ResourceFormat format = RGBA_8888; 145 ResourceFormat format = RGBA_8888;
146 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB();
131 147
132 Resource* resource = resource_pool_->AcquireResource(size, format); 148 Resource* resource =
149 resource_pool_->AcquireResource(size, format, color_space);
133 EXPECT_EQ(1u, resource_provider_->num_resources()); 150 EXPECT_EQ(1u, resource_provider_->num_resources());
134 151
135 resource_provider_->LoseResourceForTesting(resource->id()); 152 resource_provider_->LoseResourceForTesting(resource->id());
136 resource_pool_->ReleaseResource(resource); 153 resource_pool_->ReleaseResource(resource);
137 resource_pool_->CheckBusyResources(); 154 resource_pool_->CheckBusyResources();
138 EXPECT_EQ(0u, resource_provider_->num_resources()); 155 EXPECT_EQ(0u, resource_provider_->num_resources());
139 } 156 }
140 157
141 TEST_F(ResourcePoolTest, BusyResourcesEventuallyFreed) { 158 TEST_F(ResourcePoolTest, BusyResourcesEventuallyFreed) {
142 // Limits high enough to not be hit by this test. 159 // Limits high enough to not be hit by this test.
143 size_t bytes_limit = 10 * 1024 * 1024; 160 size_t bytes_limit = 10 * 1024 * 1024;
144 size_t count_limit = 100; 161 size_t count_limit = 100;
145 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 162 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
146 163
147 // Set a quick resource expiration delay so that this test doesn't take long 164 // Set a quick resource expiration delay so that this test doesn't take long
148 // to run. 165 // to run.
149 resource_pool_->SetResourceExpirationDelayForTesting( 166 resource_pool_->SetResourceExpirationDelayForTesting(
150 base::TimeDelta::FromMilliseconds(10)); 167 base::TimeDelta::FromMilliseconds(10));
151 168
152 gfx::Size size(100, 100); 169 gfx::Size size(100, 100);
153 ResourceFormat format = RGBA_8888; 170 ResourceFormat format = RGBA_8888;
171 gfx::ColorSpace color_space;
154 172
155 Resource* resource = resource_pool_->AcquireResource(size, format); 173 Resource* resource =
174 resource_pool_->AcquireResource(size, format, color_space);
156 EXPECT_EQ(1u, resource_provider_->num_resources()); 175 EXPECT_EQ(1u, resource_provider_->num_resources());
157 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); 176 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting());
158 EXPECT_EQ(1u, resource_pool_->resource_count()); 177 EXPECT_EQ(1u, resource_pool_->resource_count());
159 178
160 resource_pool_->ReleaseResource(resource); 179 resource_pool_->ReleaseResource(resource);
161 EXPECT_EQ(1u, resource_provider_->num_resources()); 180 EXPECT_EQ(1u, resource_provider_->num_resources());
162 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); 181 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting());
163 EXPECT_EQ(0u, resource_pool_->memory_usage_bytes()); 182 EXPECT_EQ(0u, resource_pool_->memory_usage_bytes());
164 EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting()); 183 EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting());
165 184
(...skipping 15 matching lines...) Expand all
181 size_t count_limit = 100; 200 size_t count_limit = 100;
182 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 201 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
183 202
184 // Set a quick resource expiration delay so that this test doesn't take long 203 // Set a quick resource expiration delay so that this test doesn't take long
185 // to run. 204 // to run.
186 resource_pool_->SetResourceExpirationDelayForTesting( 205 resource_pool_->SetResourceExpirationDelayForTesting(
187 base::TimeDelta::FromMilliseconds(100)); 206 base::TimeDelta::FromMilliseconds(100));
188 207
189 gfx::Size size(100, 100); 208 gfx::Size size(100, 100);
190 ResourceFormat format = RGBA_8888; 209 ResourceFormat format = RGBA_8888;
210 gfx::ColorSpace color_space;
191 211
192 Resource* resource = resource_pool_->AcquireResource(size, format); 212 Resource* resource =
213 resource_pool_->AcquireResource(size, format, color_space);
193 EXPECT_EQ(1u, resource_provider_->num_resources()); 214 EXPECT_EQ(1u, resource_provider_->num_resources());
194 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); 215 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting());
195 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); 216 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting());
196 EXPECT_EQ(1u, resource_pool_->resource_count()); 217 EXPECT_EQ(1u, resource_pool_->resource_count());
197 218
198 resource_pool_->ReleaseResource(resource); 219 resource_pool_->ReleaseResource(resource);
199 EXPECT_EQ(1u, resource_provider_->num_resources()); 220 EXPECT_EQ(1u, resource_provider_->num_resources());
200 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting()); 221 EXPECT_EQ(40000u, resource_pool_->GetTotalMemoryUsageForTesting());
201 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting()); 222 EXPECT_EQ(1u, resource_pool_->GetTotalResourceCountForTesting());
202 EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting()); 223 EXPECT_EQ(1u, resource_pool_->GetBusyResourceCountForTesting());
(...skipping 13 matching lines...) Expand all
216 base::TimeDelta::FromMillisecondsD(200)); 237 base::TimeDelta::FromMillisecondsD(200));
217 run_loop.Run(); 238 run_loop.Run();
218 239
219 EXPECT_EQ(0u, resource_provider_->num_resources()); 240 EXPECT_EQ(0u, resource_provider_->num_resources());
220 EXPECT_EQ(0u, resource_pool_->GetTotalMemoryUsageForTesting()); 241 EXPECT_EQ(0u, resource_pool_->GetTotalMemoryUsageForTesting());
221 } 242 }
222 243
223 TEST_F(ResourcePoolTest, UpdateContentId) { 244 TEST_F(ResourcePoolTest, UpdateContentId) {
224 gfx::Size size(100, 100); 245 gfx::Size size(100, 100);
225 ResourceFormat format = RGBA_8888; 246 ResourceFormat format = RGBA_8888;
247 gfx::ColorSpace color_space;
226 uint64_t content_id = 42; 248 uint64_t content_id = 42;
227 uint64_t new_content_id = 43; 249 uint64_t new_content_id = 43;
228 gfx::Rect new_invalidated_rect(20, 20, 10, 10); 250 gfx::Rect new_invalidated_rect(20, 20, 10, 10);
229 251
230 Resource* resource = resource_pool_->AcquireResource(size, format); 252 Resource* resource =
253 resource_pool_->AcquireResource(size, format, color_space);
231 resource_pool_->OnContentReplaced(resource->id(), content_id); 254 resource_pool_->OnContentReplaced(resource->id(), content_id);
232 resource_pool_->ReleaseResource(resource); 255 resource_pool_->ReleaseResource(resource);
233 resource_pool_->CheckBusyResources(); 256 resource_pool_->CheckBusyResources();
234 257
235 // Ensure that we can retrieve the resource based on |content_id|. 258 // Ensure that we can retrieve the resource based on |content_id|.
236 gfx::Rect invalidated_rect; 259 gfx::Rect invalidated_rect;
237 Resource* reacquired_resource = 260 Resource* reacquired_resource =
238 resource_pool_->TryAcquireResourceForPartialRaster( 261 resource_pool_->TryAcquireResourceForPartialRaster(
239 new_content_id, new_invalidated_rect, content_id, &invalidated_rect); 262 new_content_id, new_invalidated_rect, content_id, &invalidated_rect);
240 EXPECT_EQ(resource, reacquired_resource); 263 EXPECT_EQ(resource, reacquired_resource);
241 EXPECT_EQ(new_invalidated_rect, invalidated_rect); 264 EXPECT_EQ(new_invalidated_rect, invalidated_rect);
242 resource_pool_->ReleaseResource(reacquired_resource); 265 resource_pool_->ReleaseResource(reacquired_resource);
243 } 266 }
244 267
245 TEST_F(ResourcePoolTest, UpdateContentIdAndInvalidatedRect) { 268 TEST_F(ResourcePoolTest, UpdateContentIdAndInvalidatedRect) {
246 gfx::Size size(100, 100); 269 gfx::Size size(100, 100);
247 ResourceFormat format = RGBA_8888; 270 ResourceFormat format = RGBA_8888;
271 gfx::ColorSpace color_space;
248 uint64_t content_ids[] = {42, 43, 44}; 272 uint64_t content_ids[] = {42, 43, 44};
249 gfx::Rect invalidated_rect(20, 20, 10, 10); 273 gfx::Rect invalidated_rect(20, 20, 10, 10);
250 gfx::Rect second_invalidated_rect(25, 25, 10, 10); 274 gfx::Rect second_invalidated_rect(25, 25, 10, 10);
251 gfx::Rect expected_total_invalidated_rect(20, 20, 15, 15); 275 gfx::Rect expected_total_invalidated_rect(20, 20, 15, 15);
252 276
253 // Acquire a new resource with the first content id. 277 // Acquire a new resource with the first content id.
254 Resource* resource = resource_pool_->AcquireResource(size, format); 278 Resource* resource =
279 resource_pool_->AcquireResource(size, format, color_space);
255 resource_pool_->OnContentReplaced(resource->id(), content_ids[0]); 280 resource_pool_->OnContentReplaced(resource->id(), content_ids[0]);
256 281
257 // Attempt to acquire this resource. It is in use, so its ID and invalidated 282 // Attempt to acquire this resource. It is in use, so its ID and invalidated
258 // rect should be updated, but a new resource will be returned. 283 // rect should be updated, but a new resource will be returned.
259 gfx::Rect new_invalidated_rect; 284 gfx::Rect new_invalidated_rect;
260 Resource* reacquired_resource = 285 Resource* reacquired_resource =
261 resource_pool_->TryAcquireResourceForPartialRaster( 286 resource_pool_->TryAcquireResourceForPartialRaster(
262 content_ids[1], invalidated_rect, content_ids[0], 287 content_ids[1], invalidated_rect, content_ids[0],
263 &new_invalidated_rect); 288 &new_invalidated_rect);
264 EXPECT_EQ(nullptr, reacquired_resource); 289 EXPECT_EQ(nullptr, reacquired_resource);
(...skipping 15 matching lines...) Expand all
280 reacquired_resource = resource_pool_->TryAcquireResourceForPartialRaster( 305 reacquired_resource = resource_pool_->TryAcquireResourceForPartialRaster(
281 content_ids[2], second_invalidated_rect, content_ids[1], 306 content_ids[2], second_invalidated_rect, content_ids[1],
282 &total_invalidated_rect); 307 &total_invalidated_rect);
283 EXPECT_EQ(resource, reacquired_resource); 308 EXPECT_EQ(resource, reacquired_resource);
284 EXPECT_EQ(expected_total_invalidated_rect, total_invalidated_rect); 309 EXPECT_EQ(expected_total_invalidated_rect, total_invalidated_rect);
285 resource_pool_->ReleaseResource(reacquired_resource); 310 resource_pool_->ReleaseResource(reacquired_resource);
286 } 311 }
287 312
288 } // namespace 313 } // namespace
289 } // namespace cc 314 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_pool.cc ('k') | cc/resources/resource_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698