Index: dm/DM.cpp |
diff --git a/dm/DM.cpp b/dm/DM.cpp |
index 2c862e812e6be042e754c09d825c4020d9178703..84bb1952c106d11134f6a7365f4591552209b24e 100644 |
--- a/dm/DM.cpp |
+++ b/dm/DM.cpp |
@@ -25,6 +25,12 @@ DEFINE_string(matrix, "1 0 0 0 1 0 0 0 1", |
"Matrix to apply when using 'matrix' in config."); |
DEFINE_bool(gpu_threading, false, "Allow GPU work to run on multiple threads?"); |
+DEFINE_string(blacklist, "", |
+ "Space-separated config/src/name triples to blacklist. '_' matches anything. E.g. \n" |
+ "'--blacklist gpu skp _' will blacklist all SKPs drawn into the gpu config.\n" |
+ "'--blacklist gpu skp _ 8888 gm aarects' will also blacklist the aarects GM on 8888."); |
+ |
+ |
__SK_FORCE_IMAGE_DECODER_LINKING; |
using namespace DM; |
@@ -215,6 +221,22 @@ static void gather_sinks() { |
} |
} |
+static bool match(const char* needle, const char* haystack) { |
+ return 0 == strcmp("_", needle) || NULL != strstr(haystack, needle); |
+} |
+ |
+static ImplicitString is_blacklisted(const char* sink, const char* src, const char* name) { |
+ for (int i = 0; i < FLAGS_blacklist.count() - 2; i += 3) { |
+ if (match(FLAGS_blacklist[i+0], sink) && |
+ match(FLAGS_blacklist[i+1], src) && |
+ match(FLAGS_blacklist[i+2], name)) { |
+ return SkStringPrintf("%s %s %s", |
+ FLAGS_blacklist[i+0], FLAGS_blacklist[i+1], FLAGS_blacklist[i+2]); |
+ } |
+ } |
+ return ""; |
+} |
+ |
// The finest-grained unit of work we can run: draw a single Src into a single Sink, |
// report any errors, and perhaps write out the output: a .png of the bitmap, or a raw stream. |
struct Task { |
@@ -223,9 +245,11 @@ struct Task { |
const Tagged<Sink>& sink; |
static void Run(Task* task) { |
+ SkString name = task->src->name(); |
+ SkString whyBlacklisted = is_blacklisted(task->sink.tag, task->src.tag, name.c_str()); |
WallTimer timer; |
timer.start(); |
- if (!FLAGS_dryRun) { |
+ if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) { |
SkBitmap bitmap; |
SkDynamicMemoryWStream stream; |
Error err = task->sink->draw(*task->src, &bitmap, &stream); |
@@ -233,7 +257,7 @@ struct Task { |
fail(SkStringPrintf("%s %s %s: %s", |
task->sink.tag, |
task->src.tag, |
- task->src->name().c_str(), |
+ name.c_str(), |
err.c_str())); |
} |
if (!FLAGS_writePath.isEmpty()) { |
@@ -248,7 +272,10 @@ struct Task { |
} |
} |
timer.end(); |
- done(timer.fWall, task->sink.tag, task->src.tag, task->src->name()); |
+ if (!whyBlacklisted.isEmpty()) { |
+ name.appendf(" (--blacklist, %s)", whyBlacklisted.c_str()); |
+ } |
+ done(timer.fWall, task->sink.tag, task->src.tag, name); |
} |
static void WriteToDisk(const Task& task, |
@@ -425,10 +452,7 @@ int dm_main() { |
tg.wait(); |
// At this point we're back in single-threaded land. |
- |
- if (!FLAGS_verbose) { |
- SkDebugf("\n"); |
- } |
+ SkDebugf("\n"); |
JsonWriter::DumpJson(); |