diff options
author | 2016-02-03 12:19:11 -0800 | |
---|---|---|
committer | 2016-02-03 12:19:11 -0800 | |
commit | 8673714d75ff1020f78217ff8839f1e18c3591e4 (patch) | |
tree | d073ca2cba40e5ec2eb07dae0d70d4fb58a1d416 /tools | |
parent | 7a76f9c8f4de11e51b3495eec0d76be88a12adfa (diff) |
Treat bad values passed to --images as a fatal error
If an option is passed to --images that is either a non-existent path or
a folder with no images matching the supported types, assume this is
an error and exit, so they can supply a valid path instead.
Share code between DM and nanobench in SkCommonFlags.
nanobench now behaves more like DM - it will check a directory for
images that match the supported extensions.
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1611323004
Review URL: https://codereview.chromium.org/1611323004
Diffstat (limited to 'tools')
-rw-r--r-- | tools/flags/SkCommonFlags.cpp | 47 | ||||
-rw-r--r-- | tools/flags/SkCommonFlags.h | 16 |
2 files changed, 61 insertions, 2 deletions
diff --git a/tools/flags/SkCommonFlags.cpp b/tools/flags/SkCommonFlags.cpp index 2d5a855bf7..e6d269b9e2 100644 --- a/tools/flags/SkCommonFlags.cpp +++ b/tools/flags/SkCommonFlags.cpp @@ -6,6 +6,7 @@ */ #include "SkCommonFlags.h" +#include "SkOSFile.h" DEFINE_bool(cpu, true, "master switch for running CPU-bound work."); @@ -14,7 +15,8 @@ DEFINE_bool(dryRun, false, DEFINE_bool(gpu, true, "master switch for running GPU-bound work."); -DEFINE_string(images, "", "Directory of images to decode."); +DEFINE_string(images, "", "List of images and/or directories to decode. A directory with no images" + " is treated as a fatal error."); DEFINE_string2(match, m, nullptr, "[~][^]substring[$] [...] of GM name to run.\n" @@ -47,5 +49,46 @@ DEFINE_string(key, "", "Space-separated key/value pairs to add to JSON identifying this builder."); DEFINE_string(properties, "", "Space-separated key/value pairs to add to JSON identifying this run."); - DEFINE_bool2(pre_log, p, false, "Log before running each test. May be incomprehensible when threading"); + +bool CollectImages(SkTArray<SkString>* output) { + SkASSERT(output); + + static const char* const exts[] = { + "bmp", "gif", "jpg", "jpeg", "png", "webp", "ktx", "astc", "wbmp", "ico", + "BMP", "GIF", "JPG", "JPEG", "PNG", "WEBP", "KTX", "ASTC", "WBMP", "ICO", +#ifdef SK_CODEC_DECODES_RAW + "arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw", + "ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW", +#endif + }; + + for (int i = 0; i < FLAGS_images.count(); ++i) { + const char* flag = FLAGS_images[i]; + if (!sk_exists(flag)) { + SkDebugf("%s does not exist!\n", flag); + return false; + } + + if (sk_isdir(flag)) { + // If the value passed in is a directory, add all the images + bool foundAnImage = false; + for (const char* ext : exts) { + SkOSFile::Iter it(flag, ext); + SkString file; + while (it.next(&file)) { + foundAnImage = true; + output->push_back() = SkOSPath::Join(flag, file.c_str()); + } + } + if (!foundAnImage) { + SkDebugf("No supported images found in %s!\n", flag); + return false; + } + } else { + // Also add the value if it is a single image + output->push_back() = flag; + } + } + return true; +} diff --git a/tools/flags/SkCommonFlags.h b/tools/flags/SkCommonFlags.h index 127d37328e..8e00e7516c 100644 --- a/tools/flags/SkCommonFlags.h +++ b/tools/flags/SkCommonFlags.h @@ -9,6 +9,8 @@ #define SK_COMMON_FLAGS_H #include "SkCommandLineFlags.h" +#include "SkTArray.h" +#include "SkString.h" DECLARE_bool(cpu); DECLARE_bool(dryRun); @@ -30,4 +32,18 @@ DECLARE_bool(pre_log); DECLARE_string(key); DECLARE_string(properties); +/** + * Helper to assist in collecting image paths from --images. + * + * Populates an array of strings with paths to images to test. + * + * Returns true if each argument to --images is meaningful: + * - If the file/directory does not exist, return false. + * - If a directory passed to --images does not have any supported images (based on file + * type), return false. + * - If a file is passed to --images, assume the user is deliberately testing this image, + * regardless of file type. + */ +bool CollectImages(SkTArray<SkString>*); + #endif |