Clean up some gm factory use.

Mostly use unique_ptr more consistently.

Change-Id: I6e11b272a7904eb662dea59b03fbc309a4cfc25d
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/233984
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/bench/GMBench.cpp b/bench/GMBench.cpp
index 59136bb..1e15c32 100644
--- a/bench/GMBench.cpp
+++ b/bench/GMBench.cpp
@@ -7,12 +7,10 @@
 
 #include "bench/GMBench.h"
 
-GMBench::GMBench(skiagm::GM* gm) : fGM(gm) {
-    fName.printf("GM_%s", gm->getName());
+GMBench::GMBench(std::unique_ptr<skiagm::GM> gm) : fGM(std::move(gm)) {
+    fName.printf("GM_%s", fGM->getName());
 }
 
-GMBench::~GMBench() { delete fGM; }
-
 const char* GMBench::onGetName() {
     return fName.c_str();
 }
diff --git a/bench/GMBench.h b/bench/GMBench.h
index 401562f..89065c4 100644
--- a/bench/GMBench.h
+++ b/bench/GMBench.h
@@ -16,9 +16,7 @@
  */
 class GMBench : public Benchmark {
 public:
-    // Constructor takes ownership of the GM param.
-    GMBench(skiagm::GM* gm);
-    ~GMBench() override;
+    GMBench(std::unique_ptr<skiagm::GM> gm);
 
     void modifyGrContextOptions(GrContextOptions* options) override {
         return fGM->modifyGrContextOptions(options);
@@ -31,7 +29,7 @@
     SkIPoint onGetSize() override;
 
 private:
-    skiagm::GM* fGM;
+    std::unique_ptr<skiagm::GM> fGM;
     SkString    fName;
     typedef Benchmark INHERITED;
 };
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 530eb76..a790b31 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -749,12 +749,12 @@
         }
 
         while (fGMs) {
-            std::unique_ptr<skiagm::GM> gm(fGMs->get()());
+            std::unique_ptr<skiagm::GM> gm = fGMs->get()();
             fGMs = fGMs->next();
             if (gm->runAsBench()) {
                 fSourceType = "gm";
                 fBenchType  = "micro";
-                return new GMBench(gm.release());
+                return new GMBench(std::move(gm));
             }
         }
 
diff --git a/tools/fm/fm.cpp b/tools/fm/fm.cpp
index ee6c282..f2a73f4 100644
--- a/tools/fm/fm.cpp
+++ b/tools/fm/fm.cpp
@@ -381,7 +381,7 @@
         if (skiagm::GMFactory* factory = gm_factories.find(name)) {
             std::shared_ptr<skiagm::GM> gm{(*factory)()};
             source->name = name;
-            init(source, gm);
+            init(source, std::move(gm));
             continue;
         }
 
diff --git a/tools/viewer/GMSlide.cpp b/tools/viewer/GMSlide.cpp
index 0fb5835..24d8421 100644
--- a/tools/viewer/GMSlide.cpp
+++ b/tools/viewer/GMSlide.cpp
@@ -14,8 +14,8 @@
 #include "include/core/SkCanvas.h"
 #include "tools/viewer/GMSlide.h"
 
-GMSlide::GMSlide(skiagm::GM* gm) : fGM(gm) {
-    fName.printf("GM_%s", gm->getName());
+GMSlide::GMSlide(std::unique_ptr<skiagm::GM> gm) : fGM(std::move(gm)) {
+    fName.printf("GM_%s", fGM->getName());
 }
 
 GMSlide::~GMSlide() = default;
diff --git a/tools/viewer/GMSlide.h b/tools/viewer/GMSlide.h
index 08a78b2..96d7af9 100644
--- a/tools/viewer/GMSlide.h
+++ b/tools/viewer/GMSlide.h
@@ -13,7 +13,7 @@
 
 class GMSlide : public Slide {
 public:
-    GMSlide(skiagm::GM* gm);
+    GMSlide(std::unique_ptr<skiagm::GM> gm);
     ~GMSlide() override;
 
     SkISize getDimensions() const override { return fGM->getISize(); }
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 48e9931..556c8a4 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -676,9 +676,9 @@
     // GMs
     int firstGM = fSlides.count();
     for (skiagm::GMFactory gmFactory : skiagm::GMRegistry::Range()) {
-        std::unique_ptr<skiagm::GM> gm(gmFactory());
+        std::unique_ptr<skiagm::GM> gm = gmFactory();
         if (!CommandLineFlags::ShouldSkip(FLAGS_match, gm->getName())) {
-            sk_sp<Slide> slide(new GMSlide(gm.release()));
+            sk_sp<Slide> slide(new GMSlide(std::move(gm)));
             fSlides.push_back(std::move(slide));
         }
     }