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

Side by Side Diff: tests/ResourceCacheTest.cpp

Issue 720033004: Correct accounting for wrapped resources (Closed) Base URL: https://skia.googlesource.com/skia.git@res2
Patch Set: rebase again Created 6 years, 1 month 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 | « src/gpu/GrResourceCache2.cpp ('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 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #if SK_SUPPORT_GPU 8 #if SK_SUPPORT_GPU
9 9
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 } 59 }
60 60
61 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes); 61 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes);
62 } 62 }
63 63
64 class TestResource : public GrGpuResource { 64 class TestResource : public GrGpuResource {
65 static const size_t kDefaultSize = 100; 65 static const size_t kDefaultSize = 100;
66 66
67 public: 67 public:
68 SK_DECLARE_INST_COUNT(TestResource); 68 SK_DECLARE_INST_COUNT(TestResource);
69 TestResource(GrGpu* gpu, bool isWrapped)
70 : INHERITED(gpu, isWrapped)
71 , fToDelete(NULL)
72 , fSize(kDefaultSize) {
73 ++fNumAlive;
74 this->registerWithCache();
75 }
76
69 TestResource(GrGpu* gpu) 77 TestResource(GrGpu* gpu)
70 : INHERITED(gpu, false) 78 : INHERITED(gpu, false)
71 , fToDelete(NULL) 79 , fToDelete(NULL)
72 , fSize(kDefaultSize) { 80 , fSize(kDefaultSize) {
73 ++fNumAlive; 81 ++fNumAlive;
74 this->registerWithCache(); 82 this->registerWithCache();
75 } 83 }
76 84
77 TestResource(GrGpu* gpu, const GrResourceKey& scratchKey) 85 TestResource(GrGpu* gpu, const GrResourceKey& scratchKey)
78 : INHERITED(gpu, false) 86 : INHERITED(gpu, false)
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); 166 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive());
159 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); 167 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount());
160 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes()); 168 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes());
161 169
162 b->unref(); 170 b->unref();
163 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 171 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
164 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); 172 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount());
165 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); 173 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes());
166 } 174 }
167 175
176 static void test_wrapped(skiatest::Reporter* reporter) {
177 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
178 REPORTER_ASSERT(reporter, SkToBool(context));
179 if (NULL == context) {
180 return;
181 }
182 context->setResourceCacheLimits(10, 300);
183 GrResourceCache2* cache2 = context->getResourceCache2();
184 cache2->purgeAllUnlocked();
185 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()) ;
186 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted ResourceBytes());
187
188 GrCacheID::Key keyData;
189 memset(&keyData, 0, sizeof(keyData));
190 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
191 GrResourceKey scratchKey(GrCacheID(GrResourceKey::ScratchDomain(), keyData), t, 0);
192 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), t, 0);
193
194 // Create a scratch, a content, and a wrapped resource
195 TestResource* scratch = new TestResource(context->getGpu(), scratchKey);
196 scratch->setSize(10);
197 TestResource* content = new TestResource(context->getGpu());
198 scratch->setSize(11);
199 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey));
200 TestResource* wrapped = new TestResource(context->getGpu(), true);
201 scratch->setSize(12);
202
203 // Make sure we can't add a content key to the wrapped resource
204 keyData.fData8[0] = 1;
205 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), t , 0);
206 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2) );
207 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK ey2));
208
209 // Make sure sizes are as we expect
210 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount());
211 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) +
212 wrapped->gpuMemorySize() == cache2->getResourceByt es());
213 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount());
214 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) ==
215 cache2->getBudgetedResourceBytes());
216
217 // Our refs mean that the resources are non purgable.
218 cache2->purgeAllUnlocked();
219 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount());
220 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) +
221 wrapped->gpuMemorySize() == cache2->getResourceByt es());
222 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount());
223 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) ==
224 cache2->getBudgetedResourceBytes());
225
226 // Unreffing the wrapped resource should free it right away.
227 wrapped->unref();
228 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount());
229 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) ==
230 cache2->getResourceBytes());
231
232 // Now try freeing the other two resources first
233 wrapped = new TestResource(context->getGpu(), true);
234 scratch->setSize(12);
235 content->unref();
236 cache2->purgeAllUnlocked();
237 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount());
238 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize( ) ==
239 cache2->getResourceBytes());
240 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount());
241 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache2->getBudgetedRes ourceBytes());
242
243 scratch->unref();
244 cache2->purgeAllUnlocked();
245 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount());
246 REPORTER_ASSERT(reporter, wrapped->gpuMemorySize() == cache2->getResourceByt es());
247 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount());
248 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes());
249
250 wrapped->unref();
251 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount());
252 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes());
253 }
254
168 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) { 255 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) {
169 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); 256 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
170 REPORTER_ASSERT(reporter, SkToBool(context)); 257 REPORTER_ASSERT(reporter, SkToBool(context));
171 if (NULL == context) { 258 if (NULL == context) {
172 return; 259 return;
173 } 260 }
174 context->setResourceCacheLimits(5, 30000); 261 context->setResourceCacheLimits(5, 30000);
175 GrResourceCache2* cache2 = context->getResourceCache2(); 262 GrResourceCache2* cache2 = context->getResourceCache2();
176 cache2->purgeAllUnlocked(); 263 cache2->purgeAllUnlocked();
177 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()) ; 264 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()) ;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 desc.fFlags = kRenderTarget_GrSurfaceFlag; 571 desc.fFlags = kRenderTarget_GrSurfaceFlag;
485 desc.fWidth = gWidth; 572 desc.fWidth = gWidth;
486 desc.fHeight = gHeight; 573 desc.fHeight = gHeight;
487 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); 574 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight);
488 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info )); 575 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info ));
489 test_cache(reporter, context, surface->getCanvas()); 576 test_cache(reporter, context, surface->getCanvas());
490 } 577 }
491 578
492 // The below tests create their own mock contexts. 579 // The below tests create their own mock contexts.
493 test_no_key(reporter); 580 test_no_key(reporter);
581 test_wrapped(reporter);
494 test_duplicate_content_key(reporter); 582 test_duplicate_content_key(reporter);
495 test_duplicate_scratch_key(reporter); 583 test_duplicate_scratch_key(reporter);
496 test_purge_invalidated(reporter); 584 test_purge_invalidated(reporter);
497 test_cache_chained_purge(reporter); 585 test_cache_chained_purge(reporter);
498 test_resource_size_changed(reporter); 586 test_resource_size_changed(reporter);
499 } 587 }
500 588
501 #endif 589 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrResourceCache2.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698