| 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 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. | 8 // Include here to ensure SK_SUPPORT_GPU is set correctly before it is examined. |
| 9 #include "SkTypes.h" | 9 #include "SkTypes.h" |
| 10 | 10 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 //////////////////////////////////////////////////////////////////////////////// | 31 //////////////////////////////////////////////////////////////////////////////// |
| 32 static void test_cache(skiatest::Reporter* reporter, GrContext* context, SkCanva
s* canvas) { | 32 static void test_cache(skiatest::Reporter* reporter, GrContext* context, SkCanva
s* canvas) { |
| 33 const SkIRect size = SkIRect::MakeWH(gWidth, gHeight); | 33 const SkIRect size = SkIRect::MakeWH(gWidth, gHeight); |
| 34 | 34 |
| 35 SkBitmap src; | 35 SkBitmap src; |
| 36 src.allocN32Pixels(size.width(), size.height()); | 36 src.allocN32Pixels(size.width(), size.height()); |
| 37 src.eraseColor(SK_ColorBLACK); | 37 src.eraseColor(SK_ColorBLACK); |
| 38 size_t srcSize = src.getSize(); | 38 size_t srcSize = src.getSize(); |
| 39 | 39 |
| 40 size_t initialCacheSize; | 40 size_t initialCacheSize; |
| 41 context->getResourceCacheUsage(NULL, &initialCacheSize); | 41 context->getResourceCacheUsage(nullptr, &initialCacheSize); |
| 42 | 42 |
| 43 int oldMaxNum; | 43 int oldMaxNum; |
| 44 size_t oldMaxBytes; | 44 size_t oldMaxBytes; |
| 45 context->getResourceCacheLimits(&oldMaxNum, &oldMaxBytes); | 45 context->getResourceCacheLimits(&oldMaxNum, &oldMaxBytes); |
| 46 | 46 |
| 47 // Set the cache limits so we can fit 10 "src" images and the | 47 // Set the cache limits so we can fit 10 "src" images and the |
| 48 // max number of textures doesn't matter | 48 // max number of textures doesn't matter |
| 49 size_t maxCacheSize = initialCacheSize + 10*srcSize; | 49 size_t maxCacheSize = initialCacheSize + 10*srcSize; |
| 50 context->setResourceCacheLimits(1000, maxCacheSize); | 50 context->setResourceCacheLimits(1000, maxCacheSize); |
| 51 | 51 |
| 52 SkBitmap readback; | 52 SkBitmap readback; |
| 53 readback.allocN32Pixels(size.width(), size.height()); | 53 readback.allocN32Pixels(size.width(), size.height()); |
| 54 | 54 |
| 55 for (int i = 0; i < 100; ++i) { | 55 for (int i = 0; i < 100; ++i) { |
| 56 canvas->drawBitmap(src, 0, 0); | 56 canvas->drawBitmap(src, 0, 0); |
| 57 canvas->readPixels(size, &readback); | 57 canvas->readPixels(size, &readback); |
| 58 | 58 |
| 59 // "modify" the src texture | 59 // "modify" the src texture |
| 60 src.notifyPixelsChanged(); | 60 src.notifyPixelsChanged(); |
| 61 | 61 |
| 62 size_t curCacheSize; | 62 size_t curCacheSize; |
| 63 context->getResourceCacheUsage(NULL, &curCacheSize); | 63 context->getResourceCacheUsage(nullptr, &curCacheSize); |
| 64 | 64 |
| 65 // we should never go over the size limit | 65 // we should never go over the size limit |
| 66 REPORTER_ASSERT(reporter, curCacheSize <= maxCacheSize); | 66 REPORTER_ASSERT(reporter, curCacheSize <= maxCacheSize); |
| 67 } | 67 } |
| 68 | 68 |
| 69 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes); | 69 context->setResourceCacheLimits(oldMaxNum, oldMaxBytes); |
| 70 } | 70 } |
| 71 | 71 |
| 72 static void test_stencil_buffers(skiatest::Reporter* reporter, GrContext* contex
t) { | 72 static void test_stencil_buffers(skiatest::Reporter* reporter, GrContext* contex
t) { |
| 73 GrSurfaceDesc smallDesc; | 73 GrSurfaceDesc smallDesc; |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 const GrGpu* gpu = context->getGpu(); | 178 const GrGpu* gpu = context->getGpu(); |
| 179 // this test is only valid for GL | 179 // this test is only valid for GL |
| 180 if (!gpu || !gpu->glContextForTesting()) { | 180 if (!gpu || !gpu->glContextForTesting()) { |
| 181 return; | 181 return; |
| 182 } | 182 } |
| 183 | 183 |
| 184 GrBackendObject texIDs[2]; | 184 GrBackendObject texIDs[2]; |
| 185 static const int kW = 100; | 185 static const int kW = 100; |
| 186 static const int kH = 100; | 186 static const int kH = 100; |
| 187 | 187 |
| 188 texIDs[0] = gpu->createTestingOnlyBackendTexture(NULL, kW, kH, kRGBA_8888_Gr
PixelConfig); | 188 texIDs[0] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888
_GrPixelConfig); |
| 189 texIDs[1] = gpu->createTestingOnlyBackendTexture(NULL, kW, kH, kRGBA_8888_Gr
PixelConfig); | 189 texIDs[1] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888
_GrPixelConfig); |
| 190 | 190 |
| 191 context->resetContext(); | 191 context->resetContext(); |
| 192 | 192 |
| 193 GrBackendTextureDesc desc; | 193 GrBackendTextureDesc desc; |
| 194 desc.fConfig = kBGRA_8888_GrPixelConfig; | 194 desc.fConfig = kBGRA_8888_GrPixelConfig; |
| 195 desc.fWidth = kW; | 195 desc.fWidth = kW; |
| 196 desc.fHeight = kH; | 196 desc.fHeight = kH; |
| 197 | 197 |
| 198 desc.fTextureHandle = texIDs[0]; | 198 desc.fTextureHandle = texIDs[0]; |
| 199 SkAutoTUnref<GrTexture> borrowed(context->textureProvider()->wrapBackendText
ure( | 199 SkAutoTUnref<GrTexture> borrowed(context->textureProvider()->wrapBackendText
ure( |
| 200 desc, kBorrow_GrWrapOwnership)); | 200 desc, kBorrow_GrWrapOwnership)); |
| 201 | 201 |
| 202 desc.fTextureHandle = texIDs[1]; | 202 desc.fTextureHandle = texIDs[1]; |
| 203 SkAutoTUnref<GrTexture> adopted(context->textureProvider()->wrapBackendTextu
re( | 203 SkAutoTUnref<GrTexture> adopted(context->textureProvider()->wrapBackendTextu
re( |
| 204 desc, kAdopt_GrWrapOwnership)); | 204 desc, kAdopt_GrWrapOwnership)); |
| 205 | 205 |
| 206 REPORTER_ASSERT(reporter, SkToBool(borrowed) && SkToBool(adopted)); | 206 REPORTER_ASSERT(reporter, SkToBool(borrowed) && SkToBool(adopted)); |
| 207 if (!SkToBool(borrowed) || !SkToBool(adopted)) { | 207 if (!SkToBool(borrowed) || !SkToBool(adopted)) { |
| 208 return; | 208 return; |
| 209 } | 209 } |
| 210 | 210 |
| 211 borrowed.reset(NULL); | 211 borrowed.reset(nullptr); |
| 212 adopted.reset(NULL); | 212 adopted.reset(nullptr); |
| 213 | 213 |
| 214 context->flush(); | 214 context->flush(); |
| 215 | 215 |
| 216 bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[0]); | 216 bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[0]); |
| 217 bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[1]); | 217 bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[1]); |
| 218 | 218 |
| 219 REPORTER_ASSERT(reporter, borrowedIsAlive); | 219 REPORTER_ASSERT(reporter, borrowedIsAlive); |
| 220 REPORTER_ASSERT(reporter, !adoptedIsAlive); | 220 REPORTER_ASSERT(reporter, !adoptedIsAlive); |
| 221 | 221 |
| 222 gpu->deleteTestingOnlyBackendTexture(texIDs[0]); | 222 gpu->deleteTestingOnlyBackendTexture(texIDs[0]); |
| 223 | 223 |
| 224 context->resetContext(); | 224 context->resetContext(); |
| 225 } | 225 } |
| 226 | 226 |
| 227 class TestResource : public GrGpuResource { | 227 class TestResource : public GrGpuResource { |
| 228 enum ScratchConstructor { kScratchConstructor }; | 228 enum ScratchConstructor { kScratchConstructor }; |
| 229 public: | 229 public: |
| 230 static const size_t kDefaultSize = 100; | 230 static const size_t kDefaultSize = 100; |
| 231 | 231 |
| 232 /** Property that distinctly categorizes the resource. | 232 /** Property that distinctly categorizes the resource. |
| 233 * For example, textures have width, height, ... */ | 233 * For example, textures have width, height, ... */ |
| 234 enum SimulatedProperty { kA_SimulatedProperty, kB_SimulatedProperty }; | 234 enum SimulatedProperty { kA_SimulatedProperty, kB_SimulatedProperty }; |
| 235 | 235 |
| 236 TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) | 236 TestResource(GrGpu* gpu, size_t size, GrGpuResource::LifeCycle lifeCycle) |
| 237 : INHERITED(gpu, lifeCycle) | 237 : INHERITED(gpu, lifeCycle) |
| 238 , fToDelete(NULL) | 238 , fToDelete(nullptr) |
| 239 , fSize(size) | 239 , fSize(size) |
| 240 , fProperty(kA_SimulatedProperty) { | 240 , fProperty(kA_SimulatedProperty) { |
| 241 ++fNumAlive; | 241 ++fNumAlive; |
| 242 this->registerWithCache(); | 242 this->registerWithCache(); |
| 243 } | 243 } |
| 244 | 244 |
| 245 TestResource(GrGpu* gpu, GrGpuResource::LifeCycle lifeCycle) | 245 TestResource(GrGpu* gpu, GrGpuResource::LifeCycle lifeCycle) |
| 246 : INHERITED(gpu, lifeCycle) | 246 : INHERITED(gpu, lifeCycle) |
| 247 , fToDelete(NULL) | 247 , fToDelete(nullptr) |
| 248 , fSize(kDefaultSize) | 248 , fSize(kDefaultSize) |
| 249 , fProperty(kA_SimulatedProperty) { | 249 , fProperty(kA_SimulatedProperty) { |
| 250 ++fNumAlive; | 250 ++fNumAlive; |
| 251 this->registerWithCache(); | 251 this->registerWithCache(); |
| 252 } | 252 } |
| 253 | 253 |
| 254 TestResource(GrGpu* gpu) | 254 TestResource(GrGpu* gpu) |
| 255 : INHERITED(gpu, kCached_LifeCycle) | 255 : INHERITED(gpu, kCached_LifeCycle) |
| 256 , fToDelete(NULL) | 256 , fToDelete(nullptr) |
| 257 , fSize(kDefaultSize) | 257 , fSize(kDefaultSize) |
| 258 , fProperty(kA_SimulatedProperty) { | 258 , fProperty(kA_SimulatedProperty) { |
| 259 ++fNumAlive; | 259 ++fNumAlive; |
| 260 this->registerWithCache(); | 260 this->registerWithCache(); |
| 261 } | 261 } |
| 262 | 262 |
| 263 static TestResource* CreateScratch(GrGpu* gpu, SimulatedProperty property, b
ool cached = true) { | 263 static TestResource* CreateScratch(GrGpu* gpu, SimulatedProperty property, b
ool cached = true) { |
| 264 return new TestResource(gpu, property, cached, kScratchConstructor); | 264 return new TestResource(gpu, property, cached, kScratchConstructor); |
| 265 } | 265 } |
| 266 | 266 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 290 | 290 |
| 291 static size_t ExpectedScratchKeySize() { | 291 static size_t ExpectedScratchKeySize() { |
| 292 return sizeof(uint32_t) * (kScratchKeyFieldCnt + GrScratchKey::kMetaData
Cnt); | 292 return sizeof(uint32_t) * (kScratchKeyFieldCnt + GrScratchKey::kMetaData
Cnt); |
| 293 } | 293 } |
| 294 | 294 |
| 295 private: | 295 private: |
| 296 static const int kScratchKeyFieldCnt = 6; | 296 static const int kScratchKeyFieldCnt = 6; |
| 297 | 297 |
| 298 TestResource(GrGpu* gpu, SimulatedProperty property, bool cached, ScratchCon
structor) | 298 TestResource(GrGpu* gpu, SimulatedProperty property, bool cached, ScratchCon
structor) |
| 299 : INHERITED(gpu, cached ? kCached_LifeCycle : kUncached_LifeCycle) | 299 : INHERITED(gpu, cached ? kCached_LifeCycle : kUncached_LifeCycle) |
| 300 , fToDelete(NULL) | 300 , fToDelete(nullptr) |
| 301 , fSize(kDefaultSize) | 301 , fSize(kDefaultSize) |
| 302 , fProperty(property) { | 302 , fProperty(property) { |
| 303 GrScratchKey scratchKey; | 303 GrScratchKey scratchKey; |
| 304 ComputeScratchKey(fProperty, &scratchKey); | 304 ComputeScratchKey(fProperty, &scratchKey); |
| 305 this->setScratchKey(scratchKey); | 305 this->setScratchKey(scratchKey); |
| 306 ++fNumAlive; | 306 ++fNumAlive; |
| 307 this->registerWithCache(); | 307 this->registerWithCache(); |
| 308 } | 308 } |
| 309 | 309 |
| 310 size_t onGpuMemorySize() const override { return fSize; } | 310 size_t onGpuMemorySize() const override { return fSize; } |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 TestResource* wrapped = new TestResource(context->getGpu(), GrGpuResource::k
Borrowed_LifeCycle); | 410 TestResource* wrapped = new TestResource(context->getGpu(), GrGpuResource::k
Borrowed_LifeCycle); |
| 411 wrapped->setSize(12); | 411 wrapped->setSize(12); |
| 412 TestResource* unbudgeted = | 412 TestResource* unbudgeted = |
| 413 new TestResource(context->getGpu(), GrGpuResource::kUncached_LifeCyc
le); | 413 new TestResource(context->getGpu(), GrGpuResource::kUncached_LifeCyc
le); |
| 414 unbudgeted->setSize(13); | 414 unbudgeted->setSize(13); |
| 415 | 415 |
| 416 // Make sure we can't add a unique key to the wrapped resource | 416 // Make sure we can't add a unique key to the wrapped resource |
| 417 GrUniqueKey uniqueKey2; | 417 GrUniqueKey uniqueKey2; |
| 418 make_unique_key<0>(&uniqueKey2, 1); | 418 make_unique_key<0>(&uniqueKey2, 1); |
| 419 wrapped->resourcePriv().setUniqueKey(uniqueKey2); | 419 wrapped->resourcePriv().setUniqueKey(uniqueKey2); |
| 420 REPORTER_ASSERT(reporter, NULL == cache->findAndRefUniqueResource(uniqueKey2
)); | 420 REPORTER_ASSERT(reporter, nullptr == cache->findAndRefUniqueResource(uniqueK
ey2)); |
| 421 | 421 |
| 422 // Make sure sizes are as we expect | 422 // Make sure sizes are as we expect |
| 423 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount()); | 423 REPORTER_ASSERT(reporter, 4 == cache->getResourceCount()); |
| 424 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize()
+ | 424 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize()
+ |
| 425 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi
ze() == | 425 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi
ze() == |
| 426 cache->getResourceBytes()); | 426 cache->getResourceBytes()); |
| 427 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount()); | 427 REPORTER_ASSERT(reporter, 2 == cache->getBudgetedResourceCount()); |
| 428 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize()
== | 428 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + unique->gpuMemorySize()
== |
| 429 cache->getBudgetedResourceBytes()); | 429 cache->getBudgetedResourceBytes()); |
| 430 | 430 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 550 TestResource::CreateScratch(context->getGpu(), TestResource::kA_Simulate
dProperty, false); | 550 TestResource::CreateScratch(context->getGpu(), TestResource::kA_Simulate
dProperty, false); |
| 551 GrScratchKey key; | 551 GrScratchKey key; |
| 552 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &key); | 552 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &key); |
| 553 | 553 |
| 554 size_t size = resource->gpuMemorySize(); | 554 size_t size = resource->gpuMemorySize(); |
| 555 for (int i = 0; i < 2; ++i) { | 555 for (int i = 0; i < 2; ++i) { |
| 556 // Since this resource is unbudgeted, it should not be reachable as scra
tch. | 556 // Since this resource is unbudgeted, it should not be reachable as scra
tch. |
| 557 REPORTER_ASSERT(reporter, resource->resourcePriv().getScratchKey() == ke
y); | 557 REPORTER_ASSERT(reporter, resource->resourcePriv().getScratchKey() == ke
y); |
| 558 REPORTER_ASSERT(reporter, !resource->cacheAccess().isScratch()); | 558 REPORTER_ASSERT(reporter, !resource->cacheAccess().isScratch()); |
| 559 REPORTER_ASSERT(reporter, !resource->resourcePriv().isBudgeted()); | 559 REPORTER_ASSERT(reporter, !resource->resourcePriv().isBudgeted()); |
| 560 REPORTER_ASSERT(reporter, NULL == cache->findAndRefScratchResource(key,
TestResource::kDefaultSize, 0)); | 560 REPORTER_ASSERT(reporter, nullptr == cache->findAndRefScratchResource(ke
y, TestResource::kDefaultSize, 0)); |
| 561 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); | 561 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); |
| 562 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); | 562 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); |
| 563 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceCount()); | 563 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceCount()); |
| 564 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceBytes()); | 564 REPORTER_ASSERT(reporter, 0 == cache->getBudgetedResourceBytes()); |
| 565 | 565 |
| 566 // Once it is unrefed, it should become available as scratch. | 566 // Once it is unrefed, it should become available as scratch. |
| 567 resource->unref(); | 567 resource->unref(); |
| 568 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); | 568 REPORTER_ASSERT(reporter, 1 == cache->getResourceCount()); |
| 569 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); | 569 REPORTER_ASSERT(reporter, size == cache->getResourceBytes()); |
| 570 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); | 570 REPORTER_ASSERT(reporter, 1 == cache->getBudgetedResourceCount()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 // Create two resources that have the same scratch key. | 608 // Create two resources that have the same scratch key. |
| 609 TestResource* a = TestResource::CreateScratch(context->getGpu(), | 609 TestResource* a = TestResource::CreateScratch(context->getGpu(), |
| 610 TestResource::kB_SimulatedProp
erty); | 610 TestResource::kB_SimulatedProp
erty); |
| 611 TestResource* b = TestResource::CreateScratch(context->getGpu(), | 611 TestResource* b = TestResource::CreateScratch(context->getGpu(), |
| 612 TestResource::kB_SimulatedProp
erty); | 612 TestResource::kB_SimulatedProp
erty); |
| 613 a->setSize(11); | 613 a->setSize(11); |
| 614 b->setSize(12); | 614 b->setSize(12); |
| 615 GrScratchKey scratchKey1; | 615 GrScratchKey scratchKey1; |
| 616 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key1); | 616 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key1); |
| 617 // Check for negative case consistency. (leaks upon test failure.) | 617 // Check for negative case consistency. (leaks upon test failure.) |
| 618 REPORTER_ASSERT(reporter, NULL == cache->findAndRefScratchResource(scratchKe
y1, TestResource::kDefaultSize, 0)); | 618 REPORTER_ASSERT(reporter, nullptr == cache->findAndRefScratchResource(scratc
hKey1, TestResource::kDefaultSize, 0)); |
| 619 | 619 |
| 620 GrScratchKey scratchKey; | 620 GrScratchKey scratchKey; |
| 621 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); | 621 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); |
| 622 | 622 |
| 623 // Scratch resources are registered with GrResourceCache just by existing. T
here are 2. | 623 // Scratch resources are registered with GrResourceCache just by existing. T
here are 2. |
| 624 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 624 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 625 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache->countScratchEntriesForKey(
scratchKey));) | 625 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache->countScratchEntriesForKey(
scratchKey));) |
| 626 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); | 626 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); |
| 627 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == | 627 REPORTER_ASSERT(reporter, a->gpuMemorySize() + b->gpuMemorySize() == |
| 628 cache->getResourceBytes()); | 628 cache->getResourceBytes()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 655 TestResource::kB_SimulatedProp
erty); | 655 TestResource::kB_SimulatedProp
erty); |
| 656 TestResource* b = TestResource::CreateScratch(context->getGpu(), | 656 TestResource* b = TestResource::CreateScratch(context->getGpu(), |
| 657 TestResource::kB_SimulatedProp
erty); | 657 TestResource::kB_SimulatedProp
erty); |
| 658 a->unref(); | 658 a->unref(); |
| 659 b->unref(); | 659 b->unref(); |
| 660 | 660 |
| 661 GrScratchKey scratchKey; | 661 GrScratchKey scratchKey; |
| 662 // Ensure that scratch key lookup is correct for negative case. | 662 // Ensure that scratch key lookup is correct for negative case. |
| 663 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key); | 663 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key); |
| 664 // (following leaks upon test failure). | 664 // (following leaks upon test failure). |
| 665 REPORTER_ASSERT(reporter, cache->findAndRefScratchResource(scratchKey, TestR
esource::kDefaultSize, 0) == NULL); | 665 REPORTER_ASSERT(reporter, cache->findAndRefScratchResource(scratchKey, TestR
esource::kDefaultSize, 0) == nullptr); |
| 666 | 666 |
| 667 // Scratch resources are registered with GrResourceCache just by existing. T
here are 2. | 667 // Scratch resources are registered with GrResourceCache just by existing. T
here are 2. |
| 668 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); | 668 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); |
| 669 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 669 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 670 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache->countScratchEntriesForKey(
scratchKey));) | 670 SkDEBUGCODE(REPORTER_ASSERT(reporter, 2 == cache->countScratchEntriesForKey(
scratchKey));) |
| 671 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); | 671 REPORTER_ASSERT(reporter, 2 == cache->getResourceCount()); |
| 672 | 672 |
| 673 // Find the first resource and remove its scratch key | 673 // Find the first resource and remove its scratch key |
| 674 GrGpuResource* find; | 674 GrGpuResource* find; |
| 675 find = cache->findAndRefScratchResource(scratchKey, TestResource::kDefaultSi
ze, 0); | 675 find = cache->findAndRefScratchResource(scratchKey, TestResource::kDefaultSi
ze, 0); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 scratchKey = scratchKey2; | 735 scratchKey = scratchKey2; |
| 736 REPORTER_ASSERT(reporter, scratchKey.size() == TestResource::ExpectedScratch
KeySize()); | 736 REPORTER_ASSERT(reporter, scratchKey.size() == TestResource::ExpectedScratch
KeySize()); |
| 737 REPORTER_ASSERT(reporter, scratchKey1 != scratchKey); | 737 REPORTER_ASSERT(reporter, scratchKey1 != scratchKey); |
| 738 REPORTER_ASSERT(reporter, scratchKey != scratchKey1); | 738 REPORTER_ASSERT(reporter, scratchKey != scratchKey1); |
| 739 REPORTER_ASSERT(reporter, scratchKey2 == scratchKey); | 739 REPORTER_ASSERT(reporter, scratchKey2 == scratchKey); |
| 740 REPORTER_ASSERT(reporter, scratchKey == scratchKey2); | 740 REPORTER_ASSERT(reporter, scratchKey == scratchKey2); |
| 741 | 741 |
| 742 // Ensure that scratch key lookup is correct for negative case. | 742 // Ensure that scratch key lookup is correct for negative case. |
| 743 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key); | 743 TestResource::ComputeScratchKey(TestResource::kA_SimulatedProperty, &scratch
Key); |
| 744 // (following leaks upon test failure). | 744 // (following leaks upon test failure). |
| 745 REPORTER_ASSERT(reporter, cache->findAndRefScratchResource(scratchKey, TestR
esource::kDefaultSize, 0) == NULL); | 745 REPORTER_ASSERT(reporter, cache->findAndRefScratchResource(scratchKey, TestR
esource::kDefaultSize, 0) == nullptr); |
| 746 | 746 |
| 747 // Find the first resource with a scratch key and a copy of a scratch key. | 747 // Find the first resource with a scratch key and a copy of a scratch key. |
| 748 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); | 748 TestResource::ComputeScratchKey(TestResource::kB_SimulatedProperty, &scratch
Key); |
| 749 GrGpuResource* find = cache->findAndRefScratchResource(scratchKey, TestResou
rce::kDefaultSize, 0); | 749 GrGpuResource* find = cache->findAndRefScratchResource(scratchKey, TestResou
rce::kDefaultSize, 0); |
| 750 REPORTER_ASSERT(reporter, find != NULL); | 750 REPORTER_ASSERT(reporter, find != nullptr); |
| 751 find->unref(); | 751 find->unref(); |
| 752 | 752 |
| 753 scratchKey2 = scratchKey; | 753 scratchKey2 = scratchKey; |
| 754 find = cache->findAndRefScratchResource(scratchKey2, TestResource::kDefaultS
ize, 0); | 754 find = cache->findAndRefScratchResource(scratchKey2, TestResource::kDefaultS
ize, 0); |
| 755 REPORTER_ASSERT(reporter, find != NULL); | 755 REPORTER_ASSERT(reporter, find != nullptr); |
| 756 REPORTER_ASSERT(reporter, find == a || find == b); | 756 REPORTER_ASSERT(reporter, find == a || find == b); |
| 757 | 757 |
| 758 GrGpuResource* find2 = cache->findAndRefScratchResource(scratchKey2, TestRes
ource::kDefaultSize, 0); | 758 GrGpuResource* find2 = cache->findAndRefScratchResource(scratchKey2, TestRes
ource::kDefaultSize, 0); |
| 759 REPORTER_ASSERT(reporter, find2 != NULL); | 759 REPORTER_ASSERT(reporter, find2 != nullptr); |
| 760 REPORTER_ASSERT(reporter, find2 == a || find2 == b); | 760 REPORTER_ASSERT(reporter, find2 == a || find2 == b); |
| 761 REPORTER_ASSERT(reporter, find2 != find); | 761 REPORTER_ASSERT(reporter, find2 != find); |
| 762 find2->unref(); | 762 find2->unref(); |
| 763 find->unref(); | 763 find->unref(); |
| 764 } | 764 } |
| 765 | 765 |
| 766 static void test_duplicate_unique_key(skiatest::Reporter* reporter) { | 766 static void test_duplicate_unique_key(skiatest::Reporter* reporter) { |
| 767 Mock mock(5, 30000); | 767 Mock mock(5, 30000); |
| 768 GrContext* context = mock.context(); | 768 GrContext* context = mock.context(); |
| 769 GrResourceCache* cache = mock.cache(); | 769 GrResourceCache* cache = mock.cache(); |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 | 949 |
| 950 a->unref(); | 950 a->unref(); |
| 951 b->unref(); | 951 b->unref(); |
| 952 | 952 |
| 953 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 953 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 954 | 954 |
| 955 cache->purgeAllUnlocked(); | 955 cache->purgeAllUnlocked(); |
| 956 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 956 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 957 | 957 |
| 958 // Break the cycle | 958 // Break the cycle |
| 959 a->setUnrefWhenDestroyed(NULL); | 959 a->setUnrefWhenDestroyed(nullptr); |
| 960 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); | 960 REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive()); |
| 961 | 961 |
| 962 cache->purgeAllUnlocked(); | 962 cache->purgeAllUnlocked(); |
| 963 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); | 963 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); |
| 964 } | 964 } |
| 965 | 965 |
| 966 static void test_resource_size_changed(skiatest::Reporter* reporter) { | 966 static void test_resource_size_changed(skiatest::Reporter* reporter) { |
| 967 GrUniqueKey key1, key2; | 967 GrUniqueKey key1, key2; |
| 968 make_unique_key<0>(&key1, 1); | 968 make_unique_key<0>(&key1, 1); |
| 969 make_unique_key<0>(&key2, 2); | 969 make_unique_key<0>(&key2, 2); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 | 1073 |
| 1074 // Verify that the correct resources were purged. | 1074 // Verify that the correct resources were purged. |
| 1075 int currShouldPurgeIdx = 0; | 1075 int currShouldPurgeIdx = 0; |
| 1076 for (int j = 0; j < kCount; ++j) { | 1076 for (int j = 0; j < kCount; ++j) { |
| 1077 GrUniqueKey key; | 1077 GrUniqueKey key; |
| 1078 make_unique_key<0>(&key, j); | 1078 make_unique_key<0>(&key, j); |
| 1079 GrGpuResource* res = cache->findAndRefUniqueResource(key); | 1079 GrGpuResource* res = cache->findAndRefUniqueResource(key); |
| 1080 if (currShouldPurgeIdx < shouldPurgeIdxs.count() && | 1080 if (currShouldPurgeIdx < shouldPurgeIdxs.count() && |
| 1081 shouldPurgeIdxs[currShouldPurgeIdx] == j) { | 1081 shouldPurgeIdxs[currShouldPurgeIdx] == j) { |
| 1082 ++currShouldPurgeIdx; | 1082 ++currShouldPurgeIdx; |
| 1083 REPORTER_ASSERT(reporter, NULL == res); | 1083 REPORTER_ASSERT(reporter, nullptr == res); |
| 1084 } else { | 1084 } else { |
| 1085 REPORTER_ASSERT(reporter, NULL != res); | 1085 REPORTER_ASSERT(reporter, nullptr != res); |
| 1086 } | 1086 } |
| 1087 SkSafeUnref(res); | 1087 SkSafeUnref(res); |
| 1088 } | 1088 } |
| 1089 | 1089 |
| 1090 for (int j = 0; j < resourcesToUnref.count(); ++j) { | 1090 for (int j = 0; j < resourcesToUnref.count(); ++j) { |
| 1091 resourcesToUnref[j]->unref(); | 1091 resourcesToUnref[j]->unref(); |
| 1092 } | 1092 } |
| 1093 } | 1093 } |
| 1094 } | 1094 } |
| 1095 | 1095 |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1250 } | 1250 } |
| 1251 | 1251 |
| 1252 //////////////////////////////////////////////////////////////////////////////// | 1252 //////////////////////////////////////////////////////////////////////////////// |
| 1253 DEF_GPUTEST(ResourceCache, reporter, factory) { | 1253 DEF_GPUTEST(ResourceCache, reporter, factory) { |
| 1254 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { | 1254 for (int type = 0; type < GrContextFactory::kLastGLContextType; ++type) { |
| 1255 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G
LContextType>(type); | 1255 GrContextFactory::GLContextType glType = static_cast<GrContextFactory::G
LContextType>(type); |
| 1256 if (!GrContextFactory::IsRenderingGLContext(glType)) { | 1256 if (!GrContextFactory::IsRenderingGLContext(glType)) { |
| 1257 continue; | 1257 continue; |
| 1258 } | 1258 } |
| 1259 GrContext* context = factory->get(glType); | 1259 GrContext* context = factory->get(glType); |
| 1260 if (NULL == context) { | 1260 if (nullptr == context) { |
| 1261 continue; | 1261 continue; |
| 1262 } | 1262 } |
| 1263 GrSurfaceDesc desc; | 1263 GrSurfaceDesc desc; |
| 1264 desc.fConfig = kSkia8888_GrPixelConfig; | 1264 desc.fConfig = kSkia8888_GrPixelConfig; |
| 1265 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 1265 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 1266 desc.fWidth = gWidth; | 1266 desc.fWidth = gWidth; |
| 1267 desc.fHeight = gHeight; | 1267 desc.fHeight = gHeight; |
| 1268 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); | 1268 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); |
| 1269 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, | 1269 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, |
| 1270 SkSurface::kN
o_Budgeted, info)); | 1270 SkSurface::kN
o_Budgeted, info)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1285 test_purge_invalidated(reporter); | 1285 test_purge_invalidated(reporter); |
| 1286 test_cache_chained_purge(reporter); | 1286 test_cache_chained_purge(reporter); |
| 1287 test_resource_size_changed(reporter); | 1287 test_resource_size_changed(reporter); |
| 1288 test_timestamp_wrap(reporter); | 1288 test_timestamp_wrap(reporter); |
| 1289 test_flush(reporter); | 1289 test_flush(reporter); |
| 1290 test_large_resource_count(reporter); | 1290 test_large_resource_count(reporter); |
| 1291 test_custom_data(reporter); | 1291 test_custom_data(reporter); |
| 1292 } | 1292 } |
| 1293 | 1293 |
| 1294 #endif | 1294 #endif |
| OLD | NEW |