aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar scroggo <scroggo@google.com>2016-02-03 12:19:11 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-03 12:19:11 -0800
commit8673714d75ff1020f78217ff8839f1e18c3591e4 (patch)
treed073ca2cba40e5ec2eb07dae0d70d4fb58a1d416 /tools
parent7a76f9c8f4de11e51b3495eec0d76be88a12adfa (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.cpp47
-rw-r--r--tools/flags/SkCommonFlags.h16
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