diff options
author | Greg Daniel <egdaniel@google.com> | 2018-03-14 09:35:50 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-03-14 14:09:13 +0000 |
commit | b78dd5d01eb16ae3cb9104ce8c0fa7e861431259 (patch) | |
tree | 47c9a73b14797da3d62171442d53b6a9b9fa3982 /src/gpu/SkGr.cpp | |
parent | 0bf59e459772df75df6d9fc8720368cab077746f (diff) |
Add back missing unique key checks when creating CachedBitmap/Image Proxies
Its possible that this could fix perf regression in Chrome.
Bug: 811452
Change-Id: I2d4f7827092b361469586580f0c7c843ab2d5cec
Reviewed-on: https://skia-review.googlesource.com/114280
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/gpu/SkGr.cpp')
-rw-r--r-- | src/gpu/SkGr.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 4701483af5..195d036374 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -178,9 +178,11 @@ static void create_unique_key_for_image(const SkImage* image, GrUniqueKey* resul } if (const SkBitmap* bm = as_IB(image)->onPeekBitmap()) { - SkIPoint origin = bm->pixelRefOrigin(); - SkIRect subset = SkIRect::MakeXYWH(origin.fX, origin.fY, bm->width(), bm->height()); - GrMakeKeyFromImageID(result, bm->getGenerationID(), subset); + if (!bm->isVolatile()) { + SkIPoint origin = bm->pixelRefOrigin(); + SkIRect subset = SkIRect::MakeXYWH(origin.fX, origin.fY, bm->width(), bm->height()); + GrMakeKeyFromImageID(result, bm->getGenerationID(), subset); + } return; } @@ -199,10 +201,13 @@ sk_sp<GrTextureProxy> GrMakeCachedImageProxy(GrProxyProvider* proxyProvider, proxy = proxyProvider->findOrCreateProxyByUniqueKey(originalKey, kTopLeft_GrSurfaceOrigin); } if (!proxy) { - proxy = proxyProvider->createTextureProxy(std::move(srcImage), kNone_GrSurfaceFlags, 1, + proxy = proxyProvider->createTextureProxy(srcImage, kNone_GrSurfaceFlags, 1, SkBudgeted::kYes, fit); if (proxy && originalKey.isValid()) { proxyProvider->assignUniqueKeyToProxy(originalKey, proxy.get()); + if (const SkBitmap* bm = as_IB(srcImage.get())->onPeekBitmap()) { + GrInstallBitmapUniqueKeyInvalidator(originalKey, bm->pixelRef()); + } } } |