Try to debug Windows infinite loops in nanobench.

NOTREECHECKS=true

BUG=skia:

Review URL: https://codereview.chromium.org/396753004
diff --git a/bench/nanobench.cpp b/bench/nanobench.cpp
index 8f3d4aa..4453707 100644
--- a/bench/nanobench.cpp
+++ b/bench/nanobench.cpp
@@ -50,6 +50,8 @@
 
 DEFINE_string(outResultsFile, "", "If given, write results here as JSON.");
 DEFINE_bool(resetGpuContext, true, "Reset the GrContext before running each bench.");
+DEFINE_int32(maxCalibrationAttempts, 3,
+             "Try up to this many times to guess loops for a bench, or skip the bench.");
 
 
 static SkString humanize(double ms) {
@@ -93,9 +95,14 @@
 static int cpu_bench(const double overhead, Benchmark* bench, SkCanvas* canvas, double* samples) {
     // First figure out approximately how many loops of bench it takes to make overhead negligible.
     double bench_plus_overhead;
+    int round = 0;
     do {
         bench_plus_overhead = time(1, bench, canvas, NULL);
-    } while (bench_plus_overhead < overhead);  // Shouldn't normally happen.
+        if (++round == FLAGS_maxCalibrationAttempts) {
+            // At some point we have to just give up.
+            return 0;
+        }
+    } while (bench_plus_overhead < overhead);
 
     // Later we'll just start and stop the timer once but loop N times.
     // We'll pick N to make timer overhead negligible:
@@ -306,6 +313,7 @@
         bench->preDraw();
         for (int j = 0; j < targets.count(); j++) {
             SkCanvas* canvas = targets[j]->surface.get() ? targets[j]->surface->getCanvas() : NULL;
+            const char* config = targets[j]->config;
 
             const int loops =
 #if SK_SUPPORT_GPU
@@ -315,10 +323,13 @@
 #endif
                  cpu_bench(       overhead, bench.get(), canvas, samples.get());
 
+            if (loops == 0) {
+                SkDebugf("Unable to time %s\t%s (overhead %s)\n",
+                         bench->getName(), config, humanize(overhead).c_str());
+                continue;
+            }
+
             Stats stats(samples.get(), FLAGS_samples);
-
-            const char* config = targets[j]->config;
-
             log.config(config);
             log.timer("min_ms",    stats.min);
             log.timer("median_ms", stats.median);