int tool_main(int argc, char** argv) { SetupCrashHandler(); SkAutoGraphics ag; SkCommandLineFlags::Parse(argc, argv); if (FLAGS_dryRun) { FLAGS_verbose = true; } #if SK_ENABLE_INST_COUNT gPrintInstCount = FLAGS_leaks; #endif SkTArray<SkString> configs; for (int i = 0; i < FLAGS_config.count(); i++) { SkStrSplit(FLAGS_config[i], ", ", &configs); } SkTDArray<GMRegistry::Factory> gms; SkAutoTDelete<DM::Expectations> expectations(SkNEW(DM::NoExpectations)); if (FLAGS_gms) { append_matching_factories<GM>(GMRegistry::Head(), &gms); if (FLAGS_expectations.count() > 0) { const char* path = FLAGS_expectations[0]; if (sk_isdir(path)) { expectations.reset(SkNEW_ARGS(DM::WriteTask::Expectations, (path))); } else { expectations.reset(SkNEW_ARGS(DM::JsonExpectations, (path))); } } } SkTDArray<BenchRegistry::Factory> benches; if (FLAGS_benches) { append_matching_factories<Benchmark>(BenchRegistry::Head(), &benches); } SkTDArray<TestRegistry::Factory> tests; if (FLAGS_tests) { append_matching_factories<Test>(TestRegistry::Head(), &tests); } SkDebugf("(%d GMs, %d benches) x %d configs, %d tests\n", gms.count(), benches.count(), configs.count(), tests.count()); DM::Reporter reporter; DM::TaskRunner tasks(FLAGS_threads, FLAGS_gpuThreads); kick_off_gms(gms, configs, *expectations, &reporter, &tasks); kick_off_benches(benches, configs, &reporter, &tasks); kick_off_tests(tests, &reporter, &tasks); kick_off_skps(&reporter, &tasks); tasks.wait(); SkDebugf("\n"); SkTArray<SkString> failures; reporter.getFailures(&failures); report_failures(failures); return failures.count() > 0; }
int dm_main() { SetupCrashHandler(); SkAutoGraphics ag; SkTaskGroup::Enabler enabled(FLAGS_threads); if (FLAGS_dryRun || FLAGS_veryVerbose) { FLAGS_verbose = true; } #if SK_ENABLE_INST_COUNT gPrintInstCount = FLAGS_leaks; #endif SkTArray<SkString> configs; for (int i = 0; i < FLAGS_config.count(); i++) { SkStrSplit(FLAGS_config[i], ", ", &configs); } GrGLStandard gpuAPI = get_gl_standard(); SkTDArray<GMRegistry::Factory> gms; if (FLAGS_gms) { append_matching_factories<GM>(GMRegistry::Head(), &gms); } SkTDArray<TestRegistry::Factory> tests; if (FLAGS_tests) { append_matching_factories<Test>(TestRegistry::Head(), &tests); } SkTArray<SkString> skps; find_skps(&skps); SkDebugf("%d GMs x %d configs, %d tests, %d pictures\n", gms.count(), configs.count(), tests.count(), skps.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); tasks.wait(); DM::JsonWriter::DumpJson(); SkDebugf("\n"); #ifdef SK_DEBUG if (FLAGS_portableFonts && FLAGS_reportUsedChars) { sk_tool_utils::report_used_chars(); } #endif SkTArray<SkString> failures; reporter.getFailures(&failures); report_failures(failures); return failures.count() > 0; }
static void report_failures(const DM::Reporter& reporter) { SkTArray<SkString> failures; reporter.getFailures(&failures); if (failures.count() == 0) { return; } SkDebugf("Failures:\n"); for (int i = 0; i < failures.count(); i++) { SkDebugf(" %s\n", failures[i].c_str()); } }