diff options
author | Greg Daniel <egdaniel@google.com> | 2017-09-26 12:49:26 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-09-26 17:11:21 +0000 |
commit | cd871401114f402e72420ccd49edecee2532b0e6 (patch) | |
tree | a323510790f271cc2e0a85487ab52cbc7ffc9339 /src/gpu/GrResourceCache.h | |
parent | 98a6216b18b57c2f7a0d58f542c60503686aed69 (diff) |
Add ability to remove unique key from proxy and underlying surface.
Bug: skia:
Change-Id: I66b891ce9ca35906fdbddb36f565b35b25825112
Reviewed-on: https://skia-review.googlesource.com/51240
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrResourceCache.h')
-rw-r--r-- | src/gpu/GrResourceCache.h | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/gpu/GrResourceCache.h b/src/gpu/GrResourceCache.h index 96323be73c..771196c81c 100644 --- a/src/gpu/GrResourceCache.h +++ b/src/gpu/GrResourceCache.h @@ -160,8 +160,9 @@ public: /////////////////////////////////////////////////////////////////////////// // TextureProxies & GrUniqueKeys // - // The two GrResourceCache methods assignUniqueKeyToProxy and findProxyByUniqueKey drive - // the behavior of uniqueKeys on proxies. + // The four GrResourceCache methods assignUniqueKeyToProxy, adoptUniqueKeyFromSurface, + // findPorxyByUniqueKey, and findOrCreateProxyByUniqueKey drive the behavior of uniqueKeys on + // proxies. // // assignUniqueKeyToProxy does the following: // if the proxy is wrapped, it sets the texture & proxy keys & adds the proxy to the hash @@ -174,8 +175,16 @@ public: // determines that the key will never be used again but, in that case, the proxy should // never receive another key. // + // adoptUniqueKeyFromSurface does the following: + // takes in a GrSurface which must have a valid unique key. It sets the proxy's key to match + // the surface and adds the proxy to the hash. + // // findProxyByUniqueKey does the following: - // first looks in the UniqueKeyProxy hash table to see if there is already a proxy w/ the key + // looks in the UniqueKeyProxy hash table to see if there is already a proxy w/ the key and + // returns the proxy. If it fails it will return null. + // + // findOrCreateProxyByUniqueKey does the following: + // first calls findProxyByUniqueKey to see if a proxy already exists with the key // failing that it looks in the ResourceCache to see there is a texture with that key // if so, it will wrap the texture in a proxy, add the proxy to the hash and return it // failing that it will return null @@ -185,12 +194,26 @@ public: */ void assignUniqueKeyToProxy(const GrUniqueKey&, GrTextureProxy*); + /* + * Sets the unique key of the provided proxy to the unique key of the surface. The surface must + * have a valid unique key. + */ + void adoptUniqueKeyFromSurface(GrTextureProxy* proxy, const GrSurface*); + /** - * Find a texture proxy that is associated with the provided unique key. + * Find a texture proxy that is associated with the provided unique key. It will not look for a + * GrSurface that has the unique key. */ sk_sp<GrTextureProxy> findProxyByUniqueKey(const GrUniqueKey&, GrSurfaceOrigin); /** + * Find a texture proxy that is associated with the provided unique key. If not proxy is found, + * try to find a resources that is associated with the unique key and create a proxy that wraps + * it. + */ + sk_sp<GrTextureProxy> findOrCreateProxyByUniqueKey(const GrUniqueKey&, GrSurfaceOrigin); + + /** * Either the proxy attached to the unique key is being deleted (in which case we * don't want it cluttering up the hash table) or the client has indicated that * it will never refer to the unique key again. In either case, remove the key @@ -200,6 +223,13 @@ public: void processInvalidProxyUniqueKey(const GrUniqueKey&); /** + * Same as above, but you must pass in a GrTextureProxy to save having to search for it. The + * GrUniqueKey of the proxy must be valid and it must match the passed in key. This function + * also gives the option to invalidate the GrUniqueKey on the underlying GrTexture. + */ + void processInvalidProxyUniqueKey(const GrUniqueKey&, GrTextureProxy*, bool invalidateSurface); + + /** * Query whether a unique key exists in the cache. */ bool hasUniqueKey(const GrUniqueKey& key) const { |