| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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) | 69 TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) |
| 70 : INHERITED(gpu, isWrapped) | 70 : INHERITED(gpu, lifeCycle) |
| 71 , fToDelete(NULL) |
| 72 , fSize(size) { |
| 73 ++fNumAlive; |
| 74 this->registerWithCache(); |
| 75 } |
| 76 |
| 77 TestResource(GrGpu* gpu, GrGpuResource::LifeCycle lifeCycle) |
| 78 : INHERITED(gpu, lifeCycle) |
| 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) | 85 TestResource(GrGpu* gpu) |
| 78 : INHERITED(gpu, false) | 86 : INHERITED(gpu, kCached_LifeCycle) |
| 79 , fToDelete(NULL) | 87 , fToDelete(NULL) |
| 80 , fSize(kDefaultSize) { | 88 , fSize(kDefaultSize) { |
| 81 ++fNumAlive; | 89 ++fNumAlive; |
| 82 this->registerWithCache(); | 90 this->registerWithCache(); |
| 83 } | 91 } |
| 84 | 92 |
| 85 TestResource(GrGpu* gpu, const GrScratchKey& scratchKey) | 93 TestResource(GrGpu* gpu, const GrScratchKey& scratchKey) |
| 86 : INHERITED(gpu, false) | 94 : INHERITED(gpu, kCached_LifeCycle) |
| 87 , fToDelete(NULL) | 95 , fToDelete(NULL) |
| 88 , fSize(kDefaultSize) { | 96 , fSize(kDefaultSize) { |
| 89 this->setScratchKey(scratchKey); | 97 this->setScratchKey(scratchKey); |
| 90 ++fNumAlive; | 98 ++fNumAlive; |
| 91 this->registerWithCache(); | 99 this->registerWithCache(); |
| 92 } | 100 } |
| 93 | 101 |
| 94 ~TestResource() { | 102 ~TestResource() { |
| 95 --fNumAlive; | 103 --fNumAlive; |
| 96 SkSafeUnref(fToDelete); | 104 SkSafeUnref(fToDelete); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 123 REPORTER_ASSERT(reporter, SkToBool(context)); | 131 REPORTER_ASSERT(reporter, SkToBool(context)); |
| 124 if (NULL == context) { | 132 if (NULL == context) { |
| 125 return; | 133 return; |
| 126 } | 134 } |
| 127 context->setResourceCacheLimits(10, 30000); | 135 context->setResourceCacheLimits(10, 30000); |
| 128 GrResourceCache2* cache2 = context->getResourceCache2(); | 136 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 129 cache2->purgeAllUnlocked(); | 137 cache2->purgeAllUnlocked(); |
| 130 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 138 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 131 | 139 |
| 132 // Create a bunch of resources with no keys | 140 // Create a bunch of resources with no keys |
| 133 TestResource* a = new TestResource(context->getGpu()); | 141 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 134 TestResource* b = new TestResource(context->getGpu()); | 142 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 135 TestResource* c = new TestResource(context->getGpu()); | 143 TestResource* c = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 136 TestResource* d = new TestResource(context->getGpu()); | 144 TestResource* d = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 137 a->setSize(11); | 145 a->setSize(11); |
| 138 b->setSize(12); | 146 b->setSize(12); |
| 139 c->setSize(13); | 147 c->setSize(13); |
| 140 d->setSize(14); | 148 d->setSize(14); |
| 141 | 149 |
| 142 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive()); | 150 REPORTER_ASSERT(reporter, 4 == TestResource::NumAlive()); |
| 143 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); | 151 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); |
| 144 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() + c->gpuMe
morySize() + | 152 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() + c->gpuMe
morySize() + |
| 145 d->gpuMemorySize() == cache2->getResourceBytes()); | 153 d->gpuMemorySize() == cache2->getResourceBytes()); |
| 146 | 154 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); | 199 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); |
| 192 | 200 |
| 193 GrScratchKey scratchKey; | 201 GrScratchKey scratchKey; |
| 194 make_scratch_key(&scratchKey); | 202 make_scratch_key(&scratchKey); |
| 195 | 203 |
| 196 GrCacheID::Key keyData; | 204 GrCacheID::Key keyData; |
| 197 memset(&keyData, 0, sizeof(keyData)); | 205 memset(&keyData, 0, sizeof(keyData)); |
| 198 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0)
; | 206 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0)
; |
| 199 | 207 |
| 200 // Create a scratch, a content, and a wrapped resource | 208 // Create a scratch, a content, and a wrapped resource |
| 201 TestResource* scratch = new TestResource(context->getGpu(), scratchKey); | 209 TestResource* scratch = SkNEW_ARGS(TestResource, (context->getGpu(), scratch
Key)); |
| 202 scratch->setSize(10); | 210 scratch->setSize(10); |
| 203 TestResource* content = new TestResource(context->getGpu()); | 211 TestResource* content = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 204 scratch->setSize(11); | 212 content->setSize(11); |
| 205 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); | 213 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); |
| 206 TestResource* wrapped = new TestResource(context->getGpu(), true); | 214 TestResource* wrapped = SkNEW_ARGS(TestResource, |
| 207 scratch->setSize(12); | 215 (context->getGpu(), GrGpuResource::kWrapp
ed_LifeCycle)); |
| 208 TestResource* unbudgeted = new TestResource(context->getGpu()); | 216 wrapped->setSize(12); |
| 217 TestResource* unbudgeted = SkNEW_ARGS(TestResource, |
| 218 (context->getGpu(), GrGpuResource::kUn
cached_LifeCycle)); |
| 209 unbudgeted->setSize(13); | 219 unbudgeted->setSize(13); |
| 210 unbudgeted->cacheAccess().setBudgeted(false); | |
| 211 | 220 |
| 212 // Make sure we can't add a content key to the wrapped resource | 221 // Make sure we can't add a content key to the wrapped resource |
| 213 keyData.fData8[0] = 1; | 222 keyData.fData8[0] = 1; |
| 214 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0
); | 223 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0
); |
| 215 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2)
); | 224 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2)
); |
| 216 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK
ey2)); | 225 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK
ey2)); |
| 217 | 226 |
| 218 // Make sure sizes are as we expect | 227 // Make sure sizes are as we expect |
| 219 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); | 228 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); |
| 220 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + | 229 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + |
| (...skipping 13 matching lines...) Expand all Loading... |
| 234 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) == | 243 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) == |
| 235 cache2->getBudgetedResourceBytes()); | 244 cache2->getBudgetedResourceBytes()); |
| 236 | 245 |
| 237 // Unreffing the wrapped resource should free it right away. | 246 // Unreffing the wrapped resource should free it right away. |
| 238 wrapped->unref(); | 247 wrapped->unref(); |
| 239 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); | 248 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 240 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + | 249 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize(
) + |
| 241 unbudgeted->gpuMemorySize() == cache2->getResource
Bytes()); | 250 unbudgeted->gpuMemorySize() == cache2->getResource
Bytes()); |
| 242 | 251 |
| 243 // Now try freeing the budgeted resources first | 252 // Now try freeing the budgeted resources first |
| 244 wrapped = new TestResource(context->getGpu(), true); | 253 wrapped = SkNEW_ARGS(TestResource, (context->getGpu(), GrGpuResource::kWrapp
ed_LifeCycle)); |
| 245 scratch->setSize(12); | 254 scratch->setSize(12); |
| 246 content->unref(); | 255 content->unref(); |
| 247 cache2->purgeAllUnlocked(); | 256 cache2->purgeAllUnlocked(); |
| 248 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); | 257 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 249 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize(
) + | 258 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize(
) + |
| 250 unbudgeted->gpuMemorySize() == cache2->getResource
Bytes()); | 259 unbudgeted->gpuMemorySize() == cache2->getResource
Bytes()); |
| 251 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount()); | 260 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount()); |
| 252 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache2->getBudgetedRes
ourceBytes()); | 261 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache2->getBudgetedRes
ourceBytes()); |
| 253 | 262 |
| 254 scratch->unref(); | 263 scratch->unref(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 265 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); | 274 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); |
| 266 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); | 275 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); |
| 267 | 276 |
| 268 unbudgeted->unref(); | 277 unbudgeted->unref(); |
| 269 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); | 278 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
| 270 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); | 279 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
| 271 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); | 280 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); |
| 272 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); | 281 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); |
| 273 } | 282 } |
| 274 | 283 |
| 284 static void test_unbudgeted(skiatest::Reporter* reporter) { |
| 285 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
| 286 REPORTER_ASSERT(reporter, SkToBool(context)); |
| 287 if (NULL == context) { |
| 288 return; |
| 289 } |
| 290 context->setResourceCacheLimits(10, 300); |
| 291 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 292 cache2->purgeAllUnlocked(); |
| 293 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 294 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted
ResourceBytes()); |
| 295 |
| 296 GrScratchKey scratchKey; |
| 297 make_scratch_key(&scratchKey); |
| 298 |
| 299 GrCacheID::Key keyData; |
| 300 memset(&keyData, 0, sizeof(keyData)); |
| 301 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), 0)
; |
| 302 |
| 303 TestResource* scratch; |
| 304 TestResource* content; |
| 305 TestResource* wrapped; |
| 306 TestResource* unbudgeted; |
| 307 |
| 308 // A large uncached or wrapped resource shouldn't evict anything. |
| 309 scratch = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
| 310 scratch->setSize(10); |
| 311 scratch->unref(); |
| 312 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); |
| 313 REPORTER_ASSERT(reporter, 10 == cache2->getResourceBytes()); |
| 314 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount()); |
| 315 REPORTER_ASSERT(reporter, 10 == cache2->getBudgetedResourceBytes()); |
| 316 |
| 317 content = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 318 content->setSize(11); |
| 319 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); |
| 320 content->unref(); |
| 321 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 322 REPORTER_ASSERT(reporter, 21 == cache2->getResourceBytes()); |
| 323 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 324 REPORTER_ASSERT(reporter, 21 == cache2->getBudgetedResourceBytes()); |
| 325 |
| 326 size_t large = 2 * cache2->getResourceBytes(); |
| 327 unbudgeted = SkNEW_ARGS(TestResource, |
| 328 (context->getGpu(), large, GrGpuResource::kUncached_
LifeCycle)); |
| 329 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 330 REPORTER_ASSERT(reporter, 21 + large == cache2->getResourceBytes()); |
| 331 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 332 REPORTER_ASSERT(reporter, 21 == cache2->getBudgetedResourceBytes()); |
| 333 |
| 334 unbudgeted->unref(); |
| 335 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 336 REPORTER_ASSERT(reporter, 21 == cache2->getResourceBytes()); |
| 337 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 338 REPORTER_ASSERT(reporter, 21 == cache2->getBudgetedResourceBytes()); |
| 339 |
| 340 wrapped = SkNEW_ARGS(TestResource, |
| 341 (context->getGpu(), large, GrGpuResource::kWrapped_Life
Cycle)); |
| 342 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 343 REPORTER_ASSERT(reporter, 21 + large == cache2->getResourceBytes()); |
| 344 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 345 REPORTER_ASSERT(reporter, 21 == cache2->getBudgetedResourceBytes()); |
| 346 |
| 347 wrapped->unref(); |
| 348 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 349 REPORTER_ASSERT(reporter, 21 == cache2->getResourceBytes()); |
| 350 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 351 REPORTER_ASSERT(reporter, 21 == cache2->getBudgetedResourceBytes()); |
| 352 |
| 353 cache2->purgeAllUnlocked(); |
| 354 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
| 355 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
| 356 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); |
| 357 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); |
| 358 } |
| 359 |
| 275 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) { | 360 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) { |
| 276 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 361 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
| 277 REPORTER_ASSERT(reporter, SkToBool(context)); | 362 REPORTER_ASSERT(reporter, SkToBool(context)); |
| 278 if (NULL == context) { | 363 if (NULL == context) { |
| 279 return; | 364 return; |
| 280 } | 365 } |
| 281 context->setResourceCacheLimits(5, 30000); | 366 context->setResourceCacheLimits(5, 30000); |
| 282 GrResourceCache2* cache2 = context->getResourceCache2(); | 367 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 283 cache2->purgeAllUnlocked(); | 368 cache2->purgeAllUnlocked(); |
| 284 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 369 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 285 | 370 |
| 286 GrScratchKey scratchKey; | 371 GrScratchKey scratchKey; |
| 287 make_scratch_key(&scratchKey); | 372 make_scratch_key(&scratchKey); |
| 288 | 373 |
| 289 // Create two resources that have the same scratch key. | 374 // Create two resources that have the same scratch key. |
| 290 TestResource* a = new TestResource(context->getGpu(), scratchKey); | 375 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
| 291 TestResource* b = new TestResource(context->getGpu(), scratchKey); | 376 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
| 292 a->setSize(11); | 377 a->setSize(11); |
| 293 b->setSize(12); | 378 b->setSize(12); |
| 294 // Scratch resources are registered with GrResourceCache2 just by existing.
There are 2. | 379 // Scratch resources are registered with GrResourceCache2 just by existing.
There are 2. |
| 295 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 380 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 296 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey
(scratchKey));) | 381 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey
(scratchKey));) |
| 297 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 382 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 298 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == | 383 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == |
| 299 cache2->getResourceBytes()); | 384 cache2->getResourceBytes()); |
| 300 | 385 |
| 301 // Our refs mean that the resources are non purgable. | 386 // Our refs mean that the resources are non purgable. |
| (...skipping 22 matching lines...) Expand all Loading... |
| 324 } | 409 } |
| 325 context->setResourceCacheLimits(5, 30000); | 410 context->setResourceCacheLimits(5, 30000); |
| 326 GrResourceCache2* cache2 = context->getResourceCache2(); | 411 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 327 cache2->purgeAllUnlocked(); | 412 cache2->purgeAllUnlocked(); |
| 328 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 413 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 329 | 414 |
| 330 GrScratchKey scratchKey; | 415 GrScratchKey scratchKey; |
| 331 make_scratch_key(&scratchKey); | 416 make_scratch_key(&scratchKey); |
| 332 | 417 |
| 333 // Create two resources that have the same scratch key. | 418 // Create two resources that have the same scratch key. |
| 334 TestResource* a = new TestResource(context->getGpu(), scratchKey); | 419 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
| 335 TestResource* b = new TestResource(context->getGpu(), scratchKey); | 420 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu(), scratchKey)); |
| 336 a->unref(); | 421 a->unref(); |
| 337 b->unref(); | 422 b->unref(); |
| 338 | 423 |
| 339 // Scratch resources are registered with GrResourceCache2 just by existing.
There are 2. | 424 // Scratch resources are registered with GrResourceCache2 just by existing.
There are 2. |
| 340 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 425 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 341 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey
(scratchKey));) | 426 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache2->countScratchEntriesForKey
(scratchKey));) |
| 342 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 427 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 343 | 428 |
| 344 // Find the first resource and remove its scratch key | 429 // Find the first resource and remove its scratch key |
| 345 GrGpuResource* find; | 430 GrGpuResource* find; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 GrResourceCache2* cache2 = context->getResourceCache2(); | 470 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 386 cache2->purgeAllUnlocked(); | 471 cache2->purgeAllUnlocked(); |
| 387 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 472 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 388 | 473 |
| 389 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); | 474 GrCacheID::Domain domain = GrCacheID::GenerateDomain(); |
| 390 GrCacheID::Key keyData; | 475 GrCacheID::Key keyData; |
| 391 memset(&keyData, 0, sizeof(keyData)); | 476 memset(&keyData, 0, sizeof(keyData)); |
| 392 GrResourceKey key(GrCacheID(domain, keyData), 0); | 477 GrResourceKey key(GrCacheID(domain, keyData), 0); |
| 393 | 478 |
| 394 // Create two resources that we will attempt to register with the same conte
nt key. | 479 // Create two resources that we will attempt to register with the same conte
nt key. |
| 395 TestResource* a = new TestResource(context->getGpu()); | 480 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 396 TestResource* b = new TestResource(context->getGpu()); | 481 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 397 a->setSize(11); | 482 a->setSize(11); |
| 398 b->setSize(12); | 483 b->setSize(12); |
| 399 | 484 |
| 400 // Can't set the same content key on two resources. | 485 // Can't set the same content key on two resources. |
| 401 REPORTER_ASSERT(reporter, a->cacheAccess().setContentKey(key)); | 486 REPORTER_ASSERT(reporter, a->cacheAccess().setContentKey(key)); |
| 402 REPORTER_ASSERT(reporter, !b->cacheAccess().setContentKey(key)); | 487 REPORTER_ASSERT(reporter, !b->cacheAccess().setContentKey(key)); |
| 403 | 488 |
| 404 // Still have two resources because b is still reffed. | 489 // Still have two resources because b is still reffed. |
| 405 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 490 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 406 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == | 491 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 GrResourceKey key2(GrCacheID(domain, keyData), 0); | 532 GrResourceKey key2(GrCacheID(domain, keyData), 0); |
| 448 keyData.fData64[0] = 3; | 533 keyData.fData64[0] = 3; |
| 449 GrResourceKey key3(GrCacheID(domain, keyData), 0); | 534 GrResourceKey key3(GrCacheID(domain, keyData), 0); |
| 450 | 535 |
| 451 context->setResourceCacheLimits(5, 30000); | 536 context->setResourceCacheLimits(5, 30000); |
| 452 GrResourceCache2* cache2 = context->getResourceCache2(); | 537 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 453 cache2->purgeAllUnlocked(); | 538 cache2->purgeAllUnlocked(); |
| 454 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; | 539 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes())
; |
| 455 | 540 |
| 456 // Add three resources to the cache. | 541 // Add three resources to the cache. |
| 457 TestResource* a = new TestResource(context->getGpu()); | 542 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 458 TestResource* b = new TestResource(context->getGpu()); | 543 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 459 TestResource* c = new TestResource(context->getGpu()); | 544 TestResource* c = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 460 a->cacheAccess().setContentKey(key1); | 545 a->cacheAccess().setContentKey(key1); |
| 461 b->cacheAccess().setContentKey(key2); | 546 b->cacheAccess().setContentKey(key2); |
| 462 c->cacheAccess().setContentKey(key3); | 547 c->cacheAccess().setContentKey(key3); |
| 463 a->unref(); | 548 a->unref(); |
| 464 b->unref(); | 549 b->unref(); |
| 465 c->unref(); | 550 c->unref(); |
| 466 | 551 |
| 467 REPORTER_ASSERT(reporter, cache2->hasContentKey(key1)); | 552 REPORTER_ASSERT(reporter, cache2->hasContentKey(key1)); |
| 468 REPORTER_ASSERT(reporter, cache2->hasContentKey(key2)); | 553 REPORTER_ASSERT(reporter, cache2->hasContentKey(key2)); |
| 469 REPORTER_ASSERT(reporter, cache2->hasContentKey(key3)); | 554 REPORTER_ASSERT(reporter, cache2->hasContentKey(key3)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 513 | 598 |
| 514 keyData.fData64[0] = 2; | 599 keyData.fData64[0] = 2; |
| 515 GrResourceKey key2(GrCacheID(domain, keyData), 0); | 600 GrResourceKey key2(GrCacheID(domain, keyData), 0); |
| 516 | 601 |
| 517 { | 602 { |
| 518 context->setResourceCacheLimits(3, 30000); | 603 context->setResourceCacheLimits(3, 30000); |
| 519 GrResourceCache2* cache2 = context->getResourceCache2(); | 604 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 520 cache2->purgeAllUnlocked(); | 605 cache2->purgeAllUnlocked(); |
| 521 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); | 606 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); |
| 522 | 607 |
| 523 TestResource* a = new TestResource(context->getGpu()); | 608 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 524 TestResource* b = new TestResource(context->getGpu()); | 609 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 525 a->cacheAccess().setContentKey(key1); | 610 a->cacheAccess().setContentKey(key1); |
| 526 b->cacheAccess().setContentKey(key2); | 611 b->cacheAccess().setContentKey(key2); |
| 527 | 612 |
| 528 // Make a cycle | 613 // Make a cycle |
| 529 a->setUnrefWhenDestroyed(b); | 614 a->setUnrefWhenDestroyed(b); |
| 530 b->setUnrefWhenDestroyed(a); | 615 b->setUnrefWhenDestroyed(a); |
| 531 | 616 |
| 532 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 617 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 533 | 618 |
| 534 a->unref(); | 619 a->unref(); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 key2Data.fData64[1] = 0; | 652 key2Data.fData64[1] = 0; |
| 568 GrResourceKey key2(GrCacheID(domain, key2Data), 0); | 653 GrResourceKey key2(GrCacheID(domain, key2Data), 0); |
| 569 | 654 |
| 570 // Test changing resources sizes (both increase & decrease). | 655 // Test changing resources sizes (both increase & decrease). |
| 571 { | 656 { |
| 572 context->setResourceCacheLimits(3, 30000); | 657 context->setResourceCacheLimits(3, 30000); |
| 573 GrResourceCache2* cache2 = context->getResourceCache2(); | 658 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 574 cache2->purgeAllUnlocked(); | 659 cache2->purgeAllUnlocked(); |
| 575 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); | 660 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); |
| 576 | 661 |
| 577 TestResource* a = new TestResource(context->getGpu()); | 662 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 578 a->cacheAccess().setContentKey(key1); | 663 a->cacheAccess().setContentKey(key1); |
| 579 a->unref(); | 664 a->unref(); |
| 580 | 665 |
| 581 TestResource* b = new TestResource(context->getGpu()); | 666 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 582 b->cacheAccess().setContentKey(key2); | 667 b->cacheAccess().setContentKey(key2); |
| 583 b->unref(); | 668 b->unref(); |
| 584 | 669 |
| 585 REPORTER_ASSERT(reporter, 200 == cache2->getResourceBytes()); | 670 REPORTER_ASSERT(reporter, 200 == cache2->getResourceBytes()); |
| 586 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 671 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 587 { | 672 { |
| 588 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2->
findAndRefContentResource(key2))); | 673 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2->
findAndRefContentResource(key2))); |
| 589 find2->setSize(200); | 674 find2->setSize(200); |
| 590 SkAutoTUnref<TestResource> find1(static_cast<TestResource*>(cache2->
findAndRefContentResource(key1))); | 675 SkAutoTUnref<TestResource> find1(static_cast<TestResource*>(cache2->
findAndRefContentResource(key1))); |
| 591 find1->setSize(50); | 676 find1->setSize(50); |
| 592 } | 677 } |
| 593 | 678 |
| 594 REPORTER_ASSERT(reporter, 250 == cache2->getResourceBytes()); | 679 REPORTER_ASSERT(reporter, 250 == cache2->getResourceBytes()); |
| 595 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 680 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 596 } | 681 } |
| 597 | 682 |
| 598 // Test increasing a resources size beyond the cache budget. | 683 // Test increasing a resources size beyond the cache budget. |
| 599 { | 684 { |
| 600 context->setResourceCacheLimits(2, 300); | 685 context->setResourceCacheLimits(2, 300); |
| 601 GrResourceCache2* cache2 = context->getResourceCache2(); | 686 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 602 cache2->purgeAllUnlocked(); | 687 cache2->purgeAllUnlocked(); |
| 603 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); | 688 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceByte
s()); |
| 604 | 689 |
| 605 TestResource* a = new TestResource(context->getGpu()); | 690 TestResource* a = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 606 a->setSize(100); | 691 a->setSize(100); |
| 607 a->cacheAccess().setContentKey(key1); | 692 a->cacheAccess().setContentKey(key1); |
| 608 a->unref(); | 693 a->unref(); |
| 609 | 694 |
| 610 TestResource* b = new TestResource(context->getGpu()); | 695 TestResource* b = SkNEW_ARGS(TestResource, (context->getGpu())); |
| 611 b->setSize(100); | 696 b->setSize(100); |
| 612 b->cacheAccess().setContentKey(key2); | 697 b->cacheAccess().setContentKey(key2); |
| 613 b->unref(); | 698 b->unref(); |
| 614 | 699 |
| 615 REPORTER_ASSERT(reporter, 200 == cache2->getResourceBytes()); | 700 REPORTER_ASSERT(reporter, 200 == cache2->getResourceBytes()); |
| 616 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 701 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 617 | 702 |
| 618 { | 703 { |
| 619 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2->
findAndRefContentResource(key2))); | 704 SkAutoTUnref<TestResource> find2(static_cast<TestResource*>(cache2->
findAndRefContentResource(key2))); |
| 620 find2->setSize(201); | 705 find2->setSize(201); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 712 desc.fWidth = gWidth; | 797 desc.fWidth = gWidth; |
| 713 desc.fHeight = gHeight; | 798 desc.fHeight = gHeight; |
| 714 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); | 799 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); |
| 715 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info
)); | 800 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info
)); |
| 716 test_cache(reporter, context, surface->getCanvas()); | 801 test_cache(reporter, context, surface->getCanvas()); |
| 717 } | 802 } |
| 718 | 803 |
| 719 // The below tests create their own mock contexts. | 804 // The below tests create their own mock contexts. |
| 720 test_no_key(reporter); | 805 test_no_key(reporter); |
| 721 test_budgeting(reporter); | 806 test_budgeting(reporter); |
| 807 test_unbudgeted(reporter); |
| 722 test_duplicate_content_key(reporter); | 808 test_duplicate_content_key(reporter); |
| 723 test_duplicate_scratch_key(reporter); | 809 test_duplicate_scratch_key(reporter); |
| 724 test_remove_scratch_key(reporter); | 810 test_remove_scratch_key(reporter); |
| 725 test_purge_invalidated(reporter); | 811 test_purge_invalidated(reporter); |
| 726 test_cache_chained_purge(reporter); | 812 test_cache_chained_purge(reporter); |
| 727 test_resource_size_changed(reporter); | 813 test_resource_size_changed(reporter); |
| 728 test_large_resource_count(reporter); | 814 test_large_resource_count(reporter); |
| 729 } | 815 } |
| 730 | 816 |
| 731 #endif | 817 #endif |
| OLD | NEW |