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

Side by Side Diff: tests/ResourceCacheTest.cpp

Issue 940463006: Rename GrContentKey to GrUniqueKey (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Address comments Created 5 years, 10 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 | « tests/GLProgramsTest.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 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 192
193 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive()); 193 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive());
194 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount()); 194 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount());
195 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() + c->gpuMe morySize() + 195 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() + c->gpuMe morySize() +
196 d->gpuMemorySize() == cache->getResourceBytes()); 196 d->gpuMemorySize() == cache->getResourceBytes());
197 197
198 // Should be safe to purge without deleting the resources since we still hav e refs. 198 // Should be safe to purge without deleting the resources since we still hav e refs.
199 cache->purgeAllUnlocked(); 199 cache->purgeAllUnlocked();
200 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive()); 200 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive());
201 201
202 // Since the resources have neither content nor scratch keys, delete immedia tely upon unref. 202 // Since the resources have neither unique nor scratch keys, delete immediat ely upon unref.
203 203
204 a->unref(); 204 a->unref();
205 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive()); 205 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive());
206 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount()); 206 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount());
207 REPORTER_ASSERT(reporter, b->gpuMemorySize() + c->gpuMemorySize() + d->gpuMe morySize() == 207 REPORTER_ASSERT(reporter, b->gpuMemorySize() + c->gpuMemorySize() + d->gpuMe morySize() ==
208 cache->getResourceBytes()); 208 cache->getResourceBytes());
209 209
210 c->unref(); 210 c->unref();
211 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 211 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
212 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 212 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
213 REPORTER_ASSERT(reporter, b->gpuMemorySize() + d->gpuMemorySize() == 213 REPORTER_ASSERT(reporter, b->gpuMemorySize() + d->gpuMemorySize() ==
214 cache->getResourceBytes()); 214 cache->getResourceBytes());
215 215
216 d->unref(); 216 d->unref();
217 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); 217 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive());
218 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); 218 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount());
219 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache->getResourceBytes()); 219 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache->getResourceBytes());
220 220
221 b->unref(); 221 b->unref();
222 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 222 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
223 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 223 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
224 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes()); 224 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes());
225 } 225 }
226 226
227 // Each integer passed as a template param creates a new domain. 227 // Each integer passed as a template param creates a new domain.
228 template <int> static void make_content_key(GrContentKey* key, int data) { 228 template <int> static void make_unique_key(GrUniqueKey* key, int data) {
229 static GrContentKey::Domain d = GrContentKey::GenerateDomain(); 229 static GrUniqueKey::Domain d = GrUniqueKey::GenerateDomain();
230 GrContentKey::Builder builder(key, d, 1); 230 GrUniqueKey::Builder builder(key, d, 1);
231 builder[0] = data; 231 builder[0] = data;
232 } 232 }
233 233
234 static void test_budgeting(skiatest::Reporter* reporter) { 234 static void test_budgeting(skiatest::Reporter* reporter) {
235 Mock mock(10, 300); 235 Mock mock(10, 300);
236 GrContext* context = mock.context(); 236 GrContext* context = mock.context();
237 GrResourceCache* cache = mock.cache(); 237 GrResourceCache* cache = mock.cache();
238 238
239 GrContentKey contentKey; 239 GrUniqueKey uniqueKey;
240 make_content_key<0>(&contentKey, 0); 240 make_unique_key<0>(&uniqueKey, 0);
241 241
242 // Create a scratch, a content, and a wrapped resource 242 // Create a scratch, a unique, and a wrapped resource
243 TestResource* scratch = 243 TestResource* scratch =
244 TestResource::CreateScratch(context->getGpu(), TestResource::kB_Simu latedProperty); 244 TestResource::CreateScratch(context->getGpu(), TestResource::kB_Simu latedProperty);
245 scratch->setSize(10); 245 scratch->setSize(10);
246 TestResource* content = SkNEW_ARGS(TestResource, (context->getGpu())); 246 TestResource* unique = SkNEW_ARGS(TestResource, (context->getGpu()));
247 content->setSize(11); 247 unique->setSize(11);
248 REPORTER_ASSERT(reporter, content->resourcePriv().setContentKey(contentKey)) ; 248 REPORTER_ASSERT(reporter, unique->resourcePriv().setUniqueKey(uniqueKey));
249 TestResource* wrapped = SkNEW_ARGS(TestResource, 249 TestResource* wrapped = SkNEW_ARGS(TestResource,
250 (context->getGpu(), GrGpuResource::kWrapp ed_LifeCycle)); 250 (context->getGpu(), GrGpuResource::kWrapp ed_LifeCycle));
251 wrapped->setSize(12); 251 wrapped->setSize(12);
252 TestResource* unbudgeted = SkNEW_ARGS(TestResource, 252 TestResource* unbudgeted = SkNEW_ARGS(TestResource,
253 (context->getGpu(), GrGpuResource::kUn cached_LifeCycle)); 253 (context->getGpu(), GrGpuResource::kUn cached_LifeCycle));
254 unbudgeted->setSize(13); 254 unbudgeted->setSize(13);
255 255
256 // Make sure we can't add a content key to the wrapped resource 256 // Make sure we can't add a unique key to the wrapped resource
257 GrContentKey contentKey2; 257 GrUniqueKey uniqueKey2;
258 make_content_key<0>(&contentKey2, 1); 258 make_unique_key<0>(&uniqueKey2, 1);
259 REPORTER_ASSERT(reporter, !wrapped->resourcePriv().setContentKey(contentKey2 )); 259 REPORTER_ASSERT(reporter, !wrapped->resourcePriv().setUniqueKey(uniqueKey2)) ;
260 REPORTER_ASSERT(reporter, NULL == cache->findAndRefContentResource(contentKe y2)); 260 REPORTER_ASSERT(reporter, NULL == cache->findAndRefUniqueResource(uniqueKey2 ));
261 261
262 // Make sure sizes are as we expect 262 // Make sure sizes are as we expect
263 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount()); 263 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount());
264 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + 264 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize() +
265 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() == 265 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() ==
266 cache->getResourceBytes()); 266 cache->getResourceBytes());
267 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount()); 267 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount());
268 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == 268 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize() ==
269 cache->getBudgetedResourceBytes()); 269 cache->getBudgetedResourceBytes());
270 270
271 // Our refs mean that the resources are non purgeable. 271 // Our refs mean that the resources are non purgeable.
272 cache->purgeAllUnlocked(); 272 cache->purgeAllUnlocked();
273 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount()); 273 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount());
274 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + 274 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize() +
275 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() == 275 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() ==
276 cache->getResourceBytes()); 276 cache->getResourceBytes());
277 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount()); 277 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount());
278 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == 278 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize() ==
279 cache->getBudgetedResourceBytes()); 279 cache->getBudgetedResourceBytes());
280 280
281 // Unreffing the wrapped resource should free it right away. 281 // Unreffing the wrapped resource should free it right away.
282 wrapped->unref(); 282 wrapped->unref();
283 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount()); 283 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount());
284 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + 284 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize() +
285 unbudgeted->gpuMemorySize() == cache->getResourceB ytes()); 285 unbudgeted->gpuMemorySize() == cache->getResourceB ytes());
286 286
287 // Now try freeing the budgeted resources first 287 // Now try freeing the budgeted resources first
288 wrapped = SkNEW_ARGS(TestResource, (context->getGpu(), GrGpuResource::kWrapp ed_LifeCycle)); 288 wrapped = SkNEW_ARGS(TestResource, (context->getGpu(), GrGpuResource::kWrapp ed_LifeCycle));
289 scratch->setSize(12); 289 scratch->setSize(12);
290 content->unref(); 290 unique->unref();
291 cache->purgeAllUnlocked(); 291 cache->purgeAllUnlocked();
292 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount()); 292 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount());
293 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize( ) + 293 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize( ) +
294 unbudgeted->gpuMemorySize() == cache->getResourceB ytes()); 294 unbudgeted->gpuMemorySize() == cache->getResourceB ytes());
295 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); 295 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount());
296 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache->getBudgetedReso urceBytes()); 296 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache->getBudgetedReso urceBytes());
297 297
298 scratch->unref(); 298 scratch->unref();
299 cache->purgeAllUnlocked(); 299 cache->purgeAllUnlocked();
300 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 300 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
(...skipping 13 matching lines...) Expand all
314 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes()); 314 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes());
315 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceCount()); 315 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceCount());
316 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceBytes()); 316 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceBytes());
317 } 317 }
318 318
319 static void test_unbudgeted(skiatest::Reporter* reporter) { 319 static void test_unbudgeted(skiatest::Reporter* reporter) {
320 Mock mock(10, 30000); 320 Mock mock(10, 30000);
321 GrContext* context = mock.context(); 321 GrContext* context = mock.context();
322 GrResourceCache* cache = mock.cache(); 322 GrResourceCache* cache = mock.cache();
323 323
324 GrContentKey contentKey; 324 GrUniqueKey uniqueKey;
325 make_content_key<0>(&contentKey, 0); 325 make_unique_key<0>(&uniqueKey, 0);
326 326
327 TestResource* scratch; 327 TestResource* scratch;
328 TestResource* content; 328 TestResource* unique;
329 TestResource* wrapped; 329 TestResource* wrapped;
330 TestResource* unbudgeted; 330 TestResource* unbudgeted;
331 331
332 // A large uncached or wrapped resource shouldn't evict anything. 332 // A large uncached or wrapped resource shouldn't evict anything.
333 scratch = TestResource::CreateScratch(context->getGpu(), TestResource::kB_Si mulatedProperty); 333 scratch = TestResource::CreateScratch(context->getGpu(), TestResource::kB_Si mulatedProperty);
334 scratch->setSize(10); 334 scratch->setSize(10);
335 scratch->unref(); 335 scratch->unref();
336 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); 336 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount());
337 REPORTER_ASSERT(reporter, 10 == cache->getResourceBytes()); 337 REPORTER_ASSERT(reporter, 10 == cache->getResourceBytes());
338 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); 338 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount());
339 REPORTER_ASSERT(reporter, 10 == cache->getBudgetedResourceBytes()); 339 REPORTER_ASSERT(reporter, 10 == cache->getBudgetedResourceBytes());
340 340
341 content = SkNEW_ARGS(TestResource, (context->getGpu())); 341 unique = SkNEW_ARGS(TestResource, (context->getGpu()));
342 content->setSize(11); 342 unique->setSize(11);
343 REPORTER_ASSERT(reporter, content->resourcePriv().setContentKey(contentKey)) ; 343 REPORTER_ASSERT(reporter, unique->resourcePriv().setUniqueKey(uniqueKey));
344 content->unref(); 344 unique->unref();
345 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 345 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
346 REPORTER_ASSERT(reporter, 21 == cache->getResourceBytes()); 346 REPORTER_ASSERT(reporter, 21 == cache->getResourceBytes());
347 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount()); 347 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount());
348 REPORTER_ASSERT(reporter, 21 == cache->getBudgetedResourceBytes()); 348 REPORTER_ASSERT(reporter, 21 == cache->getBudgetedResourceBytes());
349 349
350 size_t large = 2 * cache->getResourceBytes(); 350 size_t large = 2 * cache->getResourceBytes();
351 unbudgeted = SkNEW_ARGS(TestResource, 351 unbudgeted = SkNEW_ARGS(TestResource,
352 (context->getGpu(), large, GrGpuResource::kUncached_ LifeCycle)); 352 (context->getGpu(), large, GrGpuResource::kUncached_ LifeCycle));
353 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount()); 353 REPORTER_ASSERT(reporter, 3 == cache->getResourceCount());
354 REPORTER_ASSERT(reporter, 21 + large == cache->getResourceBytes()); 354 REPORTER_ASSERT(reporter, 21 + large == cache->getResourceBytes());
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 REPORTER_ASSERT(reporter, find == a || find == b); 599 REPORTER_ASSERT(reporter, find == a || find == b);
600 600
601 GrGpuResource* find2 = cache->findAndRefScratchResource(scratchKey2); 601 GrGpuResource* find2 = cache->findAndRefScratchResource(scratchKey2);
602 REPORTER_ASSERT(reporter, find2 != NULL); 602 REPORTER_ASSERT(reporter, find2 != NULL);
603 REPORTER_ASSERT(reporter, find2 == a || find2 == b); 603 REPORTER_ASSERT(reporter, find2 == a || find2 == b);
604 REPORTER_ASSERT(reporter, find2 != find); 604 REPORTER_ASSERT(reporter, find2 != find);
605 find2->unref(); 605 find2->unref();
606 find->unref(); 606 find->unref();
607 } 607 }
608 608
609 static void test_duplicate_content_key(skiatest::Reporter* reporter) { 609 static void test_duplicate_unique_key(skiatest::Reporter* reporter) {
610 Mock mock(5, 30000); 610 Mock mock(5, 30000);
611 GrContext* context = mock.context(); 611 GrContext* context = mock.context();
612 GrResourceCache* cache = mock.cache(); 612 GrResourceCache* cache = mock.cache();
613 613
614 GrContentKey key; 614 GrUniqueKey key;
615 make_content_key<0>(&key, 0); 615 make_unique_key<0>(&key, 0);
616 616
617 // Create two resources that we will attempt to register with the same conte nt key. 617 // Create two resources that we will attempt to register with the same uniqu e key.
618 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); 618 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
619 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); 619 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu()));
620 a->setSize(11); 620 a->setSize(11);
621 b->setSize(12); 621 b->setSize(12);
622 622
623 // Can't set the same content key on two resources. 623 // Can't set the same unique key on two resources.
624 REPORTER_ASSERT(reporter, a->resourcePriv().setContentKey(key)); 624 REPORTER_ASSERT(reporter, a->resourcePriv().setUniqueKey(key));
625 REPORTER_ASSERT(reporter, !b->resourcePriv().setContentKey(key)); 625 REPORTER_ASSERT(reporter, !b->resourcePriv().setUniqueKey(key));
626 626
627 // Still have two resources because b is still reffed. 627 // Still have two resources because b is still reffed.
628 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 628 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
629 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == 629 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() ==
630 cache->getResourceBytes()); 630 cache->getResourceBytes());
631 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 631 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
632 632
633 b->unref(); 633 b->unref();
634 // Now b should be gone. 634 // Now b should be gone.
635 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); 635 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount());
(...skipping 15 matching lines...) Expand all
651 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 651 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
652 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes()); 652 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes());
653 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 653 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
654 } 654 }
655 655
656 static void test_purge_invalidated(skiatest::Reporter* reporter) { 656 static void test_purge_invalidated(skiatest::Reporter* reporter) {
657 Mock mock(5, 30000); 657 Mock mock(5, 30000);
658 GrContext* context = mock.context(); 658 GrContext* context = mock.context();
659 GrResourceCache* cache = mock.cache(); 659 GrResourceCache* cache = mock.cache();
660 660
661 GrContentKey key1, key2, key3; 661 GrUniqueKey key1, key2, key3;
662 make_content_key<0>(&key1, 1); 662 make_unique_key<0>(&key1, 1);
663 make_content_key<0>(&key2, 2); 663 make_unique_key<0>(&key2, 2);
664 make_content_key<0>(&key3, 3); 664 make_unique_key<0>(&key3, 3);
665 665
666 // Add three resources to the cache. Only c is usable as scratch. 666 // Add three resources to the cache. Only c is usable as scratch.
667 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); 667 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
668 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); 668 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu()));
669 TestResource* c = TestResource::CreateScratch(context->getGpu(), 669 TestResource* c = TestResource::CreateScratch(context->getGpu(),
670 TestResource::kA_SimulatedProp erty); 670 TestResource::kA_SimulatedProp erty);
671 a->resourcePriv().setContentKey(key1); 671 a->resourcePriv().setUniqueKey(key1);
672 b->resourcePriv().setContentKey(key2); 672 b->resourcePriv().setUniqueKey(key2);
673 c->resourcePriv().setContentKey(key3); 673 c->resourcePriv().setUniqueKey(key3);
674 a->unref(); 674 a->unref();
675 // hold b until *after* the message is sent. 675 // hold b until *after* the message is sent.
676 c->unref(); 676 c->unref();
677 677
678 REPORTER_ASSERT(reporter, cache->hasContentKey(key1)); 678 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key1));
679 REPORTER_ASSERT(reporter, cache->hasContentKey(key2)); 679 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key2));
680 REPORTER_ASSERT(reporter, cache->hasContentKey(key3)); 680 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key3));
681 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive()); 681 REPORTER_ASSERT(reporter, 3 == TestResource::NumAlive());
682 682
683 typedef GrContentKeyInvalidatedMessage Msg; 683 typedef GrUniqueKeyInvalidatedMessage Msg;
684 typedef SkMessageBus<GrContentKeyInvalidatedMessage> Bus; 684 typedef SkMessageBus<GrUniqueKeyInvalidatedMessage> Bus;
685 685
686 // Invalidate two of the three, they should be purged and no longer accessib le via their keys. 686 // Invalidate two of the three, they should be purged and no longer accessib le via their keys.
687 Bus::Post(Msg(key1)); 687 Bus::Post(Msg(key1));
688 Bus::Post(Msg(key2)); 688 Bus::Post(Msg(key2));
689 cache->purgeAsNeeded(); 689 cache->purgeAsNeeded();
690 // a should be deleted now, but we still have a ref on b. 690 // a should be deleted now, but we still have a ref on b.
691 REPORTER_ASSERT(reporter, !cache->hasContentKey(key1)); 691 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key1));
692 REPORTER_ASSERT(reporter, !cache->hasContentKey(key2)); 692 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key2));
693 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 693 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
694 REPORTER_ASSERT(reporter, cache->hasContentKey(key3)); 694 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key3));
695 695
696 // Invalidate the third. 696 // Invalidate the third.
697 Bus::Post(Msg(key3)); 697 Bus::Post(Msg(key3));
698 cache->purgeAsNeeded(); 698 cache->purgeAsNeeded();
699 // we still have a ref on b, c should be recycled as scratch. 699 // we still have a ref on b, c should be recycled as scratch.
700 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 700 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
701 REPORTER_ASSERT(reporter, !cache->hasContentKey(key3)); 701 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key3));
702 702
703 // make b purgeable. It should be immediately deleted since it has no key. 703 // make b purgeable. It should be immediately deleted since it has no key.
704 b->unref(); 704 b->unref();
705 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); 705 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive());
706 706
707 // Make sure we actually get to c via it's scratch key, before we say goodby e. 707 // Make sure we actually get to c via it's scratch key, before we say goodby e.
708 GrScratchKey scratchKey; 708 GrScratchKey scratchKey;
709 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch Key); 709 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch Key);
710 GrGpuResource* scratch = cache->findAndRefScratchResource(scratchKey); 710 GrGpuResource* scratch = cache->findAndRefScratchResource(scratchKey);
711 REPORTER_ASSERT(reporter, scratch == c); 711 REPORTER_ASSERT(reporter, scratch == c);
712 SkSafeUnref(scratch); 712 SkSafeUnref(scratch);
713 713
714 // Get rid of c. 714 // Get rid of c.
715 cache->purgeAllUnlocked(); 715 cache->purgeAllUnlocked();
716 scratch = cache->findAndRefScratchResource(scratchKey); 716 scratch = cache->findAndRefScratchResource(scratchKey);
717 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 717 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
718 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount()); 718 REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
719 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes()); 719 REPORTER_ASSERT(reporter, 0 == cache->getResourceBytes());
720 REPORTER_ASSERT(reporter, !scratch); 720 REPORTER_ASSERT(reporter, !scratch);
721 SkSafeUnref(scratch); 721 SkSafeUnref(scratch);
722 } 722 }
723 723
724 static void test_cache_chained_purge(skiatest::Reporter* reporter) { 724 static void test_cache_chained_purge(skiatest::Reporter* reporter) {
725 Mock mock(3, 30000); 725 Mock mock(3, 30000);
726 GrContext* context = mock.context(); 726 GrContext* context = mock.context();
727 GrResourceCache* cache = mock.cache(); 727 GrResourceCache* cache = mock.cache();
728 728
729 GrContentKey key1, key2; 729 GrUniqueKey key1, key2;
730 make_content_key<0>(&key1, 1); 730 make_unique_key<0>(&key1, 1);
731 make_content_key<0>(&key2, 2); 731 make_unique_key<0>(&key2, 2);
732 732
733 733
734 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); 734 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
735 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); 735 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu()));
736 a->resourcePriv().setContentKey(key1); 736 a->resourcePriv().setUniqueKey(key1);
737 b->resourcePriv().setContentKey(key2); 737 b->resourcePriv().setUniqueKey(key2);
738 738
739 // Make a cycle 739 // Make a cycle
740 a->setUnrefWhenDestroyed(b); 740 a->setUnrefWhenDestroyed(b);
741 b->setUnrefWhenDestroyed(a); 741 b->setUnrefWhenDestroyed(a);
742 742
743 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 743 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
744 744
745 a->unref(); 745 a->unref();
746 b->unref(); 746 b->unref();
747 747
748 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 748 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
749 749
750 cache->purgeAllUnlocked(); 750 cache->purgeAllUnlocked();
751 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 751 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
752 752
753 // Break the cycle 753 // Break the cycle
754 a->setUnrefWhenDestroyed(NULL); 754 a->setUnrefWhenDestroyed(NULL);
755 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); 755 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
756 756
757 cache->purgeAllUnlocked(); 757 cache->purgeAllUnlocked();
758 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); 758 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive());
759 } 759 }
760 760
761 static void test_resource_size_changed(skiatest::Reporter* reporter) { 761 static void test_resource_size_changed(skiatest::Reporter* reporter) {
762 GrContentKey key1, key2; 762 GrUniqueKey key1, key2;
763 make_content_key<0>(&key1, 1); 763 make_unique_key<0>(&key1, 1);
764 make_content_key<0>(&key2, 2); 764 make_unique_key<0>(&key2, 2);
765 765
766 // Test changing resources sizes (both increase & decrease). 766 // Test changing resources sizes (both increase & decrease).
767 { 767 {
768 Mock mock(3, 30000); 768 Mock mock(3, 30000);
769 GrContext* context = mock.context(); 769 GrContext* context = mock.context();
770 GrResourceCache* cache = mock.cache(); 770 GrResourceCache* cache = mock.cache();
771 771
772 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); 772 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
773 a->resourcePriv().setContentKey(key1); 773 a->resourcePriv().setUniqueKey(key1);
774 a->unref(); 774 a->unref();
775 775
776 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); 776 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu()));
777 b->resourcePriv().setContentKey(key2); 777 b->resourcePriv().setUniqueKey(key2);
778 b->unref(); 778 b->unref();
779 779
780 REPORTER_ASSERT(reporter, 200 == cache->getResourceBytes()); 780 REPORTER_ASSERT(reporter, 200 == cache->getResourceBytes());
781 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 781 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
782 { 782 {
783 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache->f indAndRefContentResource(key2))); 783 SkAutoTUnref<TestResource> find2(
784 static_cast<TestResource*>(cache->findAndRefUniqueResource(key2) ));
784 find2->setSize(200); 785 find2->setSize(200);
785 SkAutoTUnref<TestResource> find1(static_cast<TestResource*>(cache->f indAndRefContentResource(key1))); 786 SkAutoTUnref<TestResource> find1(
787 static_cast<TestResource*>(cache->findAndRefUniqueResource(key1) ));
786 find1->setSize(50); 788 find1->setSize(50);
787 } 789 }
788 790
789 REPORTER_ASSERT(reporter, 250 == cache->getResourceBytes()); 791 REPORTER_ASSERT(reporter, 250 == cache->getResourceBytes());
790 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 792 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
791 } 793 }
792 794
793 // Test increasing a resources size beyond the cache budget. 795 // Test increasing a resources size beyond the cache budget.
794 { 796 {
795 Mock mock(2, 300); 797 Mock mock(2, 300);
796 GrContext* context = mock.context(); 798 GrContext* context = mock.context();
797 GrResourceCache* cache = mock.cache(); 799 GrResourceCache* cache = mock.cache();
798 800
799 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); 801 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu()));
800 a->setSize(100); 802 a->setSize(100);
801 a->resourcePriv().setContentKey(key1); 803 a->resourcePriv().setUniqueKey(key1);
802 a->unref(); 804 a->unref();
803 805
804 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); 806 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu()));
805 b->setSize(100); 807 b->setSize(100);
806 b->resourcePriv().setContentKey(key2); 808 b->resourcePriv().setUniqueKey(key2);
807 b->unref(); 809 b->unref();
808 810
809 REPORTER_ASSERT(reporter, 200 == cache->getResourceBytes()); 811 REPORTER_ASSERT(reporter, 200 == cache->getResourceBytes());
810 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); 812 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount());
811 813
812 { 814 {
813 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache->f indAndRefContentResource(key2))); 815 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(
816 cache->findAndRefUniqueResource(key2)));
814 find2->setSize(201); 817 find2->setSize(201);
815 } 818 }
816 REPORTER_ASSERT(reporter, !cache->hasContentKey(key1)); 819 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key1));
817 820
818 REPORTER_ASSERT(reporter, 201 == cache->getResourceBytes()); 821 REPORTER_ASSERT(reporter, 201 == cache->getResourceBytes());
819 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); 822 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount());
820 } 823 }
821 } 824 }
822 825
823 static void test_large_resource_count(skiatest::Reporter* reporter) { 826 static void test_large_resource_count(skiatest::Reporter* reporter) {
824 // Set the cache size to double the resource count because we're going to cr eate 2x that number 827 // Set the cache size to double the resource count because we're going to cr eate 2x that number
825 // resources, using two different key domains. Add a little slop to the byte s because we resize 828 // resources, using two different key domains. Add a little slop to the byte s because we resize
826 // down to 1 byte after creating the resource. 829 // down to 1 byte after creating the resource.
827 static const int kResourceCnt = 2000; 830 static const int kResourceCnt = 2000;
828 831
829 Mock mock(2 * kResourceCnt, 2 * kResourceCnt + 1000); 832 Mock mock(2 * kResourceCnt, 2 * kResourceCnt + 1000);
830 GrContext* context = mock.context(); 833 GrContext* context = mock.context();
831 GrResourceCache* cache = mock.cache(); 834 GrResourceCache* cache = mock.cache();
832 835
833 for (int i = 0; i < kResourceCnt; ++i) { 836 for (int i = 0; i < kResourceCnt; ++i) {
834 GrContentKey key1, key2; 837 GrUniqueKey key1, key2;
835 make_content_key<1>(&key1, i); 838 make_unique_key<1>(&key1, i);
836 make_content_key<2>(&key2, i); 839 make_unique_key<2>(&key2, i);
837 840
838 TestResource* resource; 841 TestResource* resource;
839 842
840 resource = SkNEW_ARGS(TestResource, (context->getGpu())); 843 resource = SkNEW_ARGS(TestResource, (context->getGpu()));
841 resource->resourcePriv().setContentKey(key1); 844 resource->resourcePriv().setUniqueKey(key1);
842 resource->setSize(1); 845 resource->setSize(1);
843 resource->unref(); 846 resource->unref();
844 847
845 resource = SkNEW_ARGS(TestResource, (context->getGpu())); 848 resource = SkNEW_ARGS(TestResource, (context->getGpu()));
846 resource->resourcePriv().setContentKey(key2); 849 resource->resourcePriv().setUniqueKey(key2);
847 resource->setSize(1); 850 resource->setSize(1);
848 resource->unref(); 851 resource->unref();
849 } 852 }
850 853
851 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 2 * kResourceCnt); 854 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 2 * kResourceCnt);
852 REPORTER_ASSERT(reporter, cache->getBudgetedResourceBytes() == 2 * kResource Cnt); 855 REPORTER_ASSERT(reporter, cache->getBudgetedResourceBytes() == 2 * kResource Cnt);
853 REPORTER_ASSERT(reporter, cache->getBudgetedResourceCount() == 2 * kResource Cnt); 856 REPORTER_ASSERT(reporter, cache->getBudgetedResourceCount() == 2 * kResource Cnt);
854 REPORTER_ASSERT(reporter, cache->getResourceBytes() == 2 * kResourceCnt); 857 REPORTER_ASSERT(reporter, cache->getResourceBytes() == 2 * kResourceCnt);
855 REPORTER_ASSERT(reporter, cache->getResourceCount() == 2 * kResourceCnt); 858 REPORTER_ASSERT(reporter, cache->getResourceCount() == 2 * kResourceCnt);
856 for (int i = 0; i < kResourceCnt; ++i) { 859 for (int i = 0; i < kResourceCnt; ++i) {
857 GrContentKey key1, key2; 860 GrUniqueKey key1, key2;
858 make_content_key<1>(&key1, i); 861 make_unique_key<1>(&key1, i);
859 make_content_key<2>(&key2, i); 862 make_unique_key<2>(&key2, i);
860 863
861 REPORTER_ASSERT(reporter, cache->hasContentKey(key1)); 864 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key1));
862 REPORTER_ASSERT(reporter, cache->hasContentKey(key2)); 865 REPORTER_ASSERT(reporter, cache->hasUniqueKey(key2));
863 } 866 }
864 867
865 cache->purgeAllUnlocked(); 868 cache->purgeAllUnlocked();
866 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 0); 869 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 0);
867 REPORTER_ASSERT(reporter, cache->getBudgetedResourceBytes() == 0); 870 REPORTER_ASSERT(reporter, cache->getBudgetedResourceBytes() == 0);
868 REPORTER_ASSERT(reporter, cache->getBudgetedResourceCount() == 0); 871 REPORTER_ASSERT(reporter, cache->getBudgetedResourceCount() == 0);
869 REPORTER_ASSERT(reporter, cache->getResourceBytes() == 0); 872 REPORTER_ASSERT(reporter, cache->getResourceBytes() == 0);
870 REPORTER_ASSERT(reporter, cache->getResourceCount() == 0); 873 REPORTER_ASSERT(reporter, cache->getResourceCount() == 0);
871 874
872 for (int i = 0; i < kResourceCnt; ++i) { 875 for (int i = 0; i < kResourceCnt; ++i) {
873 GrContentKey key1, key2; 876 GrUniqueKey key1, key2;
874 make_content_key<1>(&key1, i); 877 make_unique_key<1>(&key1, i);
875 make_content_key<2>(&key2, i); 878 make_unique_key<2>(&key2, i);
876 879
877 REPORTER_ASSERT(reporter, !cache->hasContentKey(key1)); 880 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key1));
878 REPORTER_ASSERT(reporter, !cache->hasContentKey(key2)); 881 REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key2));
879 } 882 }
880 } 883 }
881 884
882 885
883 //////////////////////////////////////////////////////////////////////////////// 886 ////////////////////////////////////////////////////////////////////////////////
884 DEF_GPUTEST(ResourceCache, reporter, factory) { 887 DEF_GPUTEST(ResourceCache, reporter, factory) {
885 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { 888 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) {
886 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G LContextType>(type); 889 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G LContextType>(type);
887 if (!GrContextFactory::IsRenderingGLContext(glType)) { 890 if (!GrContextFactory::IsRenderingGLContext(glType)) {
888 continue; 891 continue;
(...skipping 11 matching lines...) Expand all
900 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, 903 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context,
901 SkSurface::kN o_Budgeted, info)); 904 SkSurface::kN o_Budgeted, info));
902 test_cache(reporter, context, surface->getCanvas()); 905 test_cache(reporter, context, surface->getCanvas());
903 } 906 }
904 907
905 // The below tests create their own mock contexts. 908 // The below tests create their own mock contexts.
906 test_no_key(reporter); 909 test_no_key(reporter);
907 test_budgeting(reporter); 910 test_budgeting(reporter);
908 test_unbudgeted(reporter); 911 test_unbudgeted(reporter);
909 test_unbudgeted_to_scratch(reporter); 912 test_unbudgeted_to_scratch(reporter);
910 test_duplicate_content_key(reporter); 913 test_duplicate_unique_key(reporter);
911 test_duplicate_scratch_key(reporter); 914 test_duplicate_scratch_key(reporter);
912 test_remove_scratch_key(reporter); 915 test_remove_scratch_key(reporter);
913 test_scratch_key_consistency(reporter); 916 test_scratch_key_consistency(reporter);
914 test_purge_invalidated(reporter); 917 test_purge_invalidated(reporter);
915 test_cache_chained_purge(reporter); 918 test_cache_chained_purge(reporter);
916 test_resource_size_changed(reporter); 919 test_resource_size_changed(reporter);
917 test_large_resource_count(reporter); 920 test_large_resource_count(reporter);
918 } 921 }
919 922
920 #endif 923 #endif
OLDNEW
« no previous file with comments | « tests/GLProgramsTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698