OLD | NEW |
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 "GrContext.h" | 4 #include "GrContext.h" |
5 #include "GrContextFactory.h" | 5 #include "GrContextFactory.h" |
6 #include "SkBenchmark.h" | 6 #include "SkBenchmark.h" |
7 #include "SkCommandLineFlags.h" | 7 #include "SkCommandLineFlags.h" |
8 #include "SkForceLinking.h" | 8 #include "SkForceLinking.h" |
9 #include "SkGraphics.h" | 9 #include "SkGraphics.h" |
10 #include "SkString.h" | 10 #include "SkString.h" |
11 #include "Test.h" | 11 #include "Test.h" |
12 #include "gm.h" | 12 #include "gm.h" |
13 | 13 |
14 #include "DMBenchTask.h" | 14 #include "DMBenchTask.h" |
15 #include "DMCpuTask.h" | 15 #include "DMCpuGMTask.h" |
16 #include "DMGpuTask.h" | 16 #include "DMGpuGMTask.h" |
17 #include "DMReporter.h" | 17 #include "DMReporter.h" |
18 #include "DMTask.h" | 18 #include "DMTask.h" |
19 #include "DMTaskRunner.h" | 19 #include "DMTaskRunner.h" |
20 #include "DMTestTask.h" | 20 #include "DMTestTask.h" |
21 #include "DMWriteTask.h" | 21 #include "DMWriteTask.h" |
22 | 22 |
23 #include <string.h> | 23 #include <string.h> |
24 | 24 |
25 using skiagm::GM; | 25 using skiagm::GM; |
26 using skiagm::GMRegistry; | 26 using skiagm::GMRegistry; |
27 using skiatest::Test; | 27 using skiatest::Test; |
28 using skiatest::TestRegistry; | 28 using skiatest::TestRegistry; |
29 | 29 |
30 DEFINE_int32(threads, -1, "Threads for CPU work. Default NUM_CPUS."); | 30 DEFINE_int32(threads, -1, "Threads for CPU work. Default NUM_CPUS."); |
| 31 DEFINE_int32(gpuThreads, 1, "Threads for GPU work."); |
31 DEFINE_string2(expectations, r, "", | 32 DEFINE_string2(expectations, r, "", |
32 "If a directory, compare generated images against images under th
is path. " | 33 "If a directory, compare generated images against images under th
is path. " |
33 "If a file, compare generated images against JSON expectations at
this path."); | 34 "If a file, compare generated images against JSON expectations at
this path."); |
34 DEFINE_string2(resources, i, "resources", "Path to resources directory."); | 35 DEFINE_string2(resources, i, "resources", "Path to resources directory."); |
35 DEFINE_string(match, "", "[~][^]substring[$] [...] of GM name to run.\n" | 36 DEFINE_string(match, "", "[~][^]substring[$] [...] of GM name to run.\n" |
36 "Multiple matches may be separated by spaces.\n" | 37 "Multiple matches may be separated by spaces.\n" |
37 "~ causes a matching GM to always be skipped\n" | 38 "~ causes a matching GM to always be skipped\n" |
38 "^ requires the start of the GM to match\n" | 39 "^ requires the start of the GM to match\n" |
39 "$ requires the end of the GM to match\n" | 40 "$ requires the end of the GM to match\n" |
40 "^ and $ requires an exact match\n" | 41 "^ and $ requires an exact match\n" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 const DM::Expectations& expectations, | 80 const DM::Expectations& expectations, |
80 DM::Reporter* reporter, | 81 DM::Reporter* reporter, |
81 DM::TaskRunner* tasks) { | 82 DM::TaskRunner* tasks) { |
82 #define START(name, type, ...)
\ | 83 #define START(name, type, ...)
\ |
83 if (lowercase(configs[j]).equals(name)) {
\ | 84 if (lowercase(configs[j]).equals(name)) {
\ |
84 tasks->add(SkNEW_ARGS(DM::type,
\ | 85 tasks->add(SkNEW_ARGS(DM::type,
\ |
85 (name, reporter, tasks, expectations, gms[i], ## __VA_ARGS__
))); \ | 86 (name, reporter, tasks, expectations, gms[i], ## __VA_ARGS__
))); \ |
86 } | 87 } |
87 for (int i = 0; i < gms.count(); i++) { | 88 for (int i = 0; i < gms.count(); i++) { |
88 for (int j = 0; j < configs.count(); j++) { | 89 for (int j = 0; j < configs.count(); j++) { |
89 START("565", CpuTask, kRGB_565_SkColorType); | 90 START("565", CpuGMTask, kRGB_565_SkColorType); |
90 START("8888", CpuTask, kPMColor_SkColorType); | 91 START("8888", CpuGMTask, kPMColor_SkColorType); |
91 START("gpu", GpuTask, native, 0); | 92 START("gpu", GpuGMTask, native, 0); |
92 START("msaa4", GpuTask, native, 4); | 93 START("msaa4", GpuGMTask, native, 4); |
93 START("msaa16", GpuTask, native, 16); | 94 START("msaa16", GpuGMTask, native, 16); |
94 START("gpunull", GpuTask, null, 0); | 95 START("gpunull", GpuGMTask, null, 0); |
95 START("gpudebug", GpuTask, debug, 0); | 96 START("gpudebug", GpuGMTask, debug, 0); |
96 START("angle", GpuTask, angle, 0); | 97 START("angle", GpuGMTask, angle, 0); |
97 START("mesa", GpuTask, mesa, 0); | 98 START("mesa", GpuGMTask, mesa, 0); |
98 } | 99 } |
99 } | 100 } |
100 #undef START | 101 #undef START |
101 } | 102 } |
102 | 103 |
103 static void kick_off_benches(const SkTDArray<BenchRegistry::Factory>& benches, | 104 static void kick_off_benches(const SkTDArray<BenchRegistry::Factory>& benches, |
104 const SkTArray<SkString>& configs, | 105 const SkTArray<SkString>& configs, |
105 DM::Reporter* reporter, | 106 DM::Reporter* reporter, |
106 DM::TaskRunner* tasks) { | 107 DM::TaskRunner* tasks) { |
107 #define START(name, type, ...)
\ | 108 #define START(name, type, ...)
\ |
(...skipping 14 matching lines...) Expand all Loading... |
122 START("mesa", GpuBenchTask, mesa, 0); | 123 START("mesa", GpuBenchTask, mesa, 0); |
123 } | 124 } |
124 } | 125 } |
125 #undef START | 126 #undef START |
126 } | 127 } |
127 | 128 |
128 static void kick_off_tests(const SkTDArray<TestRegistry::Factory>& tests, | 129 static void kick_off_tests(const SkTDArray<TestRegistry::Factory>& tests, |
129 DM::Reporter* reporter, | 130 DM::Reporter* reporter, |
130 DM::TaskRunner* tasks) { | 131 DM::TaskRunner* tasks) { |
131 for (int i = 0; i < tests.count(); i++) { | 132 for (int i = 0; i < tests.count(); i++) { |
132 tasks->add(SkNEW_ARGS(DM::TestTask, (reporter, tasks, tests[i]))); | 133 SkAutoTDelete<Test> test(tests[i](NULL)); |
| 134 if (test->isGPUTest()) { |
| 135 tasks->add(SkNEW_ARGS(DM::GpuTestTask, (reporter, tasks, tests[i])))
; |
| 136 } else { |
| 137 tasks->add(SkNEW_ARGS(DM::CpuTestTask, (reporter, tasks, tests[i])))
; |
| 138 } |
133 } | 139 } |
134 } | 140 } |
135 | 141 |
136 static void report_failures(const DM::Reporter& reporter) { | 142 static void report_failures(const DM::Reporter& reporter) { |
137 SkTArray<SkString> failures; | 143 SkTArray<SkString> failures; |
138 reporter.getFailures(&failures); | 144 reporter.getFailures(&failures); |
139 | 145 |
140 if (failures.count() == 0) { | 146 if (failures.count() == 0) { |
141 return; | 147 return; |
142 } | 148 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 } | 200 } |
195 | 201 |
196 SkTDArray<TestRegistry::Factory> tests; | 202 SkTDArray<TestRegistry::Factory> tests; |
197 if (FLAGS_tests) { | 203 if (FLAGS_tests) { |
198 append_matching_factories<Test>(TestRegistry::Head(), &tests); | 204 append_matching_factories<Test>(TestRegistry::Head(), &tests); |
199 } | 205 } |
200 | 206 |
201 SkDebugf("(%d GMs, %d benches) x %d configs, %d tests\n", | 207 SkDebugf("(%d GMs, %d benches) x %d configs, %d tests\n", |
202 gms.count(), benches.count(), configs.count(), tests.count()); | 208 gms.count(), benches.count(), configs.count(), tests.count()); |
203 DM::Reporter reporter; | 209 DM::Reporter reporter; |
204 DM::TaskRunner tasks(FLAGS_threads); | 210 DM::TaskRunner tasks(FLAGS_threads, FLAGS_gpuThreads); |
205 kick_off_gms(gms, configs, *expectations, &reporter, &tasks); | 211 kick_off_gms(gms, configs, *expectations, &reporter, &tasks); |
206 kick_off_benches(benches, configs, &reporter, &tasks); | 212 kick_off_benches(benches, configs, &reporter, &tasks); |
207 kick_off_tests(tests, &reporter, &tasks); | 213 kick_off_tests(tests, &reporter, &tasks); |
208 tasks.wait(); | 214 tasks.wait(); |
209 | 215 |
210 SkDebugf("\n"); | 216 SkDebugf("\n"); |
211 report_failures(reporter); | 217 report_failures(reporter); |
212 | 218 |
213 SkGraphics::Term(); | 219 SkGraphics::Term(); |
214 | 220 |
215 return reporter.failed() > 0; | 221 return reporter.failed() > 0; |
216 } | 222 } |
217 | 223 |
218 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 224 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
219 int main(int argc, char** argv) { | 225 int main(int argc, char** argv) { |
220 return tool_main(argc, argv); | 226 return tool_main(argc, argv); |
221 } | 227 } |
222 #endif | 228 #endif |
OLD | NEW |