diff --git a/tests/PathOpsOpCubicThreadedTest.cpp b/tests/PathOpsOpCubicThreadedTest.cpp
index 0ccb89d..99e68da 100644
--- a/tests/PathOpsOpCubicThreadedTest.cpp
+++ b/tests/PathOpsOpCubicThreadedTest.cpp
@@ -15,7 +15,10 @@
     SkASSERT(data);
     PathOpsThreadState& state = *data;
     char pathStr[1024];  // gdb: set print elements 400
-    sk_bzero(pathStr, sizeof(pathStr));
+    bool progress = state.fReporter->verbose(); // FIXME: break out into its own parameter?
+    if (progress) {
+        sk_bzero(pathStr, sizeof(pathStr));
+    }
     for (int a = 0 ; a < 6; ++a) {
         for (int b = a + 1 ; b < 7; ++b) {
             for (int c = 0 ; c < 6; ++c) {
@@ -23,34 +26,38 @@
                     for (int e = SkPath::kWinding_FillType ; e <= SkPath::kEvenOdd_FillType; ++e) {
     for (int f = SkPath::kWinding_FillType ; f <= SkPath::kEvenOdd_FillType; ++f) {
         SkPath pathA, pathB;
-        char* str = pathStr;
+        if (progress) {
+            char* str = pathStr;
+            str += sprintf(str, "    path.setFillType(SkPath::k%s_FillType);\n",
+                    e == SkPath::kWinding_FillType ? "Winding" : e == SkPath::kEvenOdd_FillType
+                    ? "EvenOdd" : "?UNDEFINED");
+            str += sprintf(str, "    path.moveTo(%d,%d);\n", state.fA, state.fB);
+            str += sprintf(str, "    path.cubicTo(%d,%d, %d,%d, %d,%d);\n", state.fC, state.fD,
+                    b, a, d, c);
+            str += sprintf(str, "    path.close();\n");
+            str += sprintf(str, "    pathB.setFillType(SkPath::k%s_FillType);\n",
+                    f == SkPath::kWinding_FillType ? "Winding" : f == SkPath::kEvenOdd_FillType
+                    ? "EvenOdd" : "?UNDEFINED");
+            str += sprintf(str, "    pathB.moveTo(%d,%d);\n", a, b);
+            str += sprintf(str, "    pathB.cubicTo(%d,%d, %d,%d, %d,%d);\n", c, d,
+                    state.fB, state.fA, state.fD, state.fC);
+            str += sprintf(str, "    pathB.close();\n");
+        }
         pathA.setFillType((SkPath::FillType) e);
-        str += sprintf(str, "    path.setFillType(SkPath::k%s_FillType);\n",
-                e == SkPath::kWinding_FillType ? "Winding" : e == SkPath::kEvenOdd_FillType
-                ? "EvenOdd" : "?UNDEFINED");
         pathA.moveTo(SkIntToScalar(state.fA), SkIntToScalar(state.fB));
-        str += sprintf(str, "    path.moveTo(%d,%d);\n", state.fA, state.fB);
         pathA.cubicTo(SkIntToScalar(state.fC), SkIntToScalar(state.fD), SkIntToScalar(b),
                 SkIntToScalar(a), SkIntToScalar(d), SkIntToScalar(c));
-        str += sprintf(str, "    path.cubicTo(%d,%d, %d,%d, %d,%d);\n", state.fC, state.fD,
-                b, a, d, c);
         pathA.close();
-        str += sprintf(str, "    path.close();\n");
         pathB.setFillType((SkPath::FillType) f);
-        str += sprintf(str, "    pathB.setFillType(SkPath::k%s_FillType);\n",
-                f == SkPath::kWinding_FillType ? "Winding" : f == SkPath::kEvenOdd_FillType
-                ? "EvenOdd" : "?UNDEFINED");
         pathB.moveTo(SkIntToScalar(a), SkIntToScalar(b));
-        str += sprintf(str, "    pathB.moveTo(%d,%d);\n", a, b);
         pathB.cubicTo(SkIntToScalar(c), SkIntToScalar(d), SkIntToScalar(state.fB),
                 SkIntToScalar(state.fA), SkIntToScalar(state.fD), SkIntToScalar(state.fC));
-        str += sprintf(str, "    pathB.cubicTo(%d,%d, %d,%d, %d,%d);\n", c, d,
-                state.fB, state.fA, state.fD, state.fC);
         pathB.close();
-        str += sprintf(str, "    pathB.close();\n");
         for (int op = 0 ; op <= kXOR_PathOp; ++op)    {
-            outputProgress(state.fPathStr, pathStr, (SkPathOp) op);
-            testPathOp(state.fReporter, pathA, pathB, (SkPathOp) op);
+            if (progress) {
+                outputProgress(state.fPathStr, pathStr, (SkPathOp) op);
+            }
+            testThreadedPathOp(state.fReporter, pathA, pathB, (SkPathOp) op);
         }
     }
                     }
