SIMPLE_GM generates less code

Review URL: https://codereview.chromium.org/811703005
diff --git a/gm/gm.h b/gm/gm.h
index 703fc90..81744e2 100644
--- a/gm/gm.h
+++ b/gm/gm.h
@@ -25,18 +25,13 @@
     static skiagm::GMRegistry   SK_MACRO_APPEND_LINE(R_)(SK_MACRO_APPEND_LINE(F_));
 
 // See colorwheel.cpp for example usage.
-#define DEF_SIMPLE_GM(NAME, CANVAS, W, H)                     \
-    class SK_MACRO_CONCAT(NAME, _GM) : public skiagm::GM {    \
-        void onDraw(SkCanvas* canvas) SK_OVERRIDE;    \
-        SkISize onISize() SK_OVERRIDE {               \
-            return SkISize::Make((W), (H));                   \
-        }                                                     \
-        SkString onShortName() SK_OVERRIDE {          \
-            return SkString(#NAME);                           \
-        }                                                     \
-    };                                                        \
-    DEF_GM( return SkNEW(SK_MACRO_CONCAT(NAME, _GM)); )       \
-    void SK_MACRO_CONCAT(NAME, _GM)::onDraw(SkCanvas* CANVAS)
+#define DEF_SIMPLE_GM(NAME, CANVAS, W, H)                               \
+    static void SK_MACRO_CONCAT(NAME, _GM)(SkCanvas* CANVAS);           \
+    DEF_GM( return SkNEW_ARGS(skiagm::SimpleGM,                         \
+                              (SkString(#NAME),                         \
+                               SK_MACRO_CONCAT(NAME, _GM),              \
+                               SkISize::Make(W, H))); )                 \
+    void SK_MACRO_CONCAT(NAME, _GM)(SkCanvas* CANVAS)
 
 namespace skiagm {
 
@@ -136,6 +131,22 @@
     };
 
     typedef SkTRegistry<GM*(*)(void*)> GMRegistry;
+
+    class SimpleGM : public skiagm::GM {
+    public:
+        SimpleGM(const SkString& name,
+                 void (*drawProc)(SkCanvas*),
+                 const SkISize& size)
+            : fName(name), fDrawProc(drawProc), fSize(size) {}
+    protected:
+        void onDraw(SkCanvas* canvas) SK_OVERRIDE;
+        SkISize onISize() SK_OVERRIDE;
+        SkString onShortName() SK_OVERRIDE;
+    private:
+        SkString fName;
+        void (*fDrawProc)(SkCanvas*);
+        SkISize fSize;
+    };
 }
 
 #endif