DM: also run benches once.

Also:
  - make GrMemoryPoolBenches threadsafe
  - some tweaks to various DM code
  - rename GM::shortName() to getName() to match benches and tests

On my desktop, (289 GMs, 617 benches) x 4 configs, 227 tests takes 46s in Debug, 14s in Release.  (Still minutes faster than running tests && bench && gm.)  GPU singlethreading is definitely the limiting factor again; going to reexamine whether that's helpful to thread it again.

BUG=skia:
R=reed@google.com, bsalomon@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/178473006

git-svn-id: http://skia.googlecode.com/svn/trunk@13603 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/bench/GrMemoryPoolBench.cpp b/bench/GrMemoryPoolBench.cpp
index 21f686d..96526e5 100644
--- a/bench/GrMemoryPoolBench.cpp
+++ b/bench/GrMemoryPoolBench.cpp
@@ -20,12 +20,12 @@
 struct A {
     int gStuff[10];
 #if OVERRIDE_NEW
-    void* operator new (size_t size) { return gPool.allocate(size); }
-    void operator delete (void* mem) { if (mem) { return gPool.release(mem); } }
+    void* operator new (size_t size) { return gBenchPool.allocate(size); }
+    void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
 #endif
-    static GrMemoryPool gPool;
+    static GrMemoryPool gBenchPool;
 };
-GrMemoryPool A::gPool(10 * (1 << 10), 10 * (1 << 10));
+GrMemoryPool A::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
 
 /**
  * This benchmark creates and deletes objects in stack order
@@ -79,6 +79,16 @@
     typedef SkBenchmark INHERITED;
 };
 
+struct B {
+    int gStuff[10];
+#if OVERRIDE_NEW
+    void* operator new (size_t size) { return gBenchPool.allocate(size); }
+    void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
+#endif
+    static GrMemoryPool gBenchPool;
+};
+GrMemoryPool B::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
+
 /**
  * This benchmark creates objects and deletes them in random order
  */
@@ -98,12 +108,12 @@
         enum {
             kMaxObjects = 4 * (1 << 10),
         };
-        SkAutoTDelete<A> objects[kMaxObjects];
+        SkAutoTDelete<B> objects[kMaxObjects];
 
         for (int i = 0; i < loops; i++) {
             uint32_t idx = r.nextRangeU(0, kMaxObjects-1);
             if (NULL == objects[idx].get()) {
-                objects[idx].reset(new A);
+                objects[idx].reset(new B);
             } else {
                 objects[idx].free();
             }
@@ -114,6 +124,16 @@
     typedef SkBenchmark INHERITED;
 };
 
+struct C {
+    int gStuff[10];
+#if OVERRIDE_NEW
+    void* operator new (size_t size) { return gBenchPool.allocate(size); }
+    void operator delete (void* mem) { if (mem) { return gBenchPool.release(mem); } }
+#endif
+    static GrMemoryPool gBenchPool;
+};
+GrMemoryPool C::gBenchPool(10 * (1 << 10), 10 * (1 << 10));
+
 /**
  * This benchmark creates objects and deletes them in queue order
  */
@@ -133,11 +153,11 @@
 
     virtual void onDraw(const int loops, SkCanvas*) {
         SkRandom r;
-        A* objects[M];
+        C* objects[M];
         for (int i = 0; i < loops; i++) {
             uint32_t count = r.nextRangeU(0, M-1);
             for (uint32_t i = 0; i < count; i++) {
-                objects[i] = new A;
+                objects[i] = new C;
             }
             for (uint32_t i = 0; i < count; i++) {
                 delete objects[i];