Write dm.json periodically instead of only once at the end.
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
diff --git a/dm/DM.cpp b/dm/DM.cpp
index d4991ef..708d855 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -45,13 +45,19 @@
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 @@
// 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++) {