| Index: src/gpu/GrContext.cpp
|
| diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
|
| index d2664c3b86524b018642e0f8b41bd012b5d8628c..cd96defbd54560fe883b9bcdb4e8aa7c4c184f1e 100644
|
| --- a/src/gpu/GrContext.cpp
|
| +++ b/src/gpu/GrContext.cpp
|
| @@ -94,7 +94,7 @@ GrContext::GrContext() {
|
| fClip = NULL;
|
| fPathRendererChain = NULL;
|
| fSoftwarePathRenderer = NULL;
|
| - fTextureCache = NULL;
|
| + fResourceCache = NULL;
|
| fFontCache = NULL;
|
| fDrawBuffer = NULL;
|
| fDrawBufferVBAllocPool = NULL;
|
| @@ -118,10 +118,9 @@ bool GrContext::init(GrBackend backend, GrBackendContext backendContext) {
|
| fDrawState = SkNEW(GrDrawState);
|
| fGpu->setDrawState(fDrawState);
|
|
|
| - fTextureCache = SkNEW_ARGS(GrResourceCache,
|
| - (MAX_RESOURCE_CACHE_COUNT,
|
| - MAX_RESOURCE_CACHE_BYTES));
|
| - fTextureCache->setOverbudgetCallback(OverbudgetCB, this);
|
| + fResourceCache = SkNEW_ARGS(GrResourceCache, (MAX_RESOURCE_CACHE_COUNT,
|
| + MAX_RESOURCE_CACHE_BYTES));
|
| + fResourceCache->setOverbudgetCallback(OverbudgetCB, this);
|
|
|
| fFontCache = SkNEW_ARGS(GrFontCache, (fGpu));
|
|
|
| @@ -154,8 +153,8 @@ GrContext::~GrContext() {
|
| // of them before freeing the texture cache
|
| fGpu->purgeResources();
|
|
|
| - delete fTextureCache;
|
| - fTextureCache = NULL;
|
| + delete fResourceCache;
|
| + fResourceCache = NULL;
|
| delete fFontCache;
|
| delete fDrawBuffer;
|
| delete fDrawBufferVBAllocPool;
|
| @@ -197,7 +196,7 @@ void GrContext::contextDestroyed() {
|
| fAARectRenderer->reset();
|
| fOvalRenderer->reset();
|
|
|
| - fTextureCache->purgeAllUnlocked();
|
| + fResourceCache->purgeAllUnlocked();
|
|
|
| fFontCache->freeAll();
|
| fLayerCache->freeAll();
|
| @@ -216,7 +215,7 @@ void GrContext::freeGpuResources() {
|
| fAARectRenderer->reset();
|
| fOvalRenderer->reset();
|
|
|
| - fTextureCache->purgeAllUnlocked();
|
| + fResourceCache->purgeAllUnlocked();
|
| fFontCache->freeAll();
|
| fLayerCache->freeAll();
|
| // a path renderer may be holding onto resources
|
| @@ -224,12 +223,13 @@ void GrContext::freeGpuResources() {
|
| SkSafeSetNull(fSoftwarePathRenderer);
|
| }
|
|
|
| -size_t GrContext::getGpuTextureCacheBytes() const {
|
| - return fTextureCache->getCachedResourceBytes();
|
| -}
|
| -
|
| -int GrContext::getGpuTextureCacheResourceCount() const {
|
| - return fTextureCache->getCachedResourceCount();
|
| +void GrContext::getResourceCacheUsage(int* resourceCount, size_t* resourceBytes) const {
|
| + if (NULL != resourceCount) {
|
| + *resourceCount = fResourceCache->getCachedResourceCount();
|
| + }
|
| + if (NULL != resourceBytes) {
|
| + *resourceBytes = fResourceCache->getCachedResourceBytes();
|
| + }
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -238,7 +238,7 @@ GrTexture* GrContext::findAndRefTexture(const GrTextureDesc& desc,
|
| const GrCacheID& cacheID,
|
| const GrTextureParams* params) {
|
| GrResourceKey resourceKey = GrTexture::ComputeKey(fGpu, params, desc, cacheID);
|
| - GrCacheable* resource = fTextureCache->find(resourceKey);
|
| + GrCacheable* resource = fResourceCache->find(resourceKey);
|
| SkSafeRef(resource);
|
| return static_cast<GrTexture*>(resource);
|
| }
|
| @@ -247,7 +247,7 @@ bool GrContext::isTextureInCache(const GrTextureDesc& desc,
|
| const GrCacheID& cacheID,
|
| const GrTextureParams* params) const {
|
| GrResourceKey resourceKey = GrTexture::ComputeKey(fGpu, params, desc, cacheID);
|
| - return fTextureCache->hasKey(resourceKey);
|
| + return fResourceCache->hasKey(resourceKey);
|
| }
|
|
|
| void GrContext::addStencilBuffer(GrStencilBuffer* sb) {
|
| @@ -256,7 +256,7 @@ void GrContext::addStencilBuffer(GrStencilBuffer* sb) {
|
| GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(sb->width(),
|
| sb->height(),
|
| sb->numSamples());
|
| - fTextureCache->addResource(resourceKey, sb);
|
| + fResourceCache->addResource(resourceKey, sb);
|
| }
|
|
|
| GrStencilBuffer* GrContext::findStencilBuffer(int width, int height,
|
| @@ -264,7 +264,7 @@ GrStencilBuffer* GrContext::findStencilBuffer(int width, int height,
|
| GrResourceKey resourceKey = GrStencilBuffer::ComputeKey(width,
|
| height,
|
| sampleCnt);
|
| - GrCacheable* resource = fTextureCache->find(resourceKey);
|
| + GrCacheable* resource = fResourceCache->find(resourceKey);
|
| return static_cast<GrStencilBuffer*>(resource);
|
| }
|
|
|
| @@ -397,8 +397,8 @@ GrTexture* GrContext::createTexture(const GrTextureParams* params,
|
| if (NULL != texture) {
|
| // Adding a resource could put us overbudget. Try to free up the
|
| // necessary space before adding it.
|
| - fTextureCache->purgeAsNeeded(1, texture->gpuMemorySize());
|
| - fTextureCache->addResource(resourceKey, texture);
|
| + fResourceCache->purgeAsNeeded(1, texture->gpuMemorySize());
|
| + fResourceCache->addResource(resourceKey, texture);
|
|
|
| if (NULL != cacheKey) {
|
| *cacheKey = resourceKey;
|
| @@ -409,16 +409,16 @@ GrTexture* GrContext::createTexture(const GrTextureParams* params,
|
| }
|
|
|
| static GrTexture* create_scratch_texture(GrGpu* gpu,
|
| - GrResourceCache* textureCache,
|
| + GrResourceCache* resourceCache,
|
| const GrTextureDesc& desc) {
|
| GrTexture* texture = gpu->createTexture(desc, NULL, 0);
|
| if (NULL != texture) {
|
| GrResourceKey key = GrTexture::ComputeScratchKey(texture->desc());
|
| // Adding a resource could put us overbudget. Try to free up the
|
| // necessary space before adding it.
|
| - textureCache->purgeAsNeeded(1, texture->gpuMemorySize());
|
| + resourceCache->purgeAsNeeded(1, texture->gpuMemorySize());
|
| // Make the resource exclusive so future 'find' calls don't return it
|
| - textureCache->addResource(key, texture, GrResourceCache::kHide_OwnershipFlag);
|
| + resourceCache->addResource(key, texture, GrResourceCache::kHide_OwnershipFlag);
|
| }
|
| return texture;
|
| }
|
| @@ -436,7 +436,7 @@ GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra
|
| if (!fGpu->caps()->reuseScratchTextures() &&
|
| !(inDesc.fFlags & kRenderTarget_GrTextureFlagBit)) {
|
| // If we're never recycling this texture we can always make it the right size
|
| - return create_scratch_texture(fGpu, fTextureCache, inDesc);
|
| + return create_scratch_texture(fGpu, fResourceCache, inDesc);
|
| }
|
|
|
| GrTextureDesc desc = inDesc;
|
| @@ -455,7 +455,7 @@ GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra
|
| do {
|
| GrResourceKey key = GrTexture::ComputeScratchKey(desc);
|
| // Ensure we have exclusive access to the texture so future 'find' calls don't return it
|
| - resource = fTextureCache->find(key, GrResourceCache::kHide_OwnershipFlag);
|
| + resource = fResourceCache->find(key, GrResourceCache::kHide_OwnershipFlag);
|
| if (NULL != resource) {
|
| resource->ref();
|
| break;
|
| @@ -480,7 +480,7 @@ GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra
|
| desc.fFlags = inDesc.fFlags;
|
| desc.fWidth = origWidth;
|
| desc.fHeight = origHeight;
|
| - resource = create_scratch_texture(fGpu, fTextureCache, desc);
|
| + resource = create_scratch_texture(fGpu, fResourceCache, desc);
|
| }
|
|
|
| return static_cast<GrTexture*>(resource);
|
| @@ -503,13 +503,13 @@ void GrContext::addExistingTextureToCache(GrTexture* texture) {
|
| if (fGpu->caps()->reuseScratchTextures() || NULL != texture->asRenderTarget()) {
|
| // Since this texture came from an AutoScratchTexture it should
|
| // still be in the exclusive pile. Recycle it.
|
| - fTextureCache->makeNonExclusive(texture->getCacheEntry());
|
| + fResourceCache->makeNonExclusive(texture->getCacheEntry());
|
| this->purgeCache();
|
| } else if (texture->getDeferredRefCount() <= 0) {
|
| // When we aren't reusing textures we know this scratch texture
|
| // will never be reused and would be just wasting time in the cache
|
| - fTextureCache->makeNonExclusive(texture->getCacheEntry());
|
| - fTextureCache->deleteResource(texture->getCacheEntry());
|
| + fResourceCache->makeNonExclusive(texture->getCacheEntry());
|
| + fResourceCache->deleteResource(texture->getCacheEntry());
|
| } else {
|
| // In this case (fDeferredRefCount > 0) but the cache is the only
|
| // one holding a real ref. Mark the object so when the deferred
|
| @@ -529,14 +529,14 @@ void GrContext::unlockScratchTexture(GrTexture* texture) {
|
| // the same texture).
|
| if (texture->getCacheEntry()->key().isScratch()) {
|
| if (fGpu->caps()->reuseScratchTextures() || NULL != texture->asRenderTarget()) {
|
| - fTextureCache->makeNonExclusive(texture->getCacheEntry());
|
| + fResourceCache->makeNonExclusive(texture->getCacheEntry());
|
| this->purgeCache();
|
| } else if (texture->unique() && texture->getDeferredRefCount() <= 0) {
|
| // Only the cache now knows about this texture. Since we're never
|
| // reusing scratch textures (in this code path) it would just be
|
| // wasting time sitting in the cache.
|
| - fTextureCache->makeNonExclusive(texture->getCacheEntry());
|
| - fTextureCache->deleteResource(texture->getCacheEntry());
|
| + fResourceCache->makeNonExclusive(texture->getCacheEntry());
|
| + fResourceCache->deleteResource(texture->getCacheEntry());
|
| } else {
|
| // In this case (fRefCnt > 1 || defRefCnt > 0) but we don't really
|
| // want to readd it to the cache (since it will never be reused).
|
| @@ -551,8 +551,8 @@ void GrContext::unlockScratchTexture(GrTexture* texture) {
|
| }
|
|
|
| void GrContext::purgeCache() {
|
| - if (NULL != fTextureCache) {
|
| - fTextureCache->purgeAsNeeded();
|
| + if (NULL != fResourceCache) {
|
| + fResourceCache->purgeAsNeeded();
|
| }
|
| }
|
|
|
| @@ -575,13 +575,12 @@ GrTexture* GrContext::createUncachedTexture(const GrTextureDesc& descIn,
|
| return fGpu->createTexture(descCopy, srcData, rowBytes);
|
| }
|
|
|
| -void GrContext::getTextureCacheLimits(int* maxTextures,
|
| - size_t* maxTextureBytes) const {
|
| - fTextureCache->getLimits(maxTextures, maxTextureBytes);
|
| +void GrContext::getResourceCacheLimits(int* maxTextures, size_t* maxTextureBytes) const {
|
| + fResourceCache->getLimits(maxTextures, maxTextureBytes);
|
| }
|
|
|
| -void GrContext::setTextureCacheLimits(int maxTextures, size_t maxTextureBytes) {
|
| - fTextureCache->setLimits(maxTextures, maxTextureBytes);
|
| +void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes) {
|
| + fResourceCache->setLimits(maxTextures, maxTextureBytes);
|
| }
|
|
|
| int GrContext::getMaxTextureSize() const {
|
| @@ -1812,26 +1811,26 @@ const GrEffectRef* GrContext::createUPMToPMEffect(GrTexture* texture,
|
| GrPath* GrContext::createPath(const SkPath& inPath, const SkStrokeRec& stroke) {
|
| SkASSERT(fGpu->caps()->pathRenderingSupport());
|
|
|
| - // TODO: now we add to fTextureCache. This should change to fResourceCache.
|
| + // TODO: now we add to fResourceCache. This should change to fResourceCache.
|
| GrResourceKey resourceKey = GrPath::ComputeKey(inPath, stroke);
|
| - GrPath* path = static_cast<GrPath*>(fTextureCache->find(resourceKey));
|
| + GrPath* path = static_cast<GrPath*>(fResourceCache->find(resourceKey));
|
| if (NULL != path && path->isEqualTo(inPath, stroke)) {
|
| path->ref();
|
| } else {
|
| path = fGpu->createPath(inPath, stroke);
|
| - fTextureCache->purgeAsNeeded(1, path->gpuMemorySize());
|
| - fTextureCache->addResource(resourceKey, path);
|
| + fResourceCache->purgeAsNeeded(1, path->gpuMemorySize());
|
| + fResourceCache->addResource(resourceKey, path);
|
| }
|
| return path;
|
| }
|
|
|
| void GrContext::addResourceToCache(const GrResourceKey& resourceKey, GrCacheable* resource) {
|
| - fTextureCache->purgeAsNeeded(1, resource->gpuMemorySize());
|
| - fTextureCache->addResource(resourceKey, resource);
|
| + fResourceCache->purgeAsNeeded(1, resource->gpuMemorySize());
|
| + fResourceCache->addResource(resourceKey, resource);
|
| }
|
|
|
| GrCacheable* GrContext::findAndRefCachedResource(const GrResourceKey& resourceKey) {
|
| - GrCacheable* resource = fTextureCache->find(resourceKey);
|
| + GrCacheable* resource = fResourceCache->find(resourceKey);
|
| SkSafeRef(resource);
|
| return resource;
|
| }
|
| @@ -1839,6 +1838,6 @@ GrCacheable* GrContext::findAndRefCachedResource(const GrResourceKey& resourceKe
|
| ///////////////////////////////////////////////////////////////////////////////
|
| #if GR_CACHE_STATS
|
| void GrContext::printCacheStats() const {
|
| - fTextureCache->printStats();
|
| + fResourceCache->printStats();
|
| }
|
| #endif
|
|
|