trim DM fat
- 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
This commit is contained in:
parent
dcceacf574
commit
3eed7ddb25
112
dm/DM.cpp
112
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 int32_t gPending;
|
||||
static SkTArray<SkString> gRunning;
|
||||
|
||||
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 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++) {
|
||||
|
Loading…
Reference in New Issue
Block a user