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

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

Issue 2744063002: Revert of cc::ResourcePool - Re-use larger resources for smaller requests (Closed)
Patch Set: Created 3 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
« no previous file with comments | « cc/resources/resource_pool.cc ('k') | no next file » | 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 15 matching lines...) Expand all
26 resource_provider_ = FakeResourceProvider::Create( 26 resource_provider_ = FakeResourceProvider::Create(
27 context_provider_.get(), shared_bitmap_manager_.get()); 27 context_provider_.get(), shared_bitmap_manager_.get());
28 task_runner_ = base::ThreadTaskRunnerHandle::Get(); 28 task_runner_ = base::ThreadTaskRunnerHandle::Get();
29 resource_pool_ = 29 resource_pool_ =
30 ResourcePool::Create(resource_provider_.get(), task_runner_.get(), 30 ResourcePool::Create(resource_provider_.get(), task_runner_.get(),
31 ResourceProvider::TEXTURE_HINT_IMMUTABLE, 31 ResourceProvider::TEXTURE_HINT_IMMUTABLE,
32 ResourcePool::kDefaultExpirationDelay); 32 ResourcePool::kDefaultExpirationDelay);
33 } 33 }
34 34
35 protected: 35 protected:
36 void CheckAndReturnResource(Resource* resource) {
37 EXPECT_NE(nullptr, resource);
38 resource_pool_->ReleaseResource(resource);
39 resource_pool_->CheckBusyResources();
40 }
41
42 scoped_refptr<TestContextProvider> context_provider_; 36 scoped_refptr<TestContextProvider> context_provider_;
43 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_; 37 std::unique_ptr<SharedBitmapManager> shared_bitmap_manager_;
44 std::unique_ptr<ResourceProvider> resource_provider_; 38 std::unique_ptr<ResourceProvider> resource_provider_;
45 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 39 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
46 std::unique_ptr<ResourcePool> resource_pool_; 40 std::unique_ptr<ResourcePool> resource_pool_;
47 }; 41 };
48 42
49 TEST_F(ResourcePoolTest, AcquireRelease) { 43 TEST_F(ResourcePoolTest, AcquireRelease) {
50 gfx::Size size(100, 100); 44 gfx::Size size(100, 100);
51 ResourceFormat format = RGBA_8888; 45 ResourceFormat format = RGBA_8888;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 // Limits high enough to not be hit by this test. 98 // Limits high enough to not be hit by this test.
105 size_t bytes_limit = 10 * 1024 * 1024; 99 size_t bytes_limit = 10 * 1024 * 1024;
106 size_t count_limit = 100; 100 size_t count_limit = 100;
107 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 101 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
108 102
109 gfx::Size size(100, 100); 103 gfx::Size size(100, 100);
110 ResourceFormat format = RGBA_8888; 104 ResourceFormat format = RGBA_8888;
111 gfx::ColorSpace color_space1; 105 gfx::ColorSpace color_space1;
112 gfx::ColorSpace color_space2 = gfx::ColorSpace::CreateSRGB(); 106 gfx::ColorSpace color_space2 = gfx::ColorSpace::CreateSRGB();
113 107
114 CheckAndReturnResource( 108 Resource* resource =
115 resource_pool_->AcquireResource(size, format, color_space1)); 109 resource_pool_->AcquireResource(size, format, color_space1);
110 resource_pool_->ReleaseResource(resource);
111 resource_pool_->CheckBusyResources();
116 EXPECT_EQ(1u, resource_provider_->num_resources()); 112 EXPECT_EQ(1u, resource_provider_->num_resources());
117 113
118 // Same size/format should re-use resource. 114 // Same size/format should re-use resource.
119 Resource* resource = 115 resource = resource_pool_->AcquireResource(size, format, color_space1);
120 resource_pool_->AcquireResource(size, format, color_space1);
121 EXPECT_EQ(1u, resource_provider_->num_resources()); 116 EXPECT_EQ(1u, resource_provider_->num_resources());
122 CheckAndReturnResource(resource); 117 resource_pool_->ReleaseResource(resource);
118 resource_pool_->CheckBusyResources();
123 EXPECT_EQ(1u, resource_provider_->num_resources()); 119 EXPECT_EQ(1u, resource_provider_->num_resources());
124 120
125 // Different size/format should allocate new resource. 121 // Different size/format should allocate new resource.
126 resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8, 122 resource = resource_pool_->AcquireResource(gfx::Size(50, 50), LUMINANCE_8,
127 color_space1); 123 color_space1);
128 EXPECT_EQ(2u, resource_provider_->num_resources()); 124 EXPECT_EQ(2u, resource_provider_->num_resources());
129 CheckAndReturnResource(resource); 125 resource_pool_->ReleaseResource(resource);
126 resource_pool_->CheckBusyResources();
130 EXPECT_EQ(2u, resource_provider_->num_resources()); 127 EXPECT_EQ(2u, resource_provider_->num_resources());
131 128
132 // Different color space should allocate new resource. 129 // Different color space should allocate new resource.
133 resource = resource_pool_->AcquireResource(size, format, color_space2); 130 resource = resource_pool_->AcquireResource(size, format, color_space2);
134 EXPECT_EQ(3u, resource_provider_->num_resources()); 131 EXPECT_EQ(3u, resource_provider_->num_resources());
135 CheckAndReturnResource(resource); 132 resource_pool_->ReleaseResource(resource);
133 resource_pool_->CheckBusyResources();
136 EXPECT_EQ(3u, resource_provider_->num_resources()); 134 EXPECT_EQ(3u, resource_provider_->num_resources());
137 } 135 }
138 136
139 TEST_F(ResourcePoolTest, LostResource) { 137 TEST_F(ResourcePoolTest, LostResource) {
140 // Limits high enough to not be hit by this test. 138 // Limits high enough to not be hit by this test.
141 size_t bytes_limit = 10 * 1024 * 1024; 139 size_t bytes_limit = 10 * 1024 * 1024;
142 size_t count_limit = 100; 140 size_t count_limit = 100;
143 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 141 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
144 142
145 gfx::Size size(100, 100); 143 gfx::Size size(100, 100);
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
312 &total_invalidated_rect); 310 &total_invalidated_rect);
313 EXPECT_EQ(resource, reacquired_resource); 311 EXPECT_EQ(resource, reacquired_resource);
314 EXPECT_EQ(expected_total_invalidated_rect, total_invalidated_rect); 312 EXPECT_EQ(expected_total_invalidated_rect, total_invalidated_rect);
315 resource_pool_->ReleaseResource(reacquired_resource); 313 resource_pool_->ReleaseResource(reacquired_resource);
316 } 314 }
317 315
318 TEST_F(ResourcePoolTest, ReuseResource) { 316 TEST_F(ResourcePoolTest, ReuseResource) {
319 ResourceFormat format = RGBA_8888; 317 ResourceFormat format = RGBA_8888;
320 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB(); 318 gfx::ColorSpace color_space = gfx::ColorSpace::CreateSRGB();
321 319
322 // Create unused resource with size 100x100. 320 // Create unused resources with sizes close to 100, 100.
323 CheckAndReturnResource( 321 resource_pool_->ReleaseResource(
324 resource_pool_->CreateResource(gfx::Size(100, 100), format, color_space)); 322 resource_pool_->CreateResource(gfx::Size(99, 100), format, color_space));
323 resource_pool_->ReleaseResource(
324 resource_pool_->CreateResource(gfx::Size(99, 99), format, color_space));
325 resource_pool_->ReleaseResource(
326 resource_pool_->CreateResource(gfx::Size(100, 99), format, color_space));
327 resource_pool_->ReleaseResource(
328 resource_pool_->CreateResource(gfx::Size(101, 101), format, color_space));
329 resource_pool_->CheckBusyResources();
325 330
326 // Try some cases that are too large, none should succeed. 331 gfx::Size size(100, 100);
327 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(101, 100), format, 332 Resource* resource = resource_pool_->ReuseResource(size, format, color_space);
328 color_space)); 333 EXPECT_EQ(nullptr, resource);
329 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 101), format, 334 size = gfx::Size(100, 99);
330 color_space)); 335 resource = resource_pool_->ReuseResource(size, format, color_space);
331 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(90, 120), format, 336 EXPECT_NE(nullptr, resource);
332 color_space)); 337 ASSERT_EQ(nullptr, resource_pool_->ReuseResource(size, format, color_space));
333 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(120, 120), format, 338 resource_pool_->ReleaseResource(resource);
334 color_space));
335
336 // Try some cases that are more than 2x smaller than 100x100 in area and
337 // won't be re-used.
338 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(49, 100), format,
339 color_space));
340 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 49), format,
341 color_space));
342 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(50, 50), format,
343 color_space));
344 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(70, 70), format,
345 color_space));
346
347 // Try some cases that are smaller than 100x100, but within 2x area. Reuse
348 // should succeed.
349 CheckAndReturnResource(
350 resource_pool_->ReuseResource(gfx::Size(50, 100), format, color_space));
351 CheckAndReturnResource(
352 resource_pool_->ReuseResource(gfx::Size(100, 50), format, color_space));
353 CheckAndReturnResource(
354 resource_pool_->ReuseResource(gfx::Size(71, 71), format, color_space));
355
356 // 100x100 is an exact match and should succeed. A subsequent request for
357 // the same size should fail (the resource is already in use).
358 Resource* resource =
359 resource_pool_->ReuseResource(gfx::Size(100, 100), format, color_space);
360 EXPECT_EQ(nullptr, resource_pool_->ReuseResource(gfx::Size(100, 100), format,
361 color_space));
362 CheckAndReturnResource(resource);
363 } 339 }
364 340
365 TEST_F(ResourcePoolTest, MemoryStateSuspended) { 341 TEST_F(ResourcePoolTest, MemoryStateSuspended) {
366 // Limits high enough to not be hit by this test. 342 // Limits high enough to not be hit by this test.
367 size_t bytes_limit = 10 * 1024 * 1024; 343 size_t bytes_limit = 10 * 1024 * 1024;
368 size_t count_limit = 100; 344 size_t count_limit = 100;
369 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit); 345 resource_pool_->SetResourceUsageLimits(bytes_limit, count_limit);
370 346
371 gfx::Size size(100, 100); 347 gfx::Size size(100, 100);
372 ResourceFormat format = RGBA_8888; 348 ResourceFormat format = RGBA_8888;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 resource_pool_ = 389 resource_pool_ =
414 ResourcePool::Create(resource_provider_.get(), task_runner_.get(), 390 ResourcePool::Create(resource_provider_.get(), task_runner_.get(),
415 ResourceProvider::TEXTURE_HINT_DEFAULT, 391 ResourceProvider::TEXTURE_HINT_DEFAULT,
416 base::TimeDelta::FromMilliseconds(100)); 392 base::TimeDelta::FromMilliseconds(100));
417 resource = resource_pool_->AcquireResource(size, format, color_space); 393 resource = resource_pool_->AcquireResource(size, format, color_space);
418 EXPECT_FALSE(resource_provider_->IsImmutable(resource->id())); 394 EXPECT_FALSE(resource_provider_->IsImmutable(resource->id()));
419 resource_pool_->ReleaseResource(resource); 395 resource_pool_->ReleaseResource(resource);
420 } 396 }
421 397
422 } // namespace cc 398 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/resource_pool.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698