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

Side by Side Diff: tests/ResourceCacheTest.cpp

Issue 707493002: Use GrResourceCache2 to service content key lookups (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase on tot 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
« src/gpu/GrGpuResource.cpp ('K') | « src/gpu/GrTexture.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 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 } 58 }
59 59
60 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes); 60 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes);
61 } 61 }
62 62
63 class TestResource : public GrGpuResource { 63 class TestResource : public GrGpuResource {
64 static const size_t kDefaultSize = 100; 64 static const size_t kDefaultSize = 100;
65 65
66 public: 66 public:
67 SK_DECLARE_INST_COUNT(TestResource); 67 SK_DECLARE_INST_COUNT(TestResource);
68 TestResource(GrGpu* gpu, size_t size = kDefaultSize) 68 TestResource(GrGpu* gpu)
69 : INHERITED(gpu, false) 69 : INHERITED(gpu, false)
70 , fCache(NULL) 70 , fCache(NULL)
71 , fToDelete(NULL) 71 , fToDelete(NULL)
72 , fSize(size) { 72 , fSize(kDefaultSize) {
73 ++fNumAlive; 73 ++fNumAlive;
74 this->registerWithCache(); 74 this->registerWithCache();
75 } 75 }
76
77 TestResource(GrGpu* gpu, const GrResourceKey& scratchKey)
78 : INHERITED(gpu, false)
79 , fCache(NULL)
80 , fToDelete(NULL)
81 , fSize(kDefaultSize) {
82 this->setScratchKey(scratchKey);
83 ++fNumAlive;
84 this->registerWithCache();
85 }
76 86
77 ~TestResource() { 87 ~TestResource() {
78 --fNumAlive; 88 --fNumAlive;
79 if (fToDelete) { 89 if (fToDelete) {
80 // Breaks our little 2-element cycle below. 90 // Breaks our little 2-element cycle below.
81 fToDelete->setDeleteWhenDestroyed(NULL, NULL); 91 fToDelete->setDeleteWhenDestroyed(NULL, NULL);
82 fCache->deleteResource(fToDelete->getCacheEntry()); 92 fCache->deleteResource(fToDelete->getCacheEntry());
83 } 93 }
84 this->release(); 94 this->release();
85 } 95 }
(...skipping 15 matching lines...) Expand all
101 private: 111 private:
102 GrResourceCache* fCache; 112 GrResourceCache* fCache;
103 TestResource* fToDelete; 113 TestResource* fToDelete;
104 size_t fSize; 114 size_t fSize;
105 static int fNumAlive; 115 static int fNumAlive;
106 116
107 typedef GrGpuResource INHERITED; 117 typedef GrGpuResource INHERITED;
108 }; 118 };
109 int TestResource::fNumAlive = 0; 119 int TestResource::fNumAlive = 0;
110 120
111 static void test_purge_invalidated(skiatest::Reporter* reporter, GrContext* cont ext) { 121 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) {
112 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); 122 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
123 REPORTER_ASSERT(reporter, SkToBool(context));
124 if (NULL == context) {
125 return;
126 }
127 context->setResourceCacheLimits(5, 30000);
128 GrResourceCache* cache = context->getResourceCache();
129 SkDEBUGCODE(GrResourceCache2* cache2 = context->getResourceCache2();)
130 cache->purgeAllUnlocked();
131 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResour ceBytes());
132
113 GrCacheID::Key keyData; 133 GrCacheID::Key keyData;
114 keyData.fData64[0] = 5; 134 GrCacheID::Domain domain = GrResourceKey::ScratchDomain();
115 keyData.fData64[1] = 18;
116 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); 135 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
117 GrResourceKey key(GrCacheID(domain, keyData), t, 0); 136 GrResourceKey scratchKey(GrCacheID(domain, keyData), t, 0);
118 137
robertphillips 2014/11/10 13:28:26 Here.
138 // Add two resources that delete each other from the cache when destroyed.
139 TestResource* a = new TestResource(context->getGpu(), scratchKey);
140 TestResource* b = new TestResource(context->getGpu(), scratchKey);
141 a->setSize(11);
142 b->setSize(12);
143 // Scratch resources are registered with GrResourceCache2 just by existing. There are 2.
144 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey (scratchKey));)
145
146 REPORTER_ASSERT(reporter, cache->addResource(scratchKey, a));
147
148 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey (scratchKey));)
149
150 // Can't add the same resource twice.
151 REPORTER_ASSERT(reporter, !cache->addResource(scratchKey, a));
152 REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount());
153 REPORTER_ASSERT(reporter, a->gpuMemorySize() == cache->getCachedResourceByte s());
154 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey (scratchKey));)
155
156 // Add a second with the same key.
157 REPORTER_ASSERT(reporter, cache->addResource(scratchKey, b));
158 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount());
159 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() ==
160 cache->getCachedResourceBytes());
161 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
162 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey (scratchKey));)
163
164 // Our refs mean that the resources are non purgable.
165 cache->purgeAllUnlocked();
166 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
167 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount());
168
169 // Unref but don't purge
170 a->unref();
171 b->unref();
172 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
173 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey (scratchKey));)
174
175 // Purge again. This time resources should be purgable.
176 cache->purgeAllUnlocked();
177 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
178 REPORTER_ASSERT(reporter, 0 == cache->getCachedResourceCount());
179 SkDEBUGCODE(REPORTER_ASSERT(reporter, 0 == cache2->countScratchEntriesForKey (scratchKey));)
180 }
181
182 static void test_duplicate_content_key(skiatest::Reporter* reporter) {
183 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
184 REPORTER_ASSERT(reporter, SkToBool(context));
185 if (NULL == context) {
186 return;
187 }
119 context->setResourceCacheLimits(5, 30000); 188 context->setResourceCacheLimits(5, 30000);
120 GrResourceCache* cache = context->getResourceCache(); 189 GrResourceCache* cache = context->getResourceCache();
121 cache->purgeAllUnlocked(); 190 cache->purgeAllUnlocked();
122 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResour ceBytes()); 191 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResour ceBytes());
123 192
124 // Add two resources with the same key that delete each other from the cache when destroyed. 193 GrCacheID::Domain domain = GrCacheID::GenerateDomain();
194 GrCacheID::Key keyData;
195 memset(&keyData, 0, sizeof(keyData));
196 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
197 GrResourceKey key(GrCacheID(domain, keyData), t, 0);
198
199
robertphillips 2014/11/10 13:28:26 Here.
200 // Add two resources that delete each other from the cache when destroyed.
125 TestResource* a = new TestResource(context->getGpu()); 201 TestResource* a = new TestResource(context->getGpu());
126 TestResource* b = new TestResource(context->getGpu()); 202 TestResource* b = new TestResource(context->getGpu());
127 cache->addResource(key, a); 203 a->setSize(11);
128 cache->addResource(key, b); 204 b->setSize(12);
205 REPORTER_ASSERT(reporter, cache->addResource(key, a));
206 // Can't add the same or another resource with the same key.
207 REPORTER_ASSERT(reporter, !cache->addResource(key, a));
208 REPORTER_ASSERT(reporter, !cache->addResource(key, b));
209 REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount());
210 REPORTER_ASSERT(reporter, a->gpuMemorySize() == cache->getCachedResourceByte s());
211 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
212
213 b->unref();
214 cache->purgeAllUnlocked();
215 a->setSize(10);
216 REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount());
217 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive());
218
219 a->unref();
220 cache->purgeAllUnlocked();
221 REPORTER_ASSERT(reporter, 0 == cache->getCachedResourceCount());
222 REPORTER_ASSERT(reporter, 0 == cache->getCachedResourceBytes());
223 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
224 }
225
226 static void test_purge_invalidated(skiatest::Reporter* reporter) {
227 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
228 REPORTER_ASSERT(reporter, SkToBool(context));
229 if (NULL == context) {
230 return;
231 }
232
233 GrCacheID::Domain domain = GrCacheID::GenerateDomain();
234 GrCacheID::Key keyData;
235 memset(&keyData, 0, sizeof(keyData));
236
237 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
238
239 keyData.fData64[0] = 1;
240 GrResourceKey key1(GrCacheID(domain, keyData), t, 0);
241 keyData.fData64[0] = 2;
242 GrResourceKey key2(GrCacheID(domain, keyData), t, 0);
243 keyData.fData64[0] = 3;
244 GrResourceKey key3(GrCacheID(domain, keyData), t, 0);
245
246 context->setResourceCacheLimits(5, 30000);
247 GrResourceCache* cache = context->getResourceCache();
248 GrResourceCache2* cache2 = context->getResourceCache2();
249 cache->purgeAllUnlocked();
250 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedResour ceBytes());
251
robertphillips 2014/11/07 20:32:13 This comment doesn't seem right.
bsalomon 2014/11/07 21:48:44 Don't they delete each other (setDeleteWhenDestroy
robertphillips 2014/11/10 13:28:26 Ooops - I put that comment on the wrong line - ple
bsalomon 2014/11/10 14:14:57 Gotcha, will update before submitting.
252 // Add two resources that delete each other from the cache when destroyed.
253 TestResource* a = new TestResource(context->getGpu());
254 TestResource* b = new TestResource(context->getGpu());
255 cache->addResource(key1, a);
256 cache->addResource(key2, b);
129 // Circle back. 257 // Circle back.
130 a->setDeleteWhenDestroyed(cache, b); 258 a->setDeleteWhenDestroyed(cache, b);
131 b->setDeleteWhenDestroyed(cache, a); 259 b->setDeleteWhenDestroyed(cache, a);
132 a->unref(); 260 a->unref();
133 b->unref(); 261 b->unref();
134 262
135 // Add a third independent resource also with the same key. 263 // Add a third independent resource.
136 GrGpuResource* r = new TestResource(context->getGpu()); 264 GrGpuResource* r = new TestResource(context->getGpu());
137 cache->addResource(key, r); 265 cache->addResource(key3, r);
138 r->unref(); 266 r->unref();
139 267
268 REPORTER_ASSERT(reporter, cache2->hasContentKey(key1));
269 REPORTER_ASSERT(reporter, cache2->hasContentKey(key2));
270 REPORTER_ASSERT(reporter, cache2->hasContentKey(key3));
271
robertphillips 2014/11/07 20:32:13 // Invalidate 2 of the 3 ?
bsalomon 2014/11/07 21:48:44 Done.
140 // Invalidate all three, all three should be purged and destroyed. 272 // Invalidate all three, all three should be purged and destroyed.
141 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive()); 273 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive());
142 const GrResourceInvalidatedMessage msg = { key }; 274 const GrResourceInvalidatedMessage msg1 = { key1 };
143 SkMessageBus<GrResourceInvalidatedMessage>::Post(msg); 275 SkMessageBus<GrResourceInvalidatedMessage>::Post(msg1);
276 const GrResourceInvalidatedMessage msg2 = { key2 };
277 SkMessageBus<GrResourceInvalidatedMessage>::Post(msg2);
278 cache->purgeAsNeeded();
279 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive());
280 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key1));
281 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key2));
282 REPORTER_ASSERT(reporter, cache2->hasContentKey(key3));
283
robertphillips 2014/11/07 20:32:13 // Finally invalidate the third. ?
bsalomon 2014/11/07 21:48:44 Done.
284 const GrResourceInvalidatedMessage msg3 = { key3 };
285 SkMessageBus<GrResourceInvalidatedMessage>::Post(msg3);
144 cache->purgeAsNeeded(); 286 cache->purgeAsNeeded();
145 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 287 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
288 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key3));
146 } 289 }
147 290
148 static void test_cache_delete_on_destruction(skiatest::Reporter* reporter, 291 static void test_cache_delete_on_destruction(skiatest::Reporter* reporter) {
149 GrContext* context) { 292 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
293 REPORTER_ASSERT(reporter, SkToBool(context));
294 if (NULL == context) {
295 return;
296 }
297
150 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); 298 GrCacheID::Domain domain = GrCacheID::GenerateDomain();
151 GrCacheID::Key keyData; 299 GrCacheID::Key keyData;
152 keyData.fData64[0] = 5; 300 memset(&keyData, 0, sizeof(keyData));
153 keyData.fData64[1] = 0;
154 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); 301 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
155 302
156 GrResourceKey key(GrCacheID(domain, keyData), t, 0); 303 keyData.fData64[0] = 1;
304 GrResourceKey key1(GrCacheID(domain, keyData), t, 0);
305
306 keyData.fData64[0] = 2;
307 GrResourceKey key2(GrCacheID(domain, keyData), t, 0);
157 308
158 { 309 {
159 context->setResourceCacheLimits(3, 30000); 310 context->setResourceCacheLimits(3, 30000);
160 GrResourceCache* cache = context->getResourceCache(); 311 GrResourceCache* cache = context->getResourceCache();
161 cache->purgeAllUnlocked(); 312 cache->purgeAllUnlocked();
162 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes()); 313 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes());
163 314
164 TestResource* a = new TestResource(context->getGpu()); 315 TestResource* a = new TestResource(context->getGpu());
165 TestResource* b = new TestResource(context->getGpu()); 316 TestResource* b = new TestResource(context->getGpu());
166 cache->addResource(key, a); 317 cache->addResource(key1, a);
167 cache->addResource(key, b); 318 cache->addResource(key2, b);
168 319
169 a->setDeleteWhenDestroyed(cache, b); 320 a->setDeleteWhenDestroyed(cache, b);
170 b->setDeleteWhenDestroyed(cache, a); 321 b->setDeleteWhenDestroyed(cache, a);
171 322
172 a->unref(); 323 a->unref();
173 b->unref(); 324 b->unref();
325
174 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 326 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
327
175 cache->purgeAllUnlocked(); 328 cache->purgeAllUnlocked();
176 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 329 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
177 } 330 }
178 { 331 {
179 context->setResourceCacheLimits(3, 30000); 332 context->setResourceCacheLimits(3, 30000);
180 GrResourceCache* cache = context->getResourceCache(); 333 GrResourceCache* cache = context->getResourceCache();
181 cache->purgeAllUnlocked(); 334 cache->purgeAllUnlocked();
182 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes()); 335 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes());
336
183 TestResource* a = new TestResource(context->getGpu()); 337 TestResource* a = new TestResource(context->getGpu());
184 TestResource* b = new TestResource(context->getGpu()); 338 TestResource* b = new TestResource(context->getGpu());
185 cache->addResource(key, a); 339 cache->addResource(key1, a);
186 cache->addResource(key, b); 340 cache->addResource(key2, b);
187 341
188 a->setDeleteWhenDestroyed(cache, b); 342 a->setDeleteWhenDestroyed(cache, b);
189 b->setDeleteWhenDestroyed(cache, a); 343 b->setDeleteWhenDestroyed(cache, a);
190 344
191 a->unref(); 345 a->unref();
192 b->unref(); 346 b->unref();
193 347
194 cache->deleteResource(a->getCacheEntry()); 348 cache->deleteResource(a->getCacheEntry());
195
196 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 349 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
197 } 350 }
198 } 351 }
199 352
200 static void test_resource_size_changed(skiatest::Reporter* reporter, 353 static void test_resource_size_changed(skiatest::Reporter* reporter) {
201 GrContext* context) { 354 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext());
355 REPORTER_ASSERT(reporter, SkToBool(context));
356 if (NULL == context) {
357 return;
358 }
359
202 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); 360 GrCacheID::Domain domain = GrCacheID::GenerateDomain();
203 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); 361 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType();
204 362
205 GrCacheID::Key key1Data; 363 GrCacheID::Key key1Data;
206 key1Data.fData64[0] = 0; 364 key1Data.fData64[0] = 0;
207 key1Data.fData64[1] = 0; 365 key1Data.fData64[1] = 0;
208 GrResourceKey key1(GrCacheID(domain, key1Data), t, 0); 366 GrResourceKey key1(GrCacheID(domain, key1Data), t, 0);
209 367
210 GrCacheID::Key key2Data; 368 GrCacheID::Key key2Data;
211 key2Data.fData64[0] = 1; 369 key2Data.fData64[0] = 1;
212 key2Data.fData64[1] = 0; 370 key2Data.fData64[1] = 0;
213 GrResourceKey key2(GrCacheID(domain, key2Data), t, 0); 371 GrResourceKey key2(GrCacheID(domain, key2Data), t, 0);
214 372
215 // Test changing resources sizes (both increase & decrease). 373 // Test changing resources sizes (both increase & decrease).
216 { 374 {
217 context->setResourceCacheLimits(3, 30000); 375 context->setResourceCacheLimits(3, 30000);
218 GrResourceCache* cache = context->getResourceCache(); 376 GrResourceCache* cache = context->getResourceCache();
377 GrResourceCache2* cache2 = context->getResourceCache2();
219 cache->purgeAllUnlocked(); 378 cache->purgeAllUnlocked();
220 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes()); 379 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes());
221 380
222 TestResource* a = new TestResource(context->getGpu()); 381 TestResource* a = new TestResource(context->getGpu());
223 a->setSize(100); // Test didChangeGpuMemorySize() when not in the cache. 382 a->setSize(100); // Test didChangeGpuMemorySize() when not in the cache.
224 cache->addResource(key1, a); 383 cache->addResource(key1, a);
225 a->unref(); 384 a->unref();
226 385
227 TestResource* b = new TestResource(context->getGpu()); 386 TestResource* b = new TestResource(context->getGpu());
228 b->setSize(100); 387 b->setSize(100);
229 cache->addResource(key2, b); 388 cache->addResource(key2, b);
230 b->unref(); 389 b->unref();
231 390
232 REPORTER_ASSERT(reporter, 200 == cache->getCachedResourceBytes()); 391 REPORTER_ASSERT(reporter, 200 == cache->getCachedResourceBytes());
233 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount()); 392 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount());
234 393 {
235 static_cast<TestResource*>(cache->find(key2))->setSize(200); 394 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2-> findAndRefContentResource(key2)));
236 static_cast<TestResource*>(cache->find(key1))->setSize(50); 395 find2->setSize(200);
396 SkAutoTUnref<TestResource> find1(static_cast<TestResource*>(cache2-> findAndRefContentResource(key1)));
397 find1->setSize(50);
398 }
237 399
238 REPORTER_ASSERT(reporter, 250 == cache->getCachedResourceBytes()); 400 REPORTER_ASSERT(reporter, 250 == cache->getCachedResourceBytes());
239 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount()); 401 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount());
240 } 402 }
241 403
242 // Test increasing a resources size beyond the cache budget. 404 // Test increasing a resources size beyond the cache budget.
243 { 405 {
244 context->setResourceCacheLimits(2, 300); 406 context->setResourceCacheLimits(2, 300);
245 GrResourceCache* cache = context->getResourceCache(); 407 GrResourceCache* cache = context->getResourceCache();
408 GrResourceCache2* cache2 = context->getResourceCache2();
246 cache->purgeAllUnlocked(); 409 cache->purgeAllUnlocked();
247 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes()); 410 SkASSERT(0 == cache->getCachedResourceCount() && 0 == cache->getCachedRe sourceBytes());
248 411
249 TestResource* a = new TestResource(context->getGpu(), 100); 412 TestResource* a = new TestResource(context->getGpu());
413 a->setSize(100);
250 cache->addResource(key1, a); 414 cache->addResource(key1, a);
251 a->unref(); 415 a->unref();
252 416
253 TestResource* b = new TestResource(context->getGpu(), 100); 417 TestResource* b = new TestResource(context->getGpu());
418 b->setSize(100);
254 cache->addResource(key2, b); 419 cache->addResource(key2, b);
255 b->unref(); 420 b->unref();
256 421
257 REPORTER_ASSERT(reporter, 200 == cache->getCachedResourceBytes()); 422 REPORTER_ASSERT(reporter, 200 == cache->getCachedResourceBytes());
258 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount()); 423 REPORTER_ASSERT(reporter, 2 == cache->getCachedResourceCount());
259 424
260 static_cast<TestResource*>(cache->find(key2))->setSize(201); 425 {
261 REPORTER_ASSERT(reporter, !cache->hasKey(key1)); 426 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2-> findAndRefContentResource(key2)));
427 find2->setSize(201);
428 }
429 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key1));
262 430
263 REPORTER_ASSERT(reporter, 201 == cache->getCachedResourceBytes()); 431 REPORTER_ASSERT(reporter, 201 == cache->getCachedResourceBytes());
264 REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount()); 432 REPORTER_ASSERT(reporter, 1 == cache->getCachedResourceCount());
265 } 433 }
266 } 434 }
267 435
268 //////////////////////////////////////////////////////////////////////////////// 436 ////////////////////////////////////////////////////////////////////////////////
269 DEF_GPUTEST(ResourceCache, reporter, factory) { 437 DEF_GPUTEST(ResourceCache, reporter, factory) {
270 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { 438 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
271 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G LContextType>(type); 439 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G LContextType>(type);
272 if (!GrContextFactory::IsRenderingGLContext(glType)) { 440 if (!GrContextFactory::IsRenderingGLContext(glType)) {
273 continue; 441 continue;
274 } 442 }
275 GrContext* context = factory->get(glType); 443 GrContext* context = factory->get(glType);
276 if (NULL == context) { 444 if (NULL == context) {
277 continue; 445 continue;
278 } 446 }
279 GrSurfaceDesc desc; 447 GrSurfaceDesc desc;
280 desc.fConfig = kSkia8888_GrPixelConfig; 448 desc.fConfig = kSkia8888_GrPixelConfig;
281 desc.fFlags = kRenderTarget_GrSurfaceFlag; 449 desc.fFlags = kRenderTarget_GrSurfaceFlag;
282 desc.fWidth = gWidth; 450 desc.fWidth = gWidth;
283 desc.fHeight = gHeight; 451 desc.fHeight = gHeight;
284 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); 452 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight);
285 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info )); 453 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info ));
286 test_cache(reporter, context, surface->getCanvas()); 454 test_cache(reporter, context, surface->getCanvas());
287 } 455 }
288 456
289 // The below tests use a mock context. 457 // The below tests create their own mock contexts.
290 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); 458 test_duplicate_content_key(reporter);
291 REPORTER_ASSERT(reporter, SkToBool(context)); 459 test_duplicate_scratch_key(reporter);
292 if (NULL == context) { 460 test_purge_invalidated(reporter);
293 return; 461 test_cache_delete_on_destruction(reporter);
294 } 462 test_resource_size_changed(reporter);
295
296 test_purge_invalidated(reporter, context);
297 test_cache_delete_on_destruction(reporter, context);
298 test_resource_size_changed(reporter, context);
299 } 463 }
300 464
301 #endif 465 #endif
OLDNEW
« src/gpu/GrGpuResource.cpp ('K') | « src/gpu/GrTexture.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698