Home | History | Annotate | Download | only in flags
      1 /*
      2  * Copyright 2014 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkCommonFlags.h"
      9 #include "SkOSFile.h"
     10 
     11 DEFINE_bool(cpu, true, "master switch for running CPU-bound work.");
     12 
     13 DEFINE_bool(dryRun, false,
     14             "just print the tests that would be run, without actually running them.");
     15 
     16 DEFINE_bool(gpu, true, "master switch for running GPU-bound work.");
     17 
     18 DEFINE_string(images, "", "List of images and/or directories to decode. A directory with no images"
     19                           " is treated as a fatal error.");
     20 
     21 DEFINE_string2(match, m, nullptr,
     22                "[~][^]substring[$] [...] of GM name to run.\n"
     23                "Multiple matches may be separated by spaces.\n"
     24                "~ causes a matching GM to always be skipped\n"
     25                "^ requires the start of the GM to match\n"
     26                "$ requires the end of the GM to match\n"
     27                "^ and $ requires an exact match\n"
     28                "If a GM does not match any list entry,\n"
     29                "it is skipped unless some list entry starts with ~");
     30 
     31 DEFINE_bool2(quiet, q, false, "if true, don't print status updates.");
     32 
     33 DEFINE_bool(preAbandonGpuContext, false, "Abandons the GrContext before running the test.");
     34 
     35 DEFINE_bool(abandonGpuContext, false, "Abandon the GrContext after running each test.");
     36 
     37 DEFINE_string(skps, "skps", "Directory to read skps from.");
     38 
     39 DEFINE_int32(threads, -1, "Run threadsafe tests on a threadpool with this many extra threads, "
     40                           "defaulting to one extra thread per core.");
     41 
     42 DEFINE_bool2(verbose, v, false, "enable verbose output from the test driver.");
     43 
     44 DEFINE_bool2(veryVerbose, V, false, "tell individual tests to be verbose.");
     45 
     46 DEFINE_string2(writePath, w, "", "If set, write bitmaps here as .pngs.");
     47 
     48 DEFINE_string(key, "",
     49               "Space-separated key/value pairs to add to JSON identifying this builder.");
     50 DEFINE_string(properties, "",
     51               "Space-separated key/value pairs to add to JSON identifying this run.");
     52 DEFINE_bool2(pre_log, p, false, "Log before running each test. May be incomprehensible when threading");
     53 
     54 bool CollectImages(SkTArray<SkString>* output) {
     55     SkASSERT(output);
     56 
     57     static const char* const exts[] = {
     58         "bmp", "gif", "jpg", "jpeg", "png", "webp", "ktx", "astc", "wbmp", "ico",
     59         "BMP", "GIF", "JPG", "JPEG", "PNG", "WEBP", "KTX", "ASTC", "WBMP", "ICO",
     60 #ifdef SK_CODEC_DECODES_RAW
     61         "arw", "cr2", "dng", "nef", "nrw", "orf", "raf", "rw2", "pef", "srw",
     62         "ARW", "CR2", "DNG", "NEF", "NRW", "ORF", "RAF", "RW2", "PEF", "SRW",
     63 #endif
     64     };
     65 
     66     for (int i = 0; i < FLAGS_images.count(); ++i) {
     67         const char* flag = FLAGS_images[i];
     68         if (!sk_exists(flag)) {
     69             SkDebugf("%s does not exist!\n", flag);
     70             return false;
     71         }
     72 
     73         if (sk_isdir(flag)) {
     74             // If the value passed in is a directory, add all the images
     75             bool foundAnImage = false;
     76             for (const char* ext : exts) {
     77                 SkOSFile::Iter it(flag, ext);
     78                 SkString file;
     79                 while (it.next(&file)) {
     80                     foundAnImage = true;
     81                     output->push_back() = SkOSPath::Join(flag, file.c_str());
     82                 }
     83             }
     84             if (!foundAnImage) {
     85                 SkDebugf("No supported images found in %s!\n", flag);
     86                 return false;
     87             }
     88         } else {
     89             // Also add the value if it is a single image
     90             output->push_back() = flag;
     91         }
     92     }
     93     return true;
     94 }
     95