Write dm.json periodically instead of only once at the end.
authormtklein <mtklein@chromium.org>
Fri, 23 Jan 2015 13:48:00 +0000 (05:48 -0800)
committerCommit bot <commit-bot@chromium.org>
Fri, 23 Jan 2015 13:48:00 +0000 (05:48 -0800)
This way if a bot crashes, we might get some partial results in gold rather
than none.  We do the same sort of thing in nanobench for perf.

BUG=skia:3255

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

dm/DM.cpp

index d4991ef312d0999d77ecbf12edc3675c78944081..708d8558f33fb28c63c1e76a3776b0861200ab9f 100644 (file)
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -45,13 +45,19 @@ static void fail(ImplicitString err) {
 static int32_t gPending = 0;  // Atomic.
 
 static void done(double ms, ImplicitString config, ImplicitString src, ImplicitString name) {
+    int32_t pending = sk_atomic_dec(&gPending)-1;
     SkDebugf("%s(%4dMB %5d) %s\t%s %s %s  ", FLAGS_verbose ? "\n" : kSkOverwriteLine
                                            , sk_tools::getMaxResidentSetSizeMB()
-                                           , sk_atomic_dec(&gPending)-1
+                                           , pending
                                            , HumanizeMs(ms).c_str()
                                            , config.c_str()
                                            , src.c_str()
                                            , name.c_str());
+    // We write our dm.json file every once in a while in case we crash.
+    // Notice this also handles the final dm.json when pending == 0.
+    if (pending % 500 == 0) {
+        JsonWriter::DumpJson();
+    }
 }
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
@@ -450,8 +456,6 @@ int dm_main() {
     // At this point we're back in single-threaded land.
 
     SkDebugf("\n");
-    JsonWriter::DumpJson();
-
     if (gFailures.count() > 0) {
         SkDebugf("Failures:\n");
         for (int i = 0; i < gFailures.count(); i++) {