OLD | NEW |
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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 | 113 |
114 static int NumAlive() { return fNumAlive; } | 114 static int NumAlive() { return fNumAlive; } |
115 | 115 |
116 void setUnrefWhenDestroyed(TestResource* resource) { | 116 void setUnrefWhenDestroyed(TestResource* resource) { |
117 SkRefCnt_SafeAssign(fToDelete, resource); | 117 SkRefCnt_SafeAssign(fToDelete, resource); |
118 } | 118 } |
119 | 119 |
120 static void ComputeScratchKey(SimulatedProperty property, GrScratchKey* key)
{ | 120 static void ComputeScratchKey(SimulatedProperty property, GrScratchKey* key)
{ |
121 static GrScratchKey::ResourceType t = GrScratchKey::GenerateResourceType
(); | 121 static GrScratchKey::ResourceType t = GrScratchKey::GenerateResourceType
(); |
122 GrScratchKey::Builder builder(key, t, kScratchKeyFieldCnt); | 122 GrScratchKey::Builder builder(key, t, kScratchKeyFieldCnt); |
123 for (size_t i = 0; i < kScratchKeyFieldCnt; ++i) { | 123 for (int i = 0; i < kScratchKeyFieldCnt; ++i) { |
124 builder[i] = i + static_cast<int>(property); | 124 builder[i] = static_cast<uint32_t>(i + property); |
125 } | 125 } |
126 } | 126 } |
127 | 127 |
128 static size_t ExpectedScratchKeySize() { | 128 static size_t ExpectedScratchKeySize() { |
129 return sizeof(uint32_t) * (kScratchKeyFieldCnt + GrScratchKey::kMetaData
Cnt); | 129 return sizeof(uint32_t) * (kScratchKeyFieldCnt + GrScratchKey::kMetaData
Cnt); |
130 } | 130 } |
131 | 131 |
132 private: | 132 private: |
133 static const size_t kScratchKeyFieldCnt = 6; | 133 static const int kScratchKeyFieldCnt = 6; |
134 | 134 |
135 TestResource(GrGpu* gpu, SimulatedProperty property, ScratchConstructor) | 135 TestResource(GrGpu* gpu, SimulatedProperty property, ScratchConstructor) |
136 : INHERITED(gpu, kCached_LifeCycle) | 136 : INHERITED(gpu, kCached_LifeCycle) |
137 , fToDelete(NULL) | 137 , fToDelete(NULL) |
138 , fSize(kDefaultSize) | 138 , fSize(kDefaultSize) |
139 , fProperty(property) { | 139 , fProperty(property) { |
140 GrScratchKey scratchKey; | 140 GrScratchKey scratchKey; |
141 ComputeScratchKey(fProperty, &scratchKey); | 141 ComputeScratchKey(fProperty, &scratchKey); |
142 this->setScratchKey(scratchKey); | 142 this->setScratchKey(scratchKey); |
143 ++fNumAlive; | 143 ++fNumAlive; |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); | 202 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); |
203 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); | 203 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); |
204 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes()); | 204 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes()); |
205 | 205 |
206 b->unref(); | 206 b->unref(); |
207 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); | 207 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); |
208 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); | 208 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
209 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); | 209 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
210 } | 210 } |
211 | 211 |
| 212 // Each integer passed as a template param creates a new domain. |
| 213 template <int> static void make_content_key(GrContentKey* key, int data) { |
| 214 static GrContentKey::Domain d = GrContentKey::GenerateDomain(); |
| 215 GrContentKey::Builder builder(key, d, 1); |
| 216 builder[0] = data; |
| 217 } |
| 218 |
212 static void test_budgeting(skiatest::Reporter* reporter) { | 219 static void test_budgeting(skiatest::Reporter* reporter) { |
213 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 220 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
214 REPORTER_ASSERT(reporter, SkToBool(context)); | 221 REPORTER_ASSERT(reporter, SkToBool(context)); |
215 if (NULL == context) { | 222 if (NULL == context) { |
216 return; | 223 return; |
217 } | 224 } |
218 context->setResourceCacheLimits(10, 300); | 225 context->setResourceCacheLimits(10, 300); |
219 GrResourceCache2* cache2 = context->getResourceCache2(); | 226 GrResourceCache2* cache2 = context->getResourceCache2(); |
220 cache2->purgeAllUnlocked(); | 227 cache2->purgeAllUnlocked(); |
221 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 228 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
222 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); | 229 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); |
223 | 230 |
224 GrCacheID::Key keyData; | 231 GrContentKey contentKey; |
225 memset(&keyData, 0, sizeof(keyData)); | 232 make_content_key<0>(&contentKey, 0); |
226 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0)
; | |
227 | 233 |
228 // Create a scratch, a content, and a wrapped resource | 234 // Create a scratch, a content, and a wrapped resource |
229 TestResource* scratch = | 235 TestResource* scratch = |
230 TestResource::CreateScratchTestResource(context->getGpu(), | 236 TestResource::CreateScratchTestResource(context->getGpu(), |
231 TestResource::kProperty2_Sim
ulatedProperty); | 237 TestResource::kProperty2_Sim
ulatedProperty); |
232 scratch->setSize(10); | 238 scratch->setSize(10); |
233 TestResource* content = SkNEW_ARGS(TestResource, (context->getGpu())); | 239 TestResource* content = SkNEW_ARGS(TestResource, (context->getGpu())); |
234 content->setSize(11); | 240 content->setSize(11); |
235 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); | 241 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); |
236 TestResource* wrapped = SkNEW_ARGS(TestResource, | 242 TestResource* wrapped = SkNEW_ARGS(TestResource, |
237 (context->getGpu(), GrGpuResource::kWrapp
ed_LifeCycle)); | 243 (context->getGpu(), GrGpuResource::kWrapp
ed_LifeCycle)); |
238 wrapped->setSize(12); | 244 wrapped->setSize(12); |
239 TestResource* unbudgeted = SkNEW_ARGS(TestResource, | 245 TestResource* unbudgeted = SkNEW_ARGS(TestResource, |
240 (context->getGpu(), GrGpuResource::kUn
cached_LifeCycle)); | 246 (context->getGpu(), GrGpuResource::kUn
cached_LifeCycle)); |
241 unbudgeted->setSize(13); | 247 unbudgeted->setSize(13); |
242 | 248 |
243 // Make sure we can't add a content key to the wrapped resource | 249 // Make sure we can't add a content key to the wrapped resource |
244 keyData.fData8[0] = 1; | 250 GrContentKey contentKey2; |
245 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0
); | 251 make_content_key<0>(&contentKey2, 1); |
246 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2)
); | 252 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2)
); |
247 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK
ey2)); | 253 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK
ey2)); |
248 | 254 |
249 // Make sure sizes are as we expect | 255 // Make sure sizes are as we expect |
250 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); | 256 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); |
251 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + | 257 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + |
252 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi
ze() == | 258 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi
ze() == |
253 cache2->getResourceBytes()); | 259 cache2->getResourceBytes()); |
254 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); | 260 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
255 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) == | 261 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) == |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 REPORTER_ASSERT(reporter, SkToBool(context)); | 314 REPORTER_ASSERT(reporter, SkToBool(context)); |
309 if (NULL == context) { | 315 if (NULL == context) { |
310 return; | 316 return; |
311 } | 317 } |
312 context->setResourceCacheLimits(10, 300); | 318 context->setResourceCacheLimits(10, 300); |
313 GrResourceCache2* cache2 = context->getResourceCache2(); | 319 GrResourceCache2* cache2 = context->getResourceCache2(); |
314 cache2->purgeAllUnlocked(); | 320 cache2->purgeAllUnlocked(); |
315 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 321 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
316 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); | 322 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); |
317 | 323 |
318 GrCacheID::Key keyData; | 324 GrContentKey contentKey; |
319 memset(&keyData, 0, sizeof(keyData)); | 325 make_content_key<0>(&contentKey, 0); |
320 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0)
; | |
321 | 326 |
322 TestResource* scratch; | 327 TestResource* scratch; |
323 TestResource* content; | 328 TestResource* content; |
324 TestResource* wrapped; | 329 TestResource* wrapped; |
325 TestResource* unbudgeted; | 330 TestResource* unbudgeted; |
326 | 331 |
327 // A large uncached or wrapped resource shouldn't evict anything. | 332 // A large uncached or wrapped resource shouldn't evict anything. |
328 scratch = TestResource::CreateScratchTestResource(context->getGpu(), | 333 scratch = TestResource::CreateScratchTestResource(context->getGpu(), |
329 TestResource::kProperty2_S
imulatedProperty); | 334 TestResource::kProperty2_S
imulatedProperty); |
330 scratch->setSize(10); | 335 scratch->setSize(10); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
569 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 574 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
570 REPORTER_ASSERT(reporter, SkToBool(context)); | 575 REPORTER_ASSERT(reporter, SkToBool(context)); |
571 if (NULL == context) { | 576 if (NULL == context) { |
572 return; | 577 return; |
573 } | 578 } |
574 context->setResourceCacheLimits(5, 30000); | 579 context->setResourceCacheLimits(5, 30000); |
575 GrResourceCache2* cache2 = context->getResourceCache2(); | 580 GrResourceCache2* cache2 = context->getResourceCache2(); |
576 cache2->purgeAllUnlocked(); | 581 cache2->purgeAllUnlocked(); |
577 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 582 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
578 | 583 |
579 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); | 584 GrContentKey key; |
580 GrCacheID::Key keyData; | 585 make_content_key<0>(&key, 0); |
581 memset(&keyData, 0, sizeof(keyData)); | |
582 GrResourceKey key(GrCacheID(domain, keyData), 0); | |
583 | 586 |
584 // Create two resources that we will attempt to register with the same conte
nt key. | 587 // Create two resources that we will attempt to register with the same conte
nt key. |
585 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); | 588 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
586 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); | 589 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
587 a->setSize(11); | 590 a->setSize(11); |
588 b->setSize(12); | 591 b->setSize(12); |
589 | 592 |
590 // Can't set the same content key on two resources. | 593 // Can't set the same content key on two resources. |
591 REPORTER_ASSERT(reporter, a->cacheAccess().setContentKey(key)); | 594 REPORTER_ASSERT(reporter, a->cacheAccess().setContentKey(key)); |
592 REPORTER_ASSERT(reporter, !b->cacheAccess().setContentKey(key)); | 595 REPORTER_ASSERT(reporter, !b->cacheAccess().setContentKey(key)); |
(...skipping 27 matching lines...) Expand all Loading... |
620 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); | 623 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); |
621 } | 624 } |
622 | 625 |
623 static void test_purge_invalidated(skiatest::Reporter* reporter) { | 626 static void test_purge_invalidated(skiatest::Reporter* reporter) { |
624 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 627 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
625 REPORTER_ASSERT(reporter, SkToBool(context)); | 628 REPORTER_ASSERT(reporter, SkToBool(context)); |
626 if (NULL == context) { | 629 if (NULL == context) { |
627 return; | 630 return; |
628 } | 631 } |
629 | 632 |
630 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); | 633 GrContentKey key1, key2, key3; |
631 GrCacheID::Key keyData; | 634 make_content_key<0>(&key1, 1); |
632 memset(&keyData, 0, sizeof(keyData)); | 635 make_content_key<0>(&key2, 2); |
633 | 636 make_content_key<0>(&key3, 3); |
634 keyData.fData64[0] = 1; | |
635 GrResourceKey key1(GrCacheID(domain, keyData), 0); | |
636 keyData.fData64[0] = 2; | |
637 GrResourceKey key2(GrCacheID(domain, keyData), 0); | |
638 keyData.fData64[0] = 3; | |
639 GrResourceKey key3(GrCacheID(domain, keyData), 0); | |
640 | 637 |
641 context->setResourceCacheLimits(5, 30000); | 638 context->setResourceCacheLimits(5, 30000); |
642 GrResourceCache2* cache2 = context->getResourceCache2(); | 639 GrResourceCache2* cache2 = context->getResourceCache2(); |
643 cache2->purgeAllUnlocked(); | 640 cache2->purgeAllUnlocked(); |
644 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 641 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
645 | 642 |
646 // Add three resources to the cache. | 643 // Add three resources to the cache. |
647 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); | 644 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
648 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); | 645 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
649 TestResource* c = SkNEW_ARGS(TestResource, (context->getGpu())); | 646 TestResource* c = SkNEW_ARGS(TestResource, (context->getGpu())); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); | 684 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
688 } | 685 } |
689 | 686 |
690 static void test_cache_chained_purge(skiatest::Reporter* reporter) { | 687 static void test_cache_chained_purge(skiatest::Reporter* reporter) { |
691 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 688 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
692 REPORTER_ASSERT(reporter, SkToBool(context)); | 689 REPORTER_ASSERT(reporter, SkToBool(context)); |
693 if (NULL == context) { | 690 if (NULL == context) { |
694 return; | 691 return; |
695 } | 692 } |
696 | 693 |
697 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); | 694 GrContentKey key1, key2; |
698 GrCacheID::Key keyData; | 695 make_content_key<0>(&key1, 1); |
699 memset(&keyData, 0, sizeof(keyData)); | 696 make_content_key<0>(&key2, 2); |
700 | |
701 keyData.fData64[0] = 1; | |
702 GrResourceKey key1(GrCacheID(domain, keyData), 0); | |
703 | |
704 keyData.fData64[0] = 2; | |
705 GrResourceKey key2(GrCacheID(domain, keyData), 0); | |
706 | 697 |
707 { | 698 { |
708 context->setResourceCacheLimits(3, 30000); | 699 context->setResourceCacheLimits(3, 30000); |
709 GrResourceCache2* cache2 = context->getResourceCache2(); | 700 GrResourceCache2* cache2 = context->getResourceCache2(); |
710 cache2->purgeAllUnlocked(); | 701 cache2->purgeAllUnlocked(); |
711 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); | 702 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); |
712 | 703 |
713 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); | 704 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
714 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); | 705 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
715 a->cacheAccess().setContentKey(key1); | 706 a->cacheAccess().setContentKey(key1); |
(...skipping 22 matching lines...) Expand all Loading... |
738 } | 729 } |
739 } | 730 } |
740 | 731 |
741 static void test_resource_size_changed(skiatest::Reporter* reporter) { | 732 static void test_resource_size_changed(skiatest::Reporter* reporter) { |
742 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 733 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
743 REPORTER_ASSERT(reporter, SkToBool(context)); | 734 REPORTER_ASSERT(reporter, SkToBool(context)); |
744 if (NULL == context) { | 735 if (NULL == context) { |
745 return; | 736 return; |
746 } | 737 } |
747 | 738 |
748 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); | 739 GrContentKey key1, key2; |
749 | 740 make_content_key<0>(&key1, 1); |
750 GrCacheID::Key key1Data; | 741 make_content_key<0>(&key2, 2); |
751 key1Data.fData64[0] = 0; | |
752 key1Data.fData64[1] = 0; | |
753 GrResourceKey key1(GrCacheID(domain, key1Data), 0); | |
754 | |
755 GrCacheID::Key key2Data; | |
756 key2Data.fData64[0] = 1; | |
757 key2Data.fData64[1] = 0; | |
758 GrResourceKey key2(GrCacheID(domain, key2Data), 0); | |
759 | 742 |
760 // Test changing resources sizes (both increase & decrease). | 743 // Test changing resources sizes (both increase & decrease). |
761 { | 744 { |
762 context->setResourceCacheLimits(3, 30000); | 745 context->setResourceCacheLimits(3, 30000); |
763 GrResourceCache2* cache2 = context->getResourceCache2(); | 746 GrResourceCache2* cache2 = context->getResourceCache2(); |
764 cache2->purgeAllUnlocked(); | 747 cache2->purgeAllUnlocked(); |
765 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); | 748 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); |
766 | 749 |
767 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); | 750 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
768 a->cacheAccess().setContentKey(key1); | 751 a->cacheAccess().setContentKey(key1); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 | 808 |
826 static const int kResourceCnt = 2000; | 809 static const int kResourceCnt = 2000; |
827 // Set the cache size to double the resource count because we're going to cr
eate 2x that number | 810 // Set the cache size to double the resource count because we're going to cr
eate 2x that number |
828 // resources, using two different key domains. Add a little slop to the byte
s because we resize | 811 // resources, using two different key domains. Add a little slop to the byte
s because we resize |
829 // down to 1 byte after creating the resource. | 812 // down to 1 byte after creating the resource. |
830 context->setResourceCacheLimits(2 * kResourceCnt, 2 * kResourceCnt + 1000); | 813 context->setResourceCacheLimits(2 * kResourceCnt, 2 * kResourceCnt + 1000); |
831 GrResourceCache2* cache2 = context->getResourceCache2(); | 814 GrResourceCache2* cache2 = context->getResourceCache2(); |
832 cache2->purgeAllUnlocked(); | 815 cache2->purgeAllUnlocked(); |
833 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 816 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
834 | 817 |
835 GrCacheID::Domain domain0 = GrCacheID::GenerateDomain(); | |
836 GrCacheID::Domain domain1 = GrCacheID::GenerateDomain(); | |
837 | |
838 GrCacheID::Key keyData; | |
839 memset(&keyData, 0, sizeof(keyData)); | |
840 | 818 |
841 for (int i = 0; i < kResourceCnt; ++i) { | 819 for (int i = 0; i < kResourceCnt; ++i) { |
| 820 GrContentKey key1, key2; |
| 821 make_content_key<1>(&key1, i); |
| 822 make_content_key<2>(&key2, i); |
| 823 |
842 TestResource* resource; | 824 TestResource* resource; |
843 keyData.fData32[0] = i; | |
844 | 825 |
845 GrResourceKey key0(GrCacheID(domain0, keyData), 0); | |
846 resource = SkNEW_ARGS(TestResource, (context->getGpu())); | |
847 resource->cacheAccess().setContentKey(key0); | |
848 resource->setSize(1); | |
849 resource->unref(); | |
850 | |
851 GrResourceKey key1(GrCacheID(domain1, keyData), 0); | |
852 resource = SkNEW_ARGS(TestResource, (context->getGpu())); | 826 resource = SkNEW_ARGS(TestResource, (context->getGpu())); |
853 resource->cacheAccess().setContentKey(key1); | 827 resource->cacheAccess().setContentKey(key1); |
854 resource->setSize(1); | 828 resource->setSize(1); |
855 resource->unref(); | 829 resource->unref(); |
| 830 |
| 831 resource = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 832 resource->cacheAccess().setContentKey(key2); |
| 833 resource->setSize(1); |
| 834 resource->unref(); |
856 } | 835 } |
857 | 836 |
858 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 2 * kResourceCnt); | 837 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 2 * kResourceCnt); |
859 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceBytes() == 2 * kResourc
eCnt); | 838 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceBytes() == 2 * kResourc
eCnt); |
860 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceCount() == 2 * kResourc
eCnt); | 839 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceCount() == 2 * kResourc
eCnt); |
861 REPORTER_ASSERT(reporter, cache2->getResourceBytes() == 2 * kResourceCnt); | 840 REPORTER_ASSERT(reporter, cache2->getResourceBytes() == 2 * kResourceCnt); |
862 REPORTER_ASSERT(reporter, cache2->getResourceCount() == 2 * kResourceCnt); | 841 REPORTER_ASSERT(reporter, cache2->getResourceCount() == 2 * kResourceCnt); |
863 for (int i = 0; i < kResourceCnt; ++i) { | 842 for (int i = 0; i < kResourceCnt; ++i) { |
864 keyData.fData32[0] = i; | 843 GrContentKey key1, key2; |
865 GrResourceKey key0(GrCacheID(domain0, keyData), 0); | 844 make_content_key<1>(&key1, i); |
866 REPORTER_ASSERT(reporter, cache2->hasContentKey(key0)); | 845 make_content_key<2>(&key2, i); |
867 GrResourceKey key1(GrCacheID(domain0, keyData), 0); | 846 |
868 REPORTER_ASSERT(reporter, cache2->hasContentKey(key1)); | 847 REPORTER_ASSERT(reporter, cache2->hasContentKey(key1)); |
| 848 REPORTER_ASSERT(reporter, cache2->hasContentKey(key2)); |
869 } | 849 } |
870 | 850 |
871 cache2->purgeAllUnlocked(); | 851 cache2->purgeAllUnlocked(); |
872 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 0); | 852 REPORTER_ASSERT(reporter, TestResource::NumAlive() == 0); |
873 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceBytes() == 0); | 853 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceBytes() == 0); |
874 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceCount() == 0); | 854 REPORTER_ASSERT(reporter, cache2->getBudgetedResourceCount() == 0); |
875 REPORTER_ASSERT(reporter, cache2->getResourceBytes() == 0); | 855 REPORTER_ASSERT(reporter, cache2->getResourceBytes() == 0); |
876 REPORTER_ASSERT(reporter, cache2->getResourceCount() == 0); | 856 REPORTER_ASSERT(reporter, cache2->getResourceCount() == 0); |
877 | 857 |
878 for (int i = 0; i < kResourceCnt; ++i) { | 858 for (int i = 0; i < kResourceCnt; ++i) { |
879 keyData.fData32[0] = i; | 859 GrContentKey key1, key2; |
880 GrResourceKey key0(GrCacheID(domain0, keyData), 0); | 860 make_content_key<1>(&key1, i); |
881 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key0)); | 861 make_content_key<2>(&key2, i); |
882 GrResourceKey key1(GrCacheID(domain0, keyData), 0); | 862 |
883 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key1)); | 863 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key1)); |
| 864 REPORTER_ASSERT(reporter, !cache2->hasContentKey(key2)); |
884 } | 865 } |
885 } | 866 } |
886 | 867 |
887 | 868 |
888 //////////////////////////////////////////////////////////////////////////////// | 869 //////////////////////////////////////////////////////////////////////////////// |
889 DEF_GPUTEST(ResourceCache, reporter, factory) { | 870 DEF_GPUTEST(ResourceCache, reporter, factory) { |
890 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { | 871 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
891 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G
LContextType>(type); | 872 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G
LContextType>(type); |
892 if (!GrContextFactory::IsRenderingGLContext(glType)) { | 873 if (!GrContextFactory::IsRenderingGLContext(glType)) { |
893 continue; | 874 continue; |
(...skipping 21 matching lines...) Expand all Loading... |
915 test_duplicate_scratch_key(reporter); | 896 test_duplicate_scratch_key(reporter); |
916 test_remove_scratch_key(reporter); | 897 test_remove_scratch_key(reporter); |
917 test_scratch_key_consistency(reporter); | 898 test_scratch_key_consistency(reporter); |
918 test_purge_invalidated(reporter); | 899 test_purge_invalidated(reporter); |
919 test_cache_chained_purge(reporter); | 900 test_cache_chained_purge(reporter); |
920 test_resource_size_changed(reporter); | 901 test_resource_size_changed(reporter); |
921 test_large_resource_count(reporter); | 902 test_large_resource_count(reporter); |
922 } | 903 } |
923 | 904 |
924 #endif | 905 #endif |
OLD | NEW |