Index: dm/DM.cpp |
diff --git a/dm/DM.cpp b/dm/DM.cpp |
index 2e41413b7ec7e093c6bc44e1dc4cb6dd422f795d..f2b0dfdfcbd7c1e22e0ca761622ba833fdf78246 100644 |
--- a/dm/DM.cpp |
+++ b/dm/DM.cpp |
@@ -49,23 +49,38 @@ static void fail(ImplicitString err) { |
gFailures.push_back(err); |
} |
-static int32_t gPending = 0; // Atomic. |
+static int32_t gPending = 0; // Atomic. Total number of running and queued tasks. |
+ |
+SK_DECLARE_STATIC_MUTEX(gRunningMutex); |
+static SkTArray<SkString> gRunning; |
static void done(double ms, |
ImplicitString config, ImplicitString src, ImplicitString name, |
- ImplicitString log) { |
+ ImplicitString note, ImplicitString log) { |
+ SkString id = SkStringPrintf("%s %s %s", config.c_str(), src.c_str(), name.c_str()); |
+ { |
+ SkAutoMutexAcquire lock(gRunningMutex); |
+ for (int i = 0; i < gRunning.count(); i++) { |
+ if (gRunning[i] == id) { |
+ gRunning.removeShuffle(i); |
+ break; |
+ } |
+ } |
+ } |
+ if (!FLAGS_verbose) { |
+ note = ""; |
+ } |
if (!log.isEmpty()) { |
log.prepend("\n"); |
} |
auto pending = sk_atomic_dec(&gPending)-1; |
- SkDebugf("%s(%4dMB %5d) %s\t%s %s %s%s", FLAGS_verbose ? "\n" : kSkOverwriteLine |
- , sk_tools::getBestResidentSetSizeMB() |
- , pending |
- , HumanizeMs(ms).c_str() |
- , config.c_str() |
- , src.c_str() |
- , name.c_str() |
- , log.c_str()); |
+ SkDebugf("%s(%4dMB %5d) %s\t%s%s%s", FLAGS_verbose ? "\n" : kSkOverwriteLine |
+ , sk_tools::getBestResidentSetSizeMB() |
+ , pending |
+ , HumanizeMs(ms).c_str() |
+ , id.c_str() |
+ , note.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) { |
@@ -73,6 +88,12 @@ static void done(double ms, |
} |
} |
+static void start(ImplicitString config, ImplicitString src, ImplicitString name) { |
+ SkString id = SkStringPrintf("%s %s %s", config.c_str(), src.c_str(), name.c_str()); |
+ SkAutoMutexAcquire lock(gRunningMutex); |
+ gRunning.push_back(id); |
+} |
+ |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
struct Gold : public SkString { |
@@ -318,13 +339,18 @@ struct Task { |
static void Run(Task* task) { |
SkString name = task->src->name(); |
+ SkString note; |
SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag, name.c_str()); |
+ if (!whyBlacklisted.isEmpty()) { |
+ note.appendf(" (--blacklist %s)", whyBlacklisted.c_str()); |
+ } |
SkString log; |
WallTimer timer; |
timer.start(); |
if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { |
SkBitmap bitmap; |
SkDynamicMemoryWStream stream; |
+ start(task->sink.tag, task->src.tag, name.c_str()); |
Error err = task->sink->draw(*task->src, &bitmap, &stream, &log); |
if (!err.isEmpty()) { |
timer.end(); |
@@ -334,10 +360,10 @@ struct Task { |
task->src.tag, |
name.c_str(), |
err.c_str())); |
- } else if (FLAGS_verbose) { |
- name.appendf(" (skipped: %s)", err.c_str()); |
+ } else { |
+ note.appendf(" (skipped: %s)", err.c_str()); |
} |
- done(timer.fWall, task->sink.tag, task->src.tag, name, log); |
+ done(timer.fWall, task->sink.tag, task->src.tag, name, note, log); |
return; |
} |
SkAutoTDelete<SkStreamAsset> data(stream.detachAsStream()); |
@@ -379,10 +405,7 @@ struct Task { |
} |
} |
timer.end(); |
- if (FLAGS_verbose && !whyBlacklisted.isEmpty()) { |
- name.appendf(" (--blacklist, %s)", whyBlacklisted.c_str()); |
- } |
- done(timer.fWall, task->sink.tag, task->src.tag, name, log); |
+ done(timer.fWall, task->sink.tag, task->src.tag, name, note, log); |
} |
static void WriteToDisk(const Task& task, |
@@ -499,11 +522,12 @@ static void run_test(skiatest::Test* test) { |
WallTimer timer; |
timer.start(); |
if (!FLAGS_dryRun) { |
+ start("unit", "test", test->name); |
GrContextFactory factory; |
test->proc(&reporter, &factory); |
} |
timer.end(); |
- done(timer.fWall, "unit", "test", test->name, ""); |
+ done(timer.fWall, "unit", "test", test->name, "", ""); |
} |
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
@@ -528,7 +552,14 @@ static void start_keepalive() { |
#else |
sleep(kSec); |
#endif |
- SkDebugf("\nStill alive: doing science, reticulating splines...\n"); |
+ SkString running; |
+ { |
+ SkAutoMutexAcquire lock(gRunningMutex); |
+ for (int i = 0; i < gRunning.count(); i++) { |
+ running.appendf("\n\t%s", gRunning[i].c_str()); |
+ } |
+ } |
+ SkDebugf("\nCurrently running:%s\n", running.c_str()); |
} |
} |
}; |