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