diff options
author | 2018-02-08 15:05:44 -0500 | |
---|---|---|
committer | 2018-02-08 20:33:40 +0000 | |
commit | 457469c7a0c879b9d8ff8ed9fabe3f3dcab06097 (patch) | |
tree | 92ef5dcb793bbe9406730b1576c51bcc6042b86c /src/gpu/GrProxyProvider.cpp | |
parent | 5635631c8887db678e6123c191ae68456b60d2a7 (diff) |
Make non-ddl lazy proxys clean-up and delete their callbacks immediately after instanstation.
This makes sure resources are released and free'd as soon as possible if we
no longer need them.
Bug: skia:
Change-Id: Ic216987649c54183f8cbbff90a633860a97754b3
Reviewed-on: https://skia-review.googlesource.com/105721
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/GrProxyProvider.cpp')
-rw-r--r-- | src/gpu/GrProxyProvider.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/gpu/GrProxyProvider.cpp b/src/gpu/GrProxyProvider.cpp index 0076a1a82d..dd2a1b7e13 100644 --- a/src/gpu/GrProxyProvider.cpp +++ b/src/gpu/GrProxyProvider.cpp @@ -537,11 +537,17 @@ sk_sp<GrTextureProxy> GrProxyProvider::createLazyProxy(LazyInstantiateCallback&& SkASSERT((desc.fWidth <= 0 && desc.fHeight <= 0) || (desc.fWidth > 0 && desc.fHeight > 0)); uint32_t flags = GrResourceProvider::kNoPendingIO_Flag; + + using LazyInstantiationType = GrSurfaceProxy::LazyInstantiationType; + // For non-ddl draws always make lazy proxy's single use. + LazyInstantiationType lazyType = fResourceProvider ? LazyInstantiationType::kSingleUse + : LazyInstantiationType::kMultipleUse; + return sk_sp<GrTextureProxy>(SkToBool(kRenderTarget_GrSurfaceFlag & desc.fFlags) ? - new GrTextureRenderTargetProxy(std::move(callback), desc, + new GrTextureRenderTargetProxy(std::move(callback), lazyType, desc, mipMapped, fit, budgeted, flags) : - new GrTextureProxy(std::move(callback), desc, mipMapped, fit, - budgeted, flags)); + new GrTextureProxy(std::move(callback), lazyType, desc, mipMapped, + fit, budgeted, flags)); } sk_sp<GrRenderTargetProxy> GrProxyProvider::createLazyRenderTargetProxy( @@ -553,13 +559,19 @@ sk_sp<GrRenderTargetProxy> GrProxyProvider::createLazyRenderTargetProxy( SkASSERT((desc.fWidth <= 0 && desc.fHeight <= 0) || (desc.fWidth > 0 && desc.fHeight > 0)); uint32_t flags = GrResourceProvider::kNoPendingIO_Flag; + + using LazyInstantiationType = GrSurfaceProxy::LazyInstantiationType; + // For non-ddl draws always make lazy proxy's single use. + LazyInstantiationType lazyType = fResourceProvider ? LazyInstantiationType::kSingleUse + : LazyInstantiationType::kMultipleUse; + if (Textureable::kYes == textureable) { - return sk_sp<GrRenderTargetProxy>(new GrTextureRenderTargetProxy(std::move(callback), desc, - mipMapped, fit, budgeted, - flags)); + return sk_sp<GrRenderTargetProxy>(new GrTextureRenderTargetProxy(std::move(callback), + lazyType, desc, mipMapped, + fit, budgeted, flags)); } - return sk_sp<GrRenderTargetProxy>(new GrRenderTargetProxy(std::move(callback), desc, + return sk_sp<GrRenderTargetProxy>(new GrRenderTargetProxy(std::move(callback), lazyType, desc, fit, budgeted, flags)); } |