Fix visual bench memory leak

BUG=skia:

Review URL: https://codereview.chromium.org/1239103002
diff --git a/tools/VisualBench/VisualBench.cpp b/tools/VisualBench/VisualBench.cpp
index e97db8a..d8713e7 100644
--- a/tools/VisualBench/VisualBench.cpp
+++ b/tools/VisualBench/VisualBench.cpp
@@ -163,10 +163,7 @@
         return true;
     }
 
-    while ((fBenchmark = fBenchmarkStream->next()) &&
-           (SkCommandLineFlags::ShouldSkip(FLAGS_match, fBenchmark->getUniqueName()) ||
-            !fBenchmark->isSuitableFor(Benchmark::kGPU_Backend))) {}
-
+    fBenchmark.reset(fBenchmarkStream->next());
     if (!fBenchmark) {
         return false;
     }
@@ -238,7 +235,7 @@
                     fState = kPreWarmLoops_State;
                     this->printStats();
                     fBenchmark->perCanvasPostDraw(canvas);
-                    fBenchmark = NULL;
+                    fBenchmark.reset(NULL);
                     fCurrentSample = 0;
                     fFlushes = 1;
                     fLoops = 1;
diff --git a/tools/VisualBench/VisualBench.h b/tools/VisualBench/VisualBench.h
index 683151f..b8cd2bd 100644
--- a/tools/VisualBench/VisualBench.h
+++ b/tools/VisualBench/VisualBench.h
@@ -68,7 +68,7 @@
     WallTimer fTimer;
     State fState;
     SkAutoTDelete<VisualBenchmarkStream> fBenchmarkStream;
-    Benchmark* fBenchmark;
+    SkAutoTUnref<Benchmark> fBenchmark;
 
     // support framework
     SkAutoTUnref<SkSurface> fSurface;
diff --git a/tools/VisualBench/VisualBenchmarkStream.cpp b/tools/VisualBench/VisualBenchmarkStream.cpp
index 1f16664..e3eb44d 100644
--- a/tools/VisualBench/VisualBenchmarkStream.cpp
+++ b/tools/VisualBench/VisualBenchmarkStream.cpp
@@ -68,7 +68,9 @@
     Benchmark* bench;
     // skips non matching benches
     while ((bench = this->innerNext()) &&
-           SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName())) {
+           (SkCommandLineFlags::ShouldSkip(FLAGS_match, bench->getUniqueName()) ||
+            !bench->isSuitableFor(Benchmark::kGPU_Backend))) {
+        bench->unref();
     }
     return bench;
 }
@@ -82,6 +84,7 @@
             fBenchType  = "micro";
             return bench;
         }
+        bench->unref();
     }
 
     while (fGMs) {