trim DM fat
authormtklein <mtklein@chromium.org>
Thu, 25 Feb 2016 03:07:07 +0000 (19:07 -0800)
committerCommit bot <commit-bot@chromium.org>
Thu, 25 Feb 2016 03:07:07 +0000 (19:07 -0800)
 - cuts out a few fringe features like logs and notes tallies
 - moves vetos and blacklisting earlier so they're never really seen
 - many string strength reductions, either to const SkString& or const char*

CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Debug-MSAN-Trybot

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1727363004

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

dm/DM.cpp

index 5c27c45..f37fc8b 100644 (file)
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -71,12 +71,10 @@ using namespace DM;
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
-static double now_ms() { return SkTime::GetNSecs() * 1e-6; }
-
 SK_DECLARE_STATIC_MUTEX(gFailuresMutex);
 static SkTArray<SkString> gFailures;
 
-static void fail(ImplicitString err) {
+static void fail(const SkString& err) {
     SkAutoMutexAcquire lock(gFailuresMutex);
     SkDebugf("\n\nFAILURE: %s\n\n", err.c_str());
     gFailures.push_back(err);
@@ -85,15 +83,11 @@ static void fail(ImplicitString err) {
 
 // We use a spinlock to make locking this in a signal handler _somewhat_ safe.
 SK_DECLARE_STATIC_SPINLOCK(gMutex);
-static int32_t                   gPending;
-static SkTArray<SkString>        gRunning;
-static SkTHashMap<SkString, int> gNoteTally;
-
-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());
+static int32_t            gPending;
+static SkTArray<SkString> gRunning;
+
+static void done(const char* config, const char* src, const char* srcOptions, const char* name) {
+    SkString id = SkStringPrintf("%s %s %s %s", config, src, srcOptions, name);
     int pending;
     {
         SkAutoTAcquire<SkPODSpinlock> lock(gMutex);
@@ -103,13 +97,6 @@ static void done(double ms,
                 break;
             }
         }
-        if (!note.isEmpty()) {
-            if (int* tally = gNoteTally.find(note)) {
-                *tally += 1;
-            } else {
-                gNoteTally.set(note, 1);
-            }
-        }
         pending = --gPending;
     }
     // We write our dm.json file every once in a while in case we crash.
@@ -119,10 +106,8 @@ static void done(double ms,
     }
 }
 
-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());
+static void start(const char* config, const char* src, const char* srcOptions, const char* name) {
+    SkString id = SkStringPrintf("%s %s %s %s", config, src, srcOptions, name);
     SkAutoTAcquire<SkPODSpinlock> lock(gMutex);
     gRunning.push_back(id);
 }
@@ -165,8 +150,9 @@ static void print_status() {
 
 struct Gold : public SkString {
     Gold() : SkString("") {}
-    Gold(ImplicitString sink, ImplicitString src, ImplicitString srcOptions,
-         ImplicitString name, ImplicitString md5)
+    Gold(const SkString& sink, const SkString& src,
+         const SkString& srcOptions, const SkString& name,
+         const SkString& md5)
         : SkString("") {
         this->append(sink);
         this->append(src);
@@ -221,8 +207,8 @@ static void gather_uninteresting_hashes() {
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 
 struct TaggedSrc : public SkAutoTDelete<Src> {
-    ImplicitString tag;
-    ImplicitString options;
+    SkString tag;
+    SkString options;
 };
 
 struct TaggedSink : public SkAutoTDelete<Sink> {
@@ -239,10 +225,10 @@ static bool in_shard() {
     return N++ % FLAGS_shards == FLAGS_shard;
 }
 
-static void push_src(ImplicitString tag, ImplicitString options, Src* s) {
+static void push_src(const char* tag, ImplicitString options, Src* s) {
     SkAutoTDelete<Src> src(s);
     if (in_shard() &&
-        FLAGS_src.contains(tag.c_str()) &&
+        FLAGS_src.contains(tag) &&
         !SkCommandLineFlags::ShouldSkip(FLAGS_match, src->name().c_str())) {
         TaggedSrc& s = gSrcs.push_back();
         s.reset(src.detach());
@@ -856,19 +842,17 @@ static bool match(const char* needle, const char* haystack) {
     return 0 == strcmp("_", needle) || nullptr != strstr(haystack, needle);
 }
 
-static ImplicitString is_blacklisted(const char* sink, const char* src,
-                                     const char* srcOptions, const char* name) {
+static bool is_blacklisted(const char* sink, const char* src,
+                           const char* srcOptions, const char* name) {
     for (int i = 0; i < FLAGS_blacklist.count() - 3; i += 4) {
         if (match(FLAGS_blacklist[i+0], sink) &&
             match(FLAGS_blacklist[i+1], src) &&
             match(FLAGS_blacklist[i+2], srcOptions) &&
             match(FLAGS_blacklist[i+3], name)) {
-            return SkStringPrintf("%s %s %s %s",
-                                  FLAGS_blacklist[i+0], FLAGS_blacklist[i+1],
-                                  FLAGS_blacklist[i+2], FLAGS_blacklist[i+3]);
+            return true;
         }
     }
-    return "";
+    return false;
 }
 
 // Even when a Task Sink reports to be non-threadsafe (e.g. GPU), we know things like
@@ -885,23 +869,12 @@ struct Task {
     static void Run(const Task& task) {
         SkString name = task.src->name();
 
-        // We'll skip drawing this Src/Sink pair if:
-        //   - the Src vetoes the Sink;
-        //   - this Src / Sink combination is on the blacklist;
-        //   - it's a dry run.
-        SkString note(task.src->veto(task.sink->flags()) ? " (veto)" : "");
-        SkString whyBlacklisted = is_blacklisted(task.sink.tag.c_str(), task.src.tag.c_str(),
-                                                 task.src.options.c_str(), name.c_str());
-        if (!whyBlacklisted.isEmpty()) {
-            note.appendf(" (--blacklist %s)", whyBlacklisted.c_str());
-        }
-
         SkString log;
-        auto timerStart = now_ms();
-        if (!FLAGS_dryRun && note.isEmpty()) {
+        if (!FLAGS_dryRun) {
             SkBitmap bitmap;
             SkDynamicMemoryWStream stream;
-            start(task.sink.tag.c_str(), task.src.tag, task.src.options, name.c_str());
+            start(task.sink.tag.c_str(), task.src.tag.c_str(),
+                  task.src.options.c_str(), name.c_str());
             Error err = task.sink->draw(*task.src, &bitmap, &stream, &log);
             if (!err.isEmpty()) {
                 if (err.isFatal()) {
@@ -912,10 +885,8 @@ struct Task {
                                         name.c_str(),
                                         err.c_str()));
                 } else {
-                    note.appendf(" (skipped: %s)", err.c_str());
-                    auto elapsed = now_ms() - timerStart;
-                    done(elapsed, task.sink.tag.c_str(), task.src.tag, task.src.options,
-                         name, note, log);
+                    done(task.sink.tag.c_str(), task.src.tag.c_str(),
+                         task.src.options.c_str(), name.c_str());
                     return;
                 }
             }
@@ -955,8 +926,8 @@ struct Task {
                 }
 
                 if (!FLAGS_readPath.isEmpty() &&
-                    !gGold.contains(Gold(task.sink.tag.c_str(), task.src.tag.c_str(),
-                                         task.src.options.c_str(), name, md5))) {
+                    !gGold.contains(Gold(task.sink.tag, task.src.tag,
+                                         task.src.options, name, md5))) {
                     fail(SkStringPrintf("%s not found for %s %s %s %s in %s",
                                         md5.c_str(),
                                         task.sink.tag.c_str(),
@@ -977,9 +948,7 @@ struct Task {
                 }
             });
         }
-        auto elapsed = now_ms() - timerStart;
-        done(elapsed, task.sink.tag.c_str(), task.src.tag.c_str(), task.src.options.c_str(),
-             name, note, log);
+        done(task.sink.tag.c_str(), task.src.tag.c_str(), task.src.options.c_str(), name.c_str());
     }
 
     static void WriteToDisk(const Task& task,
@@ -989,7 +958,7 @@ struct Task {
                             const SkBitmap* bitmap) {
         JsonWriter::BitmapResult result;
         result.name          = task.src->name();
-        result.config        = task.sink.tag.c_str();
+        result.config        = task.sink.tag;
         result.sourceType    = task.src.tag;
         result.sourceOptions = task.src.options;
         result.ext           = ext;
@@ -1089,19 +1058,12 @@ static void run_test(skiatest::Test test) {
         bool verbose() const override { return FLAGS_veryVerbose; }
     } reporter;
 
-    SkString note;
-    SkString whyBlacklisted = is_blacklisted("_", "tests", "_", test.name);
-    if (!whyBlacklisted.isEmpty()) {
-        note.appendf(" (--blacklist %s)", whyBlacklisted.c_str());
-    }
-
-    auto timerStart = now_ms();
-    if (!FLAGS_dryRun && whyBlacklisted.isEmpty()) {
+    if (!FLAGS_dryRun && !is_blacklisted("_", "tests", "_", test.name)) {
         start("unit", "test", "", test.name);
         GrContextFactory factory;
         test.proc(&reporter, &factory);
     }
-    done(now_ms()-timerStart, "unit", "test", "", test.name, note, "");
+    done("unit", "test", "", test.name);
 }
 
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
@@ -1173,6 +1135,14 @@ int dm_main() {
 
     for (auto& sink : gSinks)
     for (auto&  src : gSrcs) {
+        if (src->veto(sink->flags()) ||
+            is_blacklisted(sink.tag.c_str(), src.tag.c_str(),
+                           src.options.c_str(), src->name().c_str())) {
+            SkAutoTAcquire<SkPODSpinlock> lock(gMutex);
+            gPending--;
+            continue;
+        }
+
         Task task(src, sink);
         if (src->serial() || sink->serial()) {
             serial.push_back(task);
@@ -1198,14 +1168,6 @@ int dm_main() {
     // At this point we're back in single-threaded land.
     sk_tool_utils::release_portable_typefaces();
 
-    if (FLAGS_verbose && gNoteTally.count() > 0) {
-        SkDebugf("\nNote tally:\n");
-        gNoteTally.foreach([](const SkString& note, int* tally) {
-            SkDebugf("%dx\t%s\n", *tally, note.c_str());
-        });
-    }
-
-    SkDebugf("\n");
     if (gFailures.count() > 0) {
         SkDebugf("Failures:\n");
         for (int i = 0; i < gFailures.count(); i++) {