Chromium Code Reviews| 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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); | 167 REPORTER_ASSERT(reporter, 1 == TestResource::NumAlive()); |
| 168 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); | 168 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); |
| 169 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes()); | 169 REPORTER_ASSERT(reporter, b->gpuMemorySize() == cache2->getResourceBytes()); |
| 170 | 170 |
| 171 b->unref(); | 171 b->unref(); |
| 172 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); | 172 REPORTER_ASSERT(reporter, 0 == TestResource::NumAlive()); |
| 173 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); | 173 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
| 174 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); | 174 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
| 175 } | 175 } |
| 176 | 176 |
| 177 static void test_wrapped(skiatest::Reporter* reporter) { | 177 static void test_budgeting(skiatest::Reporter* reporter) { |
| 178 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 178 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
| 179 REPORTER_ASSERT(reporter, SkToBool(context)); | 179 REPORTER_ASSERT(reporter, SkToBool(context)); |
| 180 if (NULL == context) { | 180 if (NULL == context) { |
| 181 return; | 181 return; |
| 182 } | 182 } |
| 183 context->setResourceCacheLimits(10, 300); | 183 context->setResourceCacheLimits(10, 300); |
| 184 GrResourceCache2* cache2 = context->getResourceCache2(); | 184 GrResourceCache2* cache2 = context->getResourceCache2(); |
| 185 cache2->purgeAllUnlocked(); | 185 cache2->purgeAllUnlocked(); |
| 186 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()) ; | 186 SkASSERT(0 == cache2->getResourceCount() && 0 == cache2->getResourceBytes()) ; |
| 187 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted ResourceBytes()); | 187 SkASSERT(0 == cache2->getBudgetedResourceCount() && 0 == cache2->getBudgeted ResourceBytes()); |
| 188 | 188 |
| 189 GrCacheID::Key keyData; | 189 GrCacheID::Key keyData; |
| 190 memset(&keyData, 0, sizeof(keyData)); | 190 memset(&keyData, 0, sizeof(keyData)); |
| 191 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); | 191 GrResourceKey::ResourceType t = GrResourceKey::GenerateResourceType(); |
| 192 GrResourceKey scratchKey(GrCacheID(GrResourceKey::ScratchDomain(), keyData), t, 0); | 192 GrResourceKey scratchKey(GrCacheID(GrResourceKey::ScratchDomain(), keyData), t, 0); |
| 193 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), t, 0); | 193 GrResourceKey contentKey(GrCacheID(GrCacheID::GenerateDomain(), keyData), t, 0); |
| 194 | 194 |
| 195 // Create a scratch, a content, and a wrapped resource | 195 // Create a scratch, a content, and a wrapped resource |
| 196 TestResource* scratch = new TestResource(context->getGpu(), scratchKey); | 196 TestResource* scratch = new TestResource(context->getGpu(), scratchKey); |
| 197 scratch->setSize(10); | 197 scratch->setSize(10); |
| 198 TestResource* content = new TestResource(context->getGpu()); | 198 TestResource* content = new TestResource(context->getGpu()); |
| 199 scratch->setSize(11); | 199 scratch->setSize(11); |
| 200 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); | 200 REPORTER_ASSERT(reporter, content->cacheAccess().setContentKey(contentKey)); |
| 201 TestResource* wrapped = new TestResource(context->getGpu(), true); | 201 TestResource* wrapped = new TestResource(context->getGpu(), true); |
| 202 scratch->setSize(12); | 202 scratch->setSize(12); |
| 203 TestResource* unbudgeted = new TestResource(context->getGpu()); | |
| 204 unbudgeted->setSize(13); | |
| 205 unbudgeted->cacheAccess().setBudgeted(false); | |
| 203 | 206 |
| 204 // Make sure we can't add a content key to the wrapped resource | 207 // Make sure we can't add a content key to the wrapped resource |
| 205 keyData.fData8[0] = 1; | 208 keyData.fData8[0] = 1; |
| 206 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), t , 0); | 209 GrResourceKey contentKey2(GrCacheID(GrCacheID::GenerateDomain(), keyData), t , 0); |
| 207 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2) ); | 210 REPORTER_ASSERT(reporter, !wrapped->cacheAccess().setContentKey(contentKey2) ); |
| 208 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK ey2)); | 211 REPORTER_ASSERT(reporter, NULL == cache2->findAndRefContentResource(contentK ey2)); |
| 209 | 212 |
| 210 // Make sure sizes are as we expect | 213 // Make sure sizes are as we expect |
| 211 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); | 214 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); |
| 212 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + | 215 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + |
| 213 wrapped->gpuMemorySize() == cache2->getResourceByt es()); | 216 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() == |
| 217 cache2->getResourceBytes()); | |
| 214 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); | 218 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 215 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == | 219 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == |
| 216 cache2->getBudgetedResourceBytes()); | 220 cache2->getBudgetedResourceBytes()); |
| 217 | 221 |
| 218 // Our refs mean that the resources are non purgable. | 222 // Our refs mean that the resources are non purgable. |
| 219 cache2->purgeAllUnlocked(); | 223 cache2->purgeAllUnlocked(); |
| 220 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); | 224 REPORTER_ASSERT(reporter, 4 == cache2->getResourceCount()); |
| 221 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + | 225 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + |
| 222 wrapped->gpuMemorySize() == cache2->getResourceByt es()); | 226 wrapped->gpuMemorySize() + unbudgeted->gpuMemorySi ze() == |
| 227 cache2->getResourceBytes()); | |
| 223 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); | 228 REPORTER_ASSERT(reporter, 2 == cache2->getBudgetedResourceCount()); |
| 224 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == | 229 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == |
| 225 cache2->getBudgetedResourceBytes()); | 230 cache2->getBudgetedResourceBytes()); |
| 226 | 231 |
| 227 // Unreffing the wrapped resource should free it right away. | 232 // Unreffing the wrapped resource should free it right away. |
| 228 wrapped->unref(); | 233 wrapped->unref(); |
| 229 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 234 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 230 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) == | 235 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + content->gpuMemorySize( ) + |
| 231 cache2->getResourceBytes()); | 236 unbudgeted->gpuMemorySize() == cache2->getResource Bytes()); |
| 232 | 237 |
| 233 // Now try freeing the other two resources first | 238 // Now try freeing the budgeted resources first |
| 234 wrapped = new TestResource(context->getGpu(), true); | 239 wrapped = new TestResource(context->getGpu(), true); |
| 235 scratch->setSize(12); | 240 scratch->setSize(12); |
| 236 content->unref(); | 241 content->unref(); |
| 237 cache2->purgeAllUnlocked(); | 242 cache2->purgeAllUnlocked(); |
| 238 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); | 243 REPORTER_ASSERT(reporter, 3 == cache2->getResourceCount()); |
| 239 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize( ) == | 244 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() + wrapped->gpuMemorySize( ) + |
| 240 cache2->getResourceBytes()); | 245 unbudgeted->gpuMemorySize() == cache2->getResource Bytes()); |
| 241 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount()); | 246 REPORTER_ASSERT(reporter, 1 == cache2->getBudgetedResourceCount()); |
| 242 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache2->getBudgetedRes ourceBytes()); | 247 REPORTER_ASSERT(reporter, scratch->gpuMemorySize() == cache2->getBudgetedRes ourceBytes()); |
| 243 | 248 |
| 244 scratch->unref(); | 249 scratch->unref(); |
| 245 cache2->purgeAllUnlocked(); | 250 cache2->purgeAllUnlocked(); |
| 246 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); | 251 REPORTER_ASSERT(reporter, 2 == cache2->getResourceCount()); |
| 247 REPORTER_ASSERT(reporter, wrapped->gpuMemorySize() == cache2->getResourceByt es()); | 252 REPORTER_ASSERT(reporter, unbudgeted->gpuMemorySize() + wrapped->gpuMemorySi ze() == |
| 253 cache2->getResourceBytes()); | |
|
egdaniel
2014/11/13 20:47:32
align this
bsalomon
2014/11/13 20:53:34
Done.
| |
| 248 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); | 254 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceCount()); |
| 249 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); | 255 REPORTER_ASSERT(reporter, 0 == cache2->getBudgetedResourceBytes()); |
| 250 | 256 |
| 251 wrapped->unref(); | 257 wrapped->unref(); |
| 258 REPORTER_ASSERT(reporter, 1 == cache2->getResourceCount()); | |
|
egdaniel
2014/11/13 20:47:32
I notice at this point we stop checking getBudgete
bsalomon
2014/11/13 20:53:34
Done.
| |
| 259 REPORTER_ASSERT(reporter, unbudgeted->gpuMemorySize() == cache2->getResource Bytes()); | |
| 260 | |
| 261 unbudgeted->unref(); | |
| 252 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); | 262 REPORTER_ASSERT(reporter, 0 == cache2->getResourceCount()); |
| 253 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); | 263 REPORTER_ASSERT(reporter, 0 == cache2->getResourceBytes()); |
| 254 } | 264 } |
| 255 | 265 |
| 256 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) { | 266 static void test_duplicate_scratch_key(skiatest::Reporter* reporter) { |
| 257 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); | 267 SkAutoTUnref<GrContext> context(GrContext::CreateMockContext()); |
| 258 REPORTER_ASSERT(reporter, SkToBool(context)); | 268 REPORTER_ASSERT(reporter, SkToBool(context)); |
| 259 if (NULL == context) { | 269 if (NULL == context) { |
| 260 return; | 270 return; |
| 261 } | 271 } |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 572 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 582 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
| 573 desc.fWidth = gWidth; | 583 desc.fWidth = gWidth; |
| 574 desc.fHeight = gHeight; | 584 desc.fHeight = gHeight; |
| 575 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); | 585 SkImageInfo info = SkImageInfo::MakeN32Premul(gWidth, gHeight); |
| 576 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info )); | 586 SkAutoTUnref<SkSurface> surface(SkSurface::NewRenderTarget(context, info )); |
| 577 test_cache(reporter, context, surface->getCanvas()); | 587 test_cache(reporter, context, surface->getCanvas()); |
| 578 } | 588 } |
| 579 | 589 |
| 580 // The below tests create their own mock contexts. | 590 // The below tests create their own mock contexts. |
| 581 test_no_key(reporter); | 591 test_no_key(reporter); |
| 582 test_wrapped(reporter); | 592 test_budgeting(reporter); |
| 583 test_duplicate_content_key(reporter); | 593 test_duplicate_content_key(reporter); |
| 584 test_duplicate_scratch_key(reporter); | 594 test_duplicate_scratch_key(reporter); |
| 585 test_purge_invalidated(reporter); | 595 test_purge_invalidated(reporter); |
| 586 test_cache_chained_purge(reporter); | 596 test_cache_chained_purge(reporter); |
| 587 test_resource_size_changed(reporter); | 597 test_resource_size_changed(reporter); |
| 588 } | 598 } |
| 589 | 599 |
| 590 #endif | 600 #endif |
| OLD | NEW |