Index: src/gpu/GrGpuResourceCacheAccess.h |
diff --git a/src/gpu/GrGpuResourceCacheAccess.h b/src/gpu/GrGpuResourceCacheAccess.h |
index 6c99d08e469769df92ef570863e3b8cedcd9a67f..922e3b36b5a47541874507dcba23bc008c4f5ab1 100644 |
--- a/src/gpu/GrGpuResourceCacheAccess.h |
+++ b/src/gpu/GrGpuResourceCacheAccess.h |
@@ -10,74 +10,31 @@ |
#define GrGpuResourceCacheAccess_DEFINED |
#include "GrGpuResource.h" |
+#include "GrGpuResourcePriv.h" |
+ |
+namespace skiatest { |
+ class Reporter; |
+} |
/** |
- * This class allows code internal to Skia privileged access to manage the cache keys of a |
- * GrGpuResource object. |
+ * This class allows GrResourceCache increased privileged access to GrGpuResource objects. |
*/ |
class GrGpuResource::CacheAccess { |
-public: |
- /** |
- * Sets a content key for the resource. If the resource was previously cached as scratch it will |
- * be converted to a content resource. Currently this may only be called once per resource. It |
- * fails if there is already a resource with the same content key. TODO: make this supplant the |
- * resource that currently is using the content key, allow resources' content keys to change, |
- * and allow removal of a content key to convert a resource back to scratch. |
- */ |
- bool setContentKey(const GrContentKey& contentKey) { |
- return fResource->setContentKey(contentKey); |
- } |
- |
- void removeContentKey() { return fResource->removeContentKey(); } |
- |
+private: |
/** |
* Is the resource currently cached as scratch? This means it is cached, has a valid scratch |
* key, and does not have a content key. |
*/ |
bool isScratch() const { |
return !fResource->getContentKey().isValid() && fResource->fScratchKey.isValid() && |
- this->isBudgeted(); |
+ fResource->resourcePriv().isBudgeted(); |
} |
- /** |
- * If this resource can be used as a scratch resource this returns a valid scratch key. |
- * Otherwise it returns a key for which isNullScratch is true. The resource may currently be |
- * used as a content resource rather than scratch. Check isScratch(). |
- */ |
- const GrScratchKey& getScratchKey() const { return fResource->fScratchKey; } |
- |
- /** |
- * If the resource has a scratch key, the key will be removed. Since scratch keys are installed |
- * at resource creation time, this means the resource will never again be used as scratch. |
- */ |
- void removeScratchKey() const { fResource->removeScratchKey(); } |
- |
/** |
* Is the resource object wrapping an externally allocated GPU resource? |
*/ |
bool isWrapped() const { return GrGpuResource::kWrapped_LifeCycle == fResource->fLifeCycle; } |
- |
- /** |
- * Does the resource count against the resource budget? |
- */ |
- bool isBudgeted() const { |
- bool ret = GrGpuResource::kCached_LifeCycle == fResource->fLifeCycle; |
- SkASSERT(ret || !fResource->getContentKey().isValid()); |
- return ret; |
- } |
- |
- /** |
- * If the resource is uncached make it cached. Has no effect on resources that are wrapped or |
- * already cached. |
- */ |
- void makeBudgeted() { fResource->makeBudgeted(); } |
- |
- /** |
- * If the resource is cached make it uncached. Has no effect on resources that are wrapped or |
- * already uncached. Furthermore, resources with content keys cannot be made unbudgeted. |
- */ |
- void makeUnbudgeted() { fResource->makeUnbudgeted(); } |
- |
+ |
/** |
* Called by the cache to delete the resource under normal circumstances. |
*/ |
@@ -98,9 +55,8 @@ public: |
} |
} |
-private: |
- CacheAccess(GrGpuResource* resource) : fResource(resource) { } |
- CacheAccess(const CacheAccess& that) : fResource(that.fResource) { } |
+ CacheAccess(GrGpuResource* resource) : fResource(resource) {} |
+ CacheAccess(const CacheAccess& that) : fResource(that.fResource) {} |
CacheAccess& operator=(const CacheAccess&); // unimpl |
// No taking addresses of this type. |
@@ -110,6 +66,8 @@ private: |
GrGpuResource* fResource; |
friend class GrGpuResource; // to construct/copy this type. |
+ friend class GrResourceCache; // to use this type |
+ friend void test_unbudgeted_to_scratch(skiatest::Reporter* reporter); // for unit testing |
}; |
inline GrGpuResource::CacheAccess GrGpuResource::cacheAccess() { return CacheAccess(this); } |