use (temp) gpu-imagefilter-cache for applyFilter
BUG=skia:
Review URL: https://codereview.chromium.org/1414653003
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index abccd19..fceacfc 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -2015,10 +2015,14 @@
#endif
}
+SkImageFilter::Cache* SkGpuDevice::NewImageFilterCache() {
+ return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
+}
+
SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
// We always return a transient cache, so it is freed after each
// filter traversal.
- return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
+ return SkGpuDevice::NewImageFilterCache();
}
#endif
diff --git a/src/gpu/SkGpuDevice.h b/src/gpu/SkGpuDevice.h
index 2e8d14e..b2031e8 100644
--- a/src/gpu/SkGpuDevice.h
+++ b/src/gpu/SkGpuDevice.h
@@ -135,6 +135,8 @@
const SkImageFilter::Context&,
SkBitmap* result, SkIPoint* offset);
+ static SkImageFilter::Cache* NewImageFilterCache();
+
protected:
bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) override;
bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) override;
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 46196ca..b1f7851 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -235,7 +235,8 @@
const SkIRect clipBounds = srcBounds;
SkGpuImageFilterProxy proxy(fTexture->getContext());
- SkImageFilter::Context ctx(SkMatrix::I(), clipBounds, SkImageFilter::Cache::Get());
+ SkAutoTUnref<SkImageFilter::Cache> cache(SkGpuDevice::NewImageFilterCache());
+ SkImageFilter::Context ctx(SkMatrix::I(), clipBounds, cache);
SkBitmap dst;
if (!filter->filterImage(&proxy, src, ctx, &dst, offsetResult)) {