Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(146)

Side by Side Diff: dm/DM.cpp

Issue 802793002: Add image decoding mode to DM. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: transparent, build fixes Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | dm/DMImageTask.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Main binary for DM. 1 // Main binary for DM.
2 // For a high-level overview, please see dm/README. 2 // For a high-level overview, please see dm/README.
3 3
4 #include "CrashHandler.h" 4 #include "CrashHandler.h"
5 #include "LazyDecodeBitmap.h" 5 #include "LazyDecodeBitmap.h"
6 #include "SkCommonFlags.h" 6 #include "SkCommonFlags.h"
7 #include "SkForceLinking.h" 7 #include "SkForceLinking.h"
8 #include "SkGraphics.h" 8 #include "SkGraphics.h"
9 #include "SkOSFile.h" 9 #include "SkOSFile.h"
10 #include "SkPicture.h" 10 #include "SkPicture.h"
11 #include "SkString.h" 11 #include "SkString.h"
12 #include "SkTaskGroup.h" 12 #include "SkTaskGroup.h"
13 #include "Test.h" 13 #include "Test.h"
14 #include "gm.h" 14 #include "gm.h"
15 #include "sk_tool_utils.h" 15 #include "sk_tool_utils.h"
16 #include "sk_tool_utils_flags.h" 16 #include "sk_tool_utils_flags.h"
17 17
18 #include "DMCpuGMTask.h" 18 #include "DMCpuGMTask.h"
19 #include "DMGpuGMTask.h" 19 #include "DMGpuGMTask.h"
20 #include "DMGpuSupport.h" 20 #include "DMGpuSupport.h"
21 #include "DMImageTask.h"
21 #include "DMJsonWriter.h" 22 #include "DMJsonWriter.h"
22 #include "DMPDFTask.h" 23 #include "DMPDFTask.h"
23 #include "DMReporter.h" 24 #include "DMReporter.h"
24 #include "DMSKPTask.h" 25 #include "DMSKPTask.h"
25 #include "DMTask.h" 26 #include "DMTask.h"
26 #include "DMTaskRunner.h" 27 #include "DMTaskRunner.h"
27 #include "DMTestTask.h" 28 #include "DMTestTask.h"
28 29
29 #ifdef SK_BUILD_POPPLER 30 #ifdef SK_BUILD_POPPLER
30 # include "SkPDFRasterizer.h" 31 # include "SkPDFRasterizer.h"
(...skipping 12 matching lines...) Expand all
43 using skiatest::Test; 44 using skiatest::Test;
44 using skiatest::TestRegistry; 45 using skiatest::TestRegistry;
45 46
46 static const char kGpuAPINameGL[] = "gl"; 47 static const char kGpuAPINameGL[] = "gl";
47 static const char kGpuAPINameGLES[] = "gles"; 48 static const char kGpuAPINameGLES[] = "gles";
48 49
49 DEFINE_bool(gms, true, "Run GMs?"); 50 DEFINE_bool(gms, true, "Run GMs?");
50 DEFINE_bool(tests, true, "Run tests?"); 51 DEFINE_bool(tests, true, "Run tests?");
51 DEFINE_bool(reportUsedChars, false, "Output test font construction data to be pa sted into" 52 DEFINE_bool(reportUsedChars, false, "Output test font construction data to be pa sted into"
52 " create_test_font.cpp."); 53 " create_test_font.cpp.");
54 DEFINE_string(images, "resources", "Path to directory containing images to decod e.");
53 55
54 __SK_FORCE_IMAGE_DECODER_LINKING; 56 __SK_FORCE_IMAGE_DECODER_LINKING;
55 57
56 // "FooBar" -> "foobar". Obviously, ASCII only. 58 // "FooBar" -> "foobar". Obviously, ASCII only.
57 static SkString lowercase(SkString s) { 59 static SkString lowercase(SkString s) {
58 for (size_t i = 0; i < s.size(); i++) { 60 for (size_t i = 0; i < s.size(); i++) {
59 s[i] = tolower(s[i]); 61 s[i] = tolower(s[i]);
60 } 62 }
61 return s; 63 return s;
62 } 64 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 for (int i = 0; i < tests.count(); i++) { 114 for (int i = 0; i < tests.count(); i++) {
113 SkAutoTDelete<Test> test(tests[i](NULL)); 115 SkAutoTDelete<Test> test(tests[i](NULL));
114 if (test->isGPUTest()) { 116 if (test->isGPUTest()) {
115 tasks->add(SkNEW_ARGS(DM::GpuTestTask, (reporter, tasks, tests[i]))) ; 117 tasks->add(SkNEW_ARGS(DM::GpuTestTask, (reporter, tasks, tests[i]))) ;
116 } else { 118 } else {
117 tasks->add(SkNEW_ARGS(DM::CpuTestTask, (reporter, tasks, tests[i]))) ; 119 tasks->add(SkNEW_ARGS(DM::CpuTestTask, (reporter, tasks, tests[i]))) ;
118 } 120 }
119 } 121 }
120 } 122 }
121 123
122 static void find_skps(SkTArray<SkString>* skps) { 124 static void find_files(const char* dir,
123 if (FLAGS_skps.isEmpty()) { 125 const char* suffixes[],
126 size_t num_suffixes,
127 SkTArray<SkString>* files) {
128 if (0 == strcmp(dir, "")) {
124 return; 129 return;
125 } 130 }
126 131
127 SkOSFile::Iter it(FLAGS_skps[0], ".skp");
128 SkString filename; 132 SkString filename;
129 while (it.next(&filename)) { 133 for (size_t i = 0; i < num_suffixes; i++) {
130 if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, filename.c_str())) { 134 SkOSFile::Iter it(dir, suffixes[i]);
131 skps->push_back(SkOSPath::Join(FLAGS_skps[0], filename.c_str())); 135 while (it.next(&filename)) {
136 if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, filename.c_str())) {
137 files->push_back(SkOSPath::Join(dir, filename.c_str()));
138 }
132 } 139 }
133 } 140 }
134 } 141 }
135 142
136 static void kick_off_skps(const SkTArray<SkString>& skps, 143 static void kick_off_skps(const SkTArray<SkString>& skps,
137 DM::Reporter* reporter, 144 DM::Reporter* reporter,
138 DM::TaskRunner* tasks) { 145 DM::TaskRunner* tasks) {
139 for (int i = 0; i < skps.count(); ++i) { 146 for (int i = 0; i < skps.count(); ++i) {
140 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(skps[i].c_str())); 147 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(skps[i].c_str()));
141 if (stream.get() == NULL) { 148 if (stream.get() == NULL) {
142 SkDebugf("Could not read %s.\n", skps[i].c_str()); 149 SkDebugf("Could not read %s.\n", skps[i].c_str());
143 exit(1); 150 exit(1);
144 } 151 }
145 SkAutoTUnref<SkPicture> pic( 152 SkAutoTUnref<SkPicture> pic(
146 SkPicture::CreateFromStream(stream.get(), &sk_tools::LazyDecodeB itmap)); 153 SkPicture::CreateFromStream(stream.get(), &sk_tools::LazyDecodeB itmap));
147 if (pic.get() == NULL) { 154 if (pic.get() == NULL) {
148 SkDebugf("Could not read %s as an SkPicture.\n", skps[i].c_str()); 155 SkDebugf("Could not read %s as an SkPicture.\n", skps[i].c_str());
149 exit(1); 156 exit(1);
150 } 157 }
151 158
152 SkString filename = SkOSPath::Basename(skps[i].c_str()); 159 SkString filename = SkOSPath::Basename(skps[i].c_str());
153 tasks->add(SkNEW_ARGS(DM::SKPTask, (reporter, tasks, pic, filename))); 160 tasks->add(SkNEW_ARGS(DM::SKPTask, (reporter, tasks, pic, filename)));
154 tasks->add(SkNEW_ARGS(DM::PDFTask, (reporter, tasks, pic, filename, RAST ERIZE_PDF_PROC))); 161 tasks->add(SkNEW_ARGS(DM::PDFTask, (reporter, tasks, pic, filename, RAST ERIZE_PDF_PROC)));
155 } 162 }
156 } 163 }
157 164
165 static void kick_off_images(const SkTArray<SkString>& images,
166 DM::Reporter* reporter,
167 DM::TaskRunner* tasks) {
168 for (int i = 0; i < images.count(); i++) {
169 SkAutoTUnref<SkData> image(SkData::NewFromFileName(images[i].c_str()));
170 if (!image) {
171 SkDebugf("Could not read %s.\n", images[i].c_str());
172 exit(1);
173 }
174 SkString filename = SkOSPath::Basename(images[i].c_str());
175 tasks->add(SkNEW_ARGS(DM::ImageTask, (reporter, tasks, image, filename)) );
176 tasks->add(SkNEW_ARGS(DM::ImageTask, (reporter, tasks, image, filename, 5/*subsets*/)));
177 }
178 }
179
180
158 static void report_failures(const SkTArray<SkString>& failures) { 181 static void report_failures(const SkTArray<SkString>& failures) {
159 if (failures.count() == 0) { 182 if (failures.count() == 0) {
160 return; 183 return;
161 } 184 }
162 185
163 SkDebugf("Failures:\n"); 186 SkDebugf("Failures:\n");
164 for (int i = 0; i < failures.count(); i++) { 187 for (int i = 0; i < failures.count(); i++) {
165 SkDebugf(" %s\n", failures[i].c_str()); 188 SkDebugf(" %s\n", failures[i].c_str());
166 } 189 }
167 SkDebugf("%d failures.\n", failures.count()); 190 SkDebugf("%d failures.\n", failures.count());
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 SkTDArray<GMRegistry::Factory> gms; 233 SkTDArray<GMRegistry::Factory> gms;
211 if (FLAGS_gms) { 234 if (FLAGS_gms) {
212 append_matching_factories<GM>(GMRegistry::Head(), &gms); 235 append_matching_factories<GM>(GMRegistry::Head(), &gms);
213 } 236 }
214 237
215 SkTDArray<TestRegistry::Factory> tests; 238 SkTDArray<TestRegistry::Factory> tests;
216 if (FLAGS_tests) { 239 if (FLAGS_tests) {
217 append_matching_factories<Test>(TestRegistry::Head(), &tests); 240 append_matching_factories<Test>(TestRegistry::Head(), &tests);
218 } 241 }
219 242
243
220 SkTArray<SkString> skps; 244 SkTArray<SkString> skps;
221 find_skps(&skps); 245 if (!FLAGS_skps.isEmpty()) {
246 const char* suffixes[] = { "skp" };
247 find_files(FLAGS_skps[0], suffixes, SK_ARRAY_COUNT(suffixes), &skps);
248 }
222 249
223 SkDebugf("%d GMs x %d configs, %d tests, %d pictures\n", 250 SkTArray<SkString> images;
224 gms.count(), configs.count(), tests.count(), skps.count()); 251 if (!FLAGS_images.isEmpty()) {
252 const char* suffixes[] = { "bmp", "gif", "jpg", "png", "webp", "ktx", "a stc" };
253 find_files(FLAGS_images[0], suffixes, SK_ARRAY_COUNT(suffixes), &images) ;
254 }
255
256 SkDebugf("%d GMs x %d configs, %d tests, %d pictures, %d images\n",
257 gms.count(), configs.count(), tests.count(), skps.count(), images.c ount());
225 DM::Reporter reporter; 258 DM::Reporter reporter;
226 259
227 DM::TaskRunner tasks; 260 DM::TaskRunner tasks;
228 kick_off_tests(tests, &reporter, &tasks); 261 kick_off_tests(tests, &reporter, &tasks);
229 kick_off_gms(gms, configs, gpuAPI, &reporter, &tasks); 262 kick_off_gms(gms, configs, gpuAPI, &reporter, &tasks);
230 kick_off_skps(skps, &reporter, &tasks); 263 kick_off_skps(skps, &reporter, &tasks);
264 kick_off_images(images, &reporter, &tasks);
231 tasks.wait(); 265 tasks.wait();
232 266
233 DM::JsonWriter::DumpJson(); 267 DM::JsonWriter::DumpJson();
234 268
235 SkDebugf("\n"); 269 SkDebugf("\n");
236 #ifdef SK_DEBUG 270 #ifdef SK_DEBUG
237 if (FLAGS_portableFonts && FLAGS_reportUsedChars) { 271 if (FLAGS_portableFonts && FLAGS_reportUsedChars) {
238 sk_tool_utils::report_used_chars(); 272 sk_tool_utils::report_used_chars();
239 } 273 }
240 #endif 274 #endif
241 275
242 SkTArray<SkString> failures; 276 SkTArray<SkString> failures;
243 reporter.getFailures(&failures); 277 reporter.getFailures(&failures);
244 report_failures(failures); 278 report_failures(failures);
245 return failures.count() > 0; 279 return failures.count() > 0;
246 } 280 }
247 281
248 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 282 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
249 int main(int argc, char** argv) { 283 int main(int argc, char** argv) {
250 SkCommandLineFlags::Parse(argc, argv); 284 SkCommandLineFlags::Parse(argc, argv);
251 return dm_main(); 285 return dm_main();
252 } 286 }
253 #endif 287 #endif
OLDNEW
« no previous file with comments | « no previous file | dm/DMImageTask.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698