static void start(ImplicitString config, ImplicitString src, ImplicitString srcOptions, ImplicitString name) { SkString id = SkStringPrintf("%s %s %s %s", config.c_str(), src.c_str(), srcOptions.c_str(), name.c_str()); SkAutoMutexAcquire lock(gRunningMutex); gRunning.push_back(id); }
static void push_src(ImplicitString tag, ImplicitString options, Src* s) { SkAutoTDelete<Src> src(s); if (in_shard() && FLAGS_src.contains(tag.c_str()) && !SkCommandLineFlags::ShouldSkip(FLAGS_match, src->name().c_str())) { TaggedSrc& s = gSrcs.push_back(); s.reset(src.detach()); s.tag = tag; s.options = options; } }
static void done(double ms, ImplicitString config, ImplicitString src, ImplicitString srcOptions, ImplicitString name, ImplicitString note, ImplicitString log) { SkString id = SkStringPrintf("%s %s %s %s", config.c_str(), src.c_str(), srcOptions.c_str(), name.c_str()); { SkAutoMutexAcquire lock(gRunningAndTallyMutex); for (int i = 0; i < gRunning.count(); i++) { if (gRunning[i] == id) { gRunning.removeShuffle(i); break; } } if (!note.isEmpty()) { if (int* tally = gNoteTally.find(note)) { *tally += 1; } else { gNoteTally.set(note, 1); } } } if (!log.isEmpty()) { log.prepend("\n"); } auto pending = sk_atomic_dec(&gPending)-1; if (!FLAGS_quiet && note.isEmpty()) { SkDebugf("%s(%4d/%-4dMB %6d) %s\t%s%s", FLAGS_verbose ? "\n" : kSkOverwriteLine , sk_tools::getCurrResidentSetSizeMB() , sk_tools::getMaxResidentSetSizeMB() , pending , HumanizeMs(ms).c_str() , id.c_str() , log.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(); } }
static void fail(ImplicitString err) { SkAutoMutexAcquire lock(gFailuresMutex); SkDebugf("\n\nFAILURE: %s\n\n", err.c_str()); gFailures.push_back(err); }