remove subclassing from ImageFilter::Proxy

BUG=skia:

Review URL: https://codereview.chromium.org/1172693002
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 26b76df..30778fc 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -9,7 +9,6 @@
 #include "SkCanvasPriv.h"
 #include "SkBitmapDevice.h"
 #include "SkColorFilter.h"
-#include "SkDeviceImageFilterProxy.h"
 #include "SkDeviceProperties.h"
 #include "SkDraw.h"
 #include "SkDrawable.h"
@@ -1245,7 +1244,7 @@
         SkImageFilter* filter = paint->getImageFilter();
         SkIPoint pos = { x - iter.getX(), y - iter.getY() };
         if (filter && !dstDev->canHandleImageFilter(filter)) {
-            SkDeviceImageFilterProxy proxy(dstDev, fProps);
+            SkImageFilter::Proxy proxy(dstDev, fProps);
             SkBitmap dst;
             SkIPoint offset = SkIPoint::Make(0, 0);
             const SkBitmap& src = srcDev->accessBitmap(false);
@@ -1297,7 +1296,7 @@
         SkImageFilter* filter = paint->getImageFilter();
         SkIPoint pos = { x - iter.getX(), y - iter.getY() };
         if (filter && !iter.fDevice->canHandleImageFilter(filter)) {
-            SkDeviceImageFilterProxy proxy(iter.fDevice, fProps);
+            SkImageFilter::Proxy proxy(iter.fDevice, fProps);
             SkBitmap dst;
             SkIPoint offset = SkIPoint::Make(0, 0);
             SkMatrix matrix = *iter.fMatrix;
diff --git a/src/core/SkDeviceImageFilterProxy.h b/src/core/SkDeviceImageFilterProxy.h
deleted file mode 100644
index 5d0a61e..0000000
--- a/src/core/SkDeviceImageFilterProxy.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2012 The Android Open Source Project
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#ifndef SkDeviceImageFilterProxy_DEFINED
-#define SkDeviceImageFilterProxy_DEFINED
-
-#include "SkBitmapDevice.h"
-#include "SkDevice.h"
-#include "SkImageFilter.h"
-#include "SkSurfaceProps.h"
-
-class SkDeviceImageFilterProxy : public SkImageFilter::Proxy {
-public:
-    SkDeviceImageFilterProxy(SkBaseDevice* device, const SkSurfaceProps& props)
-        : fDevice(device)
-        , fProps(props.flags(), kUnknown_SkPixelGeometry)
-    {}
-
-    SkBaseDevice* createDevice(int w, int h) override {
-        SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
-                                       SkBaseDevice::kNever_TileUsage,
-                                       kUnknown_SkPixelGeometry,
-                                       true /*forImageFilter*/);
-        SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL);
-        if (NULL == dev) {
-            dev = SkBitmapDevice::Create(cinfo.fInfo);
-        }
-        return dev;
-    }
-    bool filterImage(const SkImageFilter* filter, const SkBitmap& src,
-                     const SkImageFilter::Context& ctx, SkBitmap* res, SkIPoint* offset) override {
-        return fDevice->filterImage(filter, src, ctx, res, offset);
-    }
-    const SkSurfaceProps* surfaceProps() const override {
-        return &fProps;
-    }
-
-private:
-    SkBaseDevice*  fDevice;
-    const SkSurfaceProps fProps;
-};
-
-#endif
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 91b3bc3..f512204 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -523,3 +523,26 @@
 void SkImageFilter::PurgeCache() {
     cache.get()->purge();
 }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+#include "SkBitmapDevice.h"
+
+SkBaseDevice* SkImageFilter::Proxy::createDevice(int w, int h) {
+    SkBaseDevice::CreateInfo cinfo(SkImageInfo::MakeN32Premul(w, h),
+                                   SkBaseDevice::kNever_TileUsage,
+                                   kUnknown_SkPixelGeometry,
+                                   true /*forImageFilter*/);
+    SkBaseDevice* dev = fDevice->onCreateDevice(cinfo, NULL);
+    if (NULL == dev) {
+        dev = SkBitmapDevice::Create(cinfo.fInfo);
+    }
+    return dev;
+}
+
+bool SkImageFilter::Proxy::filterImage(const SkImageFilter* filter, const SkBitmap& src,
+                                       const SkImageFilter::Context& ctx,
+                                       SkBitmap* result, SkIPoint* offset) {
+    return fDevice->filterImage(filter, src, ctx, result, offset);
+}
+    
diff --git a/src/effects/SkPictureImageFilter.cpp b/src/effects/SkPictureImageFilter.cpp
index baae6f8..cb61cdd 100644
--- a/src/effects/SkPictureImageFilter.cpp
+++ b/src/effects/SkPictureImageFilter.cpp
@@ -133,7 +133,7 @@
     // Pass explicit surface props, as the simplified canvas constructor discards device properties.
     // FIXME: switch back to the public constructor (and unfriend) after
     //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
-    SkCanvas canvas(device, proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
+    SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
 
     canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
     canvas.concat(ctx.ctm());
@@ -156,14 +156,14 @@
     // Pass explicit surface props, as the simplified canvas constructor discards device properties.
     // FIXME: switch back to the public constructor (and unfriend) after
     //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
-    SkCanvas localCanvas(localDevice, proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
+    SkCanvas localCanvas(localDevice, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
     localCanvas.translate(-SkIntToScalar(localIBounds.fLeft), -SkIntToScalar(localIBounds.fTop));
     localCanvas.drawPicture(fPicture);
 
     // Pass explicit surface props, as the simplified canvas constructor discards device properties.
     // FIXME: switch back to the public constructor (and unfriend) after
     //        https://code.google.com/p/skia/issues/detail?id=3142 is fixed.
-    SkCanvas canvas(device, proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
+    SkCanvas canvas(device, &proxy->surfaceProps(), SkCanvas::kDefault_InitFlags);
 
     canvas.translate(-SkIntToScalar(deviceBounds.fLeft), -SkIntToScalar(deviceBounds.fTop));
     canvas.concat(ctx.ctm());
diff --git a/src/gpu/GrLayerHoister.cpp b/src/gpu/GrLayerHoister.cpp
index 67e3c19..5cc5fa3 100644
--- a/src/gpu/GrLayerHoister.cpp
+++ b/src/gpu/GrLayerHoister.cpp
@@ -11,7 +11,6 @@
 
 #include "SkBigPicture.h"
 #include "SkCanvas.h"
-#include "SkDeviceImageFilterProxy.h"
 #include "SkDeviceProperties.h"
 #include "SkGpuDevice.h"
 #include "SkGrPixelRef.h"
@@ -315,7 +314,7 @@
     SkAutoTUnref<SkImageFilter::Cache> cache(SkImageFilter::Cache::Create(kDefaultCacheSize));
     SkImageFilter::Context filterContext(totMat, clipBounds, cache);
 
-    SkDeviceImageFilterProxy proxy(device, SkSurfaceProps(0, kUnknown_SkPixelGeometry));
+    SkImageFilter::Proxy proxy(device, SkSurfaceProps(0, kUnknown_SkPixelGeometry));
     const SkBitmap src = wrap_texture(layer->texture());
 
     if (!layer->filter()->filterImage(&proxy, src, filterContext, &filteredBitmap, &offset)) {
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
index beed2fa..8bd5b5e 100644
--- a/src/gpu/SkGpuDevice.cpp
+++ b/src/gpu/SkGpuDevice.cpp
@@ -18,7 +18,6 @@
 #include "GrTextContext.h"
 #include "GrTracing.h"
 #include "SkCanvasPriv.h"
-#include "SkDeviceImageFilterProxy.h"
 #include "SkDrawProcs.h"
 #include "SkErrorInternals.h"
 #include "SkGlyphCache.h"
@@ -1243,7 +1242,7 @@
 
     // FIXME: plumb actual surface props such that we don't have to lie about the flags here
     //        (https://code.google.com/p/skia/issues/detail?id=3148).
-    SkDeviceImageFilterProxy proxy(this, SkSurfaceProps(0, getLeakyProperties().pixelGeometry()));
+    SkImageFilter::Proxy proxy(this, SkSurfaceProps(0, getLeakyProperties().pixelGeometry()));
 
     if (filter->canFilterImageGPU()) {
         return filter->filterImageGPU(&proxy, wrap_texture(texture, width, height),