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)) {