Chromium Code Reviews| Index: dm/DM.cpp |
| diff --git a/dm/DM.cpp b/dm/DM.cpp |
| index 256014e5daabc979a0339b36086a230744700216..b5bf97934d87357de5089521ef1206d7b62a703b 100644 |
| --- a/dm/DM.cpp |
| +++ b/dm/DM.cpp |
| @@ -17,8 +17,10 @@ |
| #include "SkForceLinking.h" |
| #include "SkGraphics.h" |
| #include "SkInstCnt.h" |
| +#include "SkJSONCPP.h" |
| #include "SkMD5.h" |
| #include "SkOSFile.h" |
| +#include "SkTDict.h" |
| #include "SkTHash.h" |
| #include "SkTaskGroup.h" |
| #include "SkThreadUtils.h" |
| @@ -42,6 +44,10 @@ DEFINE_string(blacklist, "", |
| DEFINE_string2(readPath, r, "", "If set check for equality with golden results in this directory."); |
| +DEFINE_string(uninterestingHashesFile, "", |
| + "JSON file containing a list of uninteresting hashes. If a result hashes to something in " |
| + "this list, no image is written for that result."); |
| + |
| __SK_FORCE_IMAGE_DECODER_LINKING; |
| using namespace DM; |
| @@ -137,6 +143,32 @@ static void gather_gold() { |
| /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
| +static SkTDict<bool> gUninterestingHashes(0); |
|
mtklein
2015/04/03 19:58:04
Let's try:
static SkTHashSet<SkString> gUnintere
borenet
2015/04/03 20:26:50
Done.
|
| + |
| +static void gather_uninteresting_hashes() { |
| + if (!FLAGS_uninterestingHashesFile.isEmpty()) { |
| + SkString path(FLAGS_uninterestingHashesFile[0]); |
| + SkAutoTUnref<SkData> json(SkData::NewFromFileName(path.c_str())); |
| + if (!json) { |
| + fail(SkStringPrintf("Couldn't read %s to get the list of uninteresting hashes.", |
| + path.c_str())); |
| + } |
| + |
| + Json::Reader reader; |
| + Json::Value root; |
| + const char* data = (const char*)json->data(); |
| + if (!reader.parse(data, data+json->size(), root)) { |
| + fail(SkStringPrintf("Couldn't parse JSON from %s.", path.c_str())); |
| + } |
| + |
| + for (unsigned i = 0; i < root.size(); i++) { |
| + gUninterestingHashes.set(root[i].asCString(), true); |
| + } |
| + } |
| +} |
| + |
| +/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
| + |
| template <typename T> |
| struct Tagged : public SkAutoTDelete<T> { |
| const char* tag; |
| @@ -435,7 +467,7 @@ struct Task { |
| FLAGS_readPath[0])); |
| } |
| - if (!FLAGS_writePath.isEmpty()) { |
| + if (!FLAGS_writePath.isEmpty() && !gUninterestingHashes.find(md5.c_str(), md5.size())) { |
| const char* ext = task->sink->fileExtension(); |
| if (data->getLength()) { |
| WriteToDisk(*task, md5, ext, data, data->getLength(), NULL); |
| @@ -625,6 +657,7 @@ int dm_main() { |
| start_keepalive(); |
| gather_gold(); |
| + gather_uninteresting_hashes(); |
| gather_srcs(); |
| gather_sinks(); |