Add method to iterate over a GrOp's GrSurfaceProxies

The extra generality of having a std::function is for MDB reordering. In the current MDB reordering world there is one pass through the surfaceProxies at creation time and a second pass after flush to create the usage intervals.

Change-Id: I3f548417eddc1dad7503d919241301e404255ffe
Reviewed-on: https://skia-review.googlesource.com/46200
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
diff --git a/gm/convexpolyeffect.cpp b/gm/convexpolyeffect.cpp
index dcde104..ab9a4d0 100644
--- a/gm/convexpolyeffect.cpp
+++ b/gm/convexpolyeffect.cpp
@@ -42,12 +42,16 @@
 public:
     DEFINE_OP_CLASS_ID
 
-    const char* name() const override { return "PolyBoundsOp"; }
-
     static std::unique_ptr<GrDrawOp> Make(GrPaint&& paint, const SkRect& rect) {
         return std::unique_ptr<GrDrawOp>(new PolyBoundsOp(std::move(paint), rect));
     }
 
+    const char* name() const override { return "PolyBoundsOp"; }
+
+    void visitProxies(VisitProxyFunc func) const override {
+        fProcessors.visitProxies(func);
+    }
+
     FixedFunctionFlags fixedFunctionFlags() const override { return FixedFunctionFlags::kNone; }
 
     RequiresDstTexture finalize(const GrCaps& caps, const GrAppliedClip* clip) override {