Chromium Code Reviews| Index: dm/DM.cpp |
| diff --git a/dm/DM.cpp b/dm/DM.cpp |
| index 52c86d5f6880dc6f79f0e759808ec1d021a84f07..bda9995e35d20cfec908a126b7b2a30c62bacd0c 100644 |
| --- a/dm/DM.cpp |
| +++ b/dm/DM.cpp |
| @@ -18,6 +18,7 @@ |
| #include "DMCpuGMTask.h" |
| #include "DMGpuGMTask.h" |
| #include "DMGpuSupport.h" |
| +#include "DMImageTask.h" |
| #include "DMJsonWriter.h" |
| #include "DMPDFTask.h" |
| #include "DMReporter.h" |
| @@ -50,6 +51,7 @@ DEFINE_bool(gms, true, "Run GMs?"); |
| DEFINE_bool(tests, true, "Run tests?"); |
| DEFINE_bool(reportUsedChars, false, "Output test font construction data to be pasted into" |
| " create_test_font.cpp."); |
| +DEFINE_string(images, "resources", "Path to directory containing images to decode."); |
| __SK_FORCE_IMAGE_DECODER_LINKING; |
| @@ -119,16 +121,21 @@ static void kick_off_tests(const SkTDArray<TestRegistry::Factory>& tests, |
| } |
| } |
| -static void find_skps(SkTArray<SkString>* skps) { |
| - if (FLAGS_skps.isEmpty()) { |
| +static void find_files(const char* dir, |
| + const char* suffixes[], |
| + size_t num_suffixes, |
| + SkTArray<SkString>* files) { |
| + if (0 == strcmp(dir, "")) { |
| return; |
| } |
| - SkOSFile::Iter it(FLAGS_skps[0], ".skp"); |
| SkString filename; |
| - while (it.next(&filename)) { |
| - if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, filename.c_str())) { |
| - skps->push_back(SkOSPath::Join(FLAGS_skps[0], filename.c_str())); |
| + for (size_t i = 0; i < num_suffixes; i++) { |
| + SkOSFile::Iter it(dir, suffixes[i]); |
| + while (it.next(&filename)) { |
| + if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, filename.c_str())) { |
| + files->push_back(SkOSPath::Join(dir, filename.c_str())); |
| + } |
| } |
| } |
| } |
| @@ -155,6 +162,22 @@ static void kick_off_skps(const SkTArray<SkString>& skps, |
| } |
| } |
| +static void kick_off_images(const SkTArray<SkString>& images, |
| + DM::Reporter* reporter, |
| + DM::TaskRunner* tasks) { |
| + for (int i = 0; i < images.count(); i++) { |
| + SkAutoTUnref<SkData> image(SkData::NewFromFileName(images[i].c_str())); |
| + if (!image) { |
| + SkDebugf("Could not read %s.\n", images[i].c_str()); |
| + exit(1); |
|
scroggo
2014/12/12 23:40:59
I know we already do this for SKPs, but why do we
mtklein
2014/12/13 00:32:23
Mostly, if we can list the file but not read it, y
|
| + } |
| + SkString filename = SkOSPath::Basename(images[i].c_str()); |
| + tasks->add(SkNEW_ARGS(DM::ImageTask, (reporter, tasks, image, filename))); |
| + tasks->add(SkNEW_ARGS(DM::ImageTask, (reporter, tasks, image, filename, 5/*subsets*/))); |
| + } |
| +} |
| + |
| + |
| static void report_failures(const SkTArray<SkString>& failures) { |
| if (failures.count() == 0) { |
| return; |
| @@ -217,17 +240,28 @@ int dm_main() { |
| append_matching_factories<Test>(TestRegistry::Head(), &tests); |
| } |
| + |
| SkTArray<SkString> skps; |
| - find_skps(&skps); |
| + if (!FLAGS_skps.isEmpty()) { |
| + const char* suffixes[] = { "skp" }; |
| + find_files(FLAGS_skps[0], suffixes, SK_ARRAY_COUNT(suffixes), &skps); |
| + } |
| + |
| + SkTArray<SkString> images; |
| + if (!FLAGS_images.isEmpty()) { |
| + const char* suffixes[] = { "bmp", "gif", "jpg", "png", "webp", "ktx", "astc" }; |
|
scroggo
2014/12/12 23:40:59
Ultimately we'll want more types than this (wbmp,
mtklein
2014/12/13 00:32:23
Hmm. There's junk in resources that's not images
|
| + find_files(FLAGS_images[0], suffixes, SK_ARRAY_COUNT(suffixes), &images); |
| + } |
| - SkDebugf("%d GMs x %d configs, %d tests, %d pictures\n", |
| - gms.count(), configs.count(), tests.count(), skps.count()); |
| + SkDebugf("%d GMs x %d configs, %d tests, %d pictures, %d images\n", |
| + gms.count(), configs.count(), tests.count(), skps.count(), images.count()); |
| DM::Reporter reporter; |
| DM::TaskRunner tasks; |
| kick_off_tests(tests, &reporter, &tasks); |
| kick_off_gms(gms, configs, gpuAPI, &reporter, &tasks); |
| kick_off_skps(skps, &reporter, &tasks); |
| + kick_off_images(images, &reporter, &tasks); |
| tasks.wait(); |
| DM::JsonWriter::DumpJson(); |