1d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com// Main binary for DM. 2d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com// For a high-level overview, please see dm/README. 3d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 4f168b86d7fafc5c20c87bebc6fd393cb17e120catfarina#include "CrashHandler.h" 572ebb9f1dc1ed4d64127b02fed93446b278069d1mtklein#include "LazyDecodeBitmap.h" 617f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclark#include "SkCommonFlags.h" 7d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkForceLinking.h" 8d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "SkGraphics.h" 91d0f1642e8bc0fda200972926e2eaa99744e4d93mtklein#include "SkOSFile.h" 1090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org#include "SkPicture.h" 11d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.com#include "SkString.h" 12406654be7a930b484159f5bca107d3b11d8a9edemtklein#include "SkTaskGroup.h" 130dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#include "Test.h" 14d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "gm.h" 15992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark#include "sk_tool_utils.h" 16992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark#include "sk_tool_utils_flags.h" 17d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 18ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org#include "DMCpuGMTask.h" 19ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org#include "DMGpuGMTask.h" 20787227d3560bd8021394b76ada2cb184ecf5c919commit-bot@chromium.org#include "DMGpuSupport.h" 2130bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein#include "DMPDFTask.h" 22d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMReporter.h" 2390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org#include "DMSKPTask.h" 24d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMTask.h" 25d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com#include "DMTaskRunner.h" 260dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#include "DMTestTask.h" 2799589af4e333422639d7e873207dd323fdd6e808commit-bot@chromium.org#include "DMWriteTask.h" 28d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 2930bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein#ifdef SK_BUILD_POPPLER 3030bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein# include "SkPDFRasterizer.h" 3130bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein# define RASTERIZE_PDF_PROC SkPopplerRasterizePDF 3230bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein#else 3330bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein# define RASTERIZE_PDF_PROC NULL 3430bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein#endif 3530bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein 36120c99993e60e7aedb0838f09d6f1b1d2f576c78commit-bot@chromium.org#include <ctype.h> 37d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 38d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comusing skiagm::GM; 39d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comusing skiagm::GMRegistry; 400dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgusing skiatest::Test; 410dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgusing skiatest::TestRegistry; 42d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 4380549fcdd50269d7e069d6db02b395fca128056ckkinnunenstatic const char kGpuAPINameGL[] = "gl"; 4480549fcdd50269d7e069d6db02b395fca128056ckkinnunenstatic const char kGpuAPINameGLES[] = "gles"; 4580549fcdd50269d7e069d6db02b395fca128056ckkinnunen 460dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgDEFINE_bool(gms, true, "Run GMs?"); 470dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgDEFINE_bool(tests, true, "Run tests?"); 48992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary ClarkDEFINE_bool(reportUsedChars, false, "Output test font construction data to be pasted into" 49992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark " create_test_font.cpp."); 50d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 51d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com__SK_FORCE_IMAGE_DECODER_LINKING; 52d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 53d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com// "FooBar" -> "foobar". Obviously, ASCII only. 54d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.comstatic SkString lowercase(SkString s) { 55d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com for (size_t i = 0; i < s.size(); i++) { 56d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com s[i] = tolower(s[i]); 57d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 58d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com return s; 59d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com} 60d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 6138aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgstatic const GrContextFactory::GLContextType native = GrContextFactory::kNative_GLContextType; 6260c7707958a542112add1dcb246cdf9135dda870mtkleinstatic const GrContextFactory::GLContextType nvpr = GrContextFactory::kNVPR_GLContextType; 6338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgstatic const GrContextFactory::GLContextType null = GrContextFactory::kNull_GLContextType; 6438aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgstatic const GrContextFactory::GLContextType debug = GrContextFactory::kDebug_GLContextType; 6538aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org#if SK_ANGLE 6660c7707958a542112add1dcb246cdf9135dda870mtkleinstatic const GrContextFactory::GLContextType angle = GrContextFactory::kANGLE_GLContextType; 6738aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org#endif 6838aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org#if SK_MESA 6960c7707958a542112add1dcb246cdf9135dda870mtkleinstatic const GrContextFactory::GLContextType mesa = GrContextFactory::kMESA_GLContextType; 7038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org#endif 7138aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org 720dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgstatic void kick_off_gms(const SkTDArray<GMRegistry::Factory>& gms, 730dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org const SkTArray<SkString>& configs, 7480549fcdd50269d7e069d6db02b395fca128056ckkinnunen GrGLStandard gpuAPI, 750dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org DM::Reporter* reporter, 760dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org DM::TaskRunner* tasks) { 77e4d3e605f74a23d050abad29909af421d8b1cf1amtklein#define START(name, type, ...) \ 78e4d3e605f74a23d050abad29909af421d8b1cf1amtklein if (lowercase(configs[j]).equals(name)) { \ 79e4d3e605f74a23d050abad29909af421d8b1cf1amtklein tasks->add(SkNEW_ARGS(DM::type, (name, reporter, tasks, gms[i], ## __VA_ARGS__))); \ 8038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org } 81d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com for (int i = 0; i < gms.count(); i++) { 8238aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org for (int j = 0; j < configs.count(); j++) { 8380549fcdd50269d7e069d6db02b395fca128056ckkinnunen 84197ceda92966359962c51923a01dd2b0018b080fmtklein START("565", CpuGMTask, kRGB_565_SkColorType); 85197ceda92966359962c51923a01dd2b0018b080fmtklein START("8888", CpuGMTask, kN32_SkColorType); 86197ceda92966359962c51923a01dd2b0018b080fmtklein START("gpu", GpuGMTask, native, gpuAPI, 0); 87197ceda92966359962c51923a01dd2b0018b080fmtklein START("msaa4", GpuGMTask, native, gpuAPI, 4); 88197ceda92966359962c51923a01dd2b0018b080fmtklein START("msaa16", GpuGMTask, native, gpuAPI, 16); 89197ceda92966359962c51923a01dd2b0018b080fmtklein START("nvprmsaa4", GpuGMTask, nvpr, gpuAPI, 4); 90197ceda92966359962c51923a01dd2b0018b080fmtklein START("nvprmsaa16", GpuGMTask, nvpr, gpuAPI, 16); 91197ceda92966359962c51923a01dd2b0018b080fmtklein START("gpunull", GpuGMTask, null, gpuAPI, 0); 92197ceda92966359962c51923a01dd2b0018b080fmtklein START("gpudebug", GpuGMTask, debug, gpuAPI, 0); 9360c7707958a542112add1dcb246cdf9135dda870mtklein#if SK_ANGLE 94197ceda92966359962c51923a01dd2b0018b080fmtklein START("angle", GpuGMTask, angle, gpuAPI, 0); 9560c7707958a542112add1dcb246cdf9135dda870mtklein#endif 9660c7707958a542112add1dcb246cdf9135dda870mtklein#if SK_MESA 97197ceda92966359962c51923a01dd2b0018b080fmtklein START("mesa", GpuGMTask, mesa, gpuAPI, 0); 9860c7707958a542112add1dcb246cdf9135dda870mtklein#endif 9930bf3e2ffcb78fc76e5a62b2ca67638e0411cba9mtklein START("pdf", PDFTask, RASTERIZE_PDF_PROC); 10038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org } 101d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 10238aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org#undef START 10338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org} 10438aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org 1050dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.orgstatic void kick_off_tests(const SkTDArray<TestRegistry::Factory>& tests, 1060dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org DM::Reporter* reporter, 1070dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org DM::TaskRunner* tasks) { 1080dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org for (int i = 0; i < tests.count(); i++) { 109ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org SkAutoTDelete<Test> test(tests[i](NULL)); 110ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org if (test->isGPUTest()) { 111ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org tasks->add(SkNEW_ARGS(DM::GpuTestTask, (reporter, tasks, tests[i]))); 112ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org } else { 113ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org tasks->add(SkNEW_ARGS(DM::CpuTestTask, (reporter, tasks, tests[i]))); 114ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org } 1150dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org } 1160dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org} 1170dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org 118a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanarystatic void find_skps(SkTArray<SkString>* skps) { 11990b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (FLAGS_skps.isEmpty()) { 12090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org return; 12190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 12290b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 12390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org SkOSFile::Iter it(FLAGS_skps[0], ".skp"); 12490b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org SkString filename; 12590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org while (it.next(&filename)) { 126a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, filename.c_str())) { 127a8e2e1504b9af6ba791637f228debaa23953064atfarina skps->push_back(SkOSPath::Join(FLAGS_skps[0], filename.c_str())); 12890b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 129a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary } 130a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary} 13190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 132a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanarystatic void kick_off_skps(const SkTArray<SkString>& skps, 13323c94f05cad79f6f8d303c1b4ffb6d0b91671e83mtklein DM::Reporter* reporter, 13423c94f05cad79f6f8d303c1b4ffb6d0b91671e83mtklein DM::TaskRunner* tasks) { 135a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary for (int i = 0; i < skps.count(); ++i) { 136a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(skps[i].c_str())); 13790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (stream.get() == NULL) { 138a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary SkDebugf("Could not read %s.\n", skps[i].c_str()); 13990b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org exit(1); 14090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 14172ebb9f1dc1ed4d64127b02fed93446b278069d1mtklein SkAutoTUnref<SkPicture> pic( 14272ebb9f1dc1ed4d64127b02fed93446b278069d1mtklein SkPicture::CreateFromStream(stream.get(), &sk_tools::LazyDecodeBitmap)); 14390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (pic.get() == NULL) { 144a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary SkDebugf("Could not read %s as an SkPicture.\n", skps[i].c_str()); 14590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org exit(1); 14690b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 14790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 148a8e2e1504b9af6ba791637f228debaa23953064atfarina SkString filename = SkOSPath::Basename(skps[i].c_str()); 149197ceda92966359962c51923a01dd2b0018b080fmtklein tasks->add(SkNEW_ARGS(DM::SKPTask, (reporter, tasks, pic, filename))); 150197ceda92966359962c51923a01dd2b0018b080fmtklein tasks->add(SkNEW_ARGS(DM::PDFTask, (reporter, tasks, pic, filename, RASTERIZE_PDF_PROC))); 15190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 15290b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org} 15390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 15439e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.orgstatic void report_failures(const SkTArray<SkString>& failures) { 155d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com if (failures.count() == 0) { 156d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com return; 157d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 158d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 159d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com SkDebugf("Failures:\n"); 160d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com for (int i = 0; i < failures.count(); i++) { 161d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com SkDebugf(" %s\n", failures[i].c_str()); 162d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 16339e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org SkDebugf("%d failures.\n", failures.count()); 164d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com} 165d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 16680549fcdd50269d7e069d6db02b395fca128056ckkinnunenstatic GrGLStandard get_gl_standard() { 16780549fcdd50269d7e069d6db02b395fca128056ckkinnunen if (FLAGS_gpuAPI.contains(kGpuAPINameGL)) { 16880549fcdd50269d7e069d6db02b395fca128056ckkinnunen return kGL_GrGLStandard; 16980549fcdd50269d7e069d6db02b395fca128056ckkinnunen } 17080549fcdd50269d7e069d6db02b395fca128056ckkinnunen if (FLAGS_gpuAPI.contains(kGpuAPINameGLES)) { 17180549fcdd50269d7e069d6db02b395fca128056ckkinnunen return kGLES_GrGLStandard; 17280549fcdd50269d7e069d6db02b395fca128056ckkinnunen } 17380549fcdd50269d7e069d6db02b395fca128056ckkinnunen return kNone_GrGLStandard; 17480549fcdd50269d7e069d6db02b395fca128056ckkinnunen} 17580549fcdd50269d7e069d6db02b395fca128056ckkinnunen 17638aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgtemplate <typename T, typename Registry> 17738aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.orgstatic void append_matching_factories(Registry* head, SkTDArray<typename Registry::Factory>* out) { 17838aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org for (const Registry* reg = head; reg != NULL; reg = reg->next()) { 17938aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org SkAutoTDelete<T> forName(reg->factory()(NULL)); 18038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, forName->getName())) { 18138aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org *out->append() = reg->factory(); 18238aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org } 18338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org } 18438aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org} 18538aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org 18617f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclarkint dm_main(); 18717f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclarkint dm_main() { 18830e6e2af14e84216b1c113fd7500d0822bc81daamtklein SetupCrashHandler(); 18939e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org SkAutoGraphics ag; 190406654be7a930b484159f5bca107d3b11d8a9edemtklein SkTaskGroup::Enabler enabled(FLAGS_threads); 191a65e2fdc9af4b0b0415888a560d6ebd779bc3148commit-bot@chromium.org 192a65e2fdc9af4b0b0415888a560d6ebd779bc3148commit-bot@chromium.org if (FLAGS_dryRun) { 193a65e2fdc9af4b0b0415888a560d6ebd779bc3148commit-bot@chromium.org FLAGS_verbose = true; 194a65e2fdc9af4b0b0415888a560d6ebd779bc3148commit-bot@chromium.org } 1950dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#if SK_ENABLE_INST_COUNT 1960dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org gPrintInstCount = FLAGS_leaks; 1970dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#endif 1986bd250a2a340348434b7b16bd4e4b5da0f598e3ecommit-bot@chromium.org 1990dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org SkTArray<SkString> configs; 20038aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org for (int i = 0; i < FLAGS_config.count(); i++) { 20138aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org SkStrSplit(FLAGS_config[i], ", ", &configs); 20238aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org } 20338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org 20480549fcdd50269d7e069d6db02b395fca128056ckkinnunen GrGLStandard gpuAPI = get_gl_standard(); 20580549fcdd50269d7e069d6db02b395fca128056ckkinnunen 20679e13260cf94427e6ccbfff8242bf85ed4c8187bcommit-bot@chromium.org SkTDArray<GMRegistry::Factory> gms; 2070dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org if (FLAGS_gms) { 20838aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org append_matching_factories<GM>(GMRegistry::Head(), &gms); 209d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 210d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 2110dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org SkTDArray<TestRegistry::Factory> tests; 2120dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org if (FLAGS_tests) { 21338aeb0fd7a2bdab5e44531d96045dffe25c8e2b0commit-bot@chromium.org append_matching_factories<Test>(TestRegistry::Head(), &tests); 214d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com } 215d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 216a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary SkTArray<SkString> skps; 217a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary find_skps(&skps); 218a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary 219a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary SkDebugf("%d GMs x %d configs, %d tests, %d pictures\n", 220a98683bc50a3fe1241396f0ae20e35c7b1133fa9halcanary gms.count(), configs.count(), tests.count(), skps.count()); 221d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com DM::Reporter reporter; 222406654be7a930b484159f5bca107d3b11d8a9edemtklein 223406654be7a930b484159f5bca107d3b11d8a9edemtklein DM::TaskRunner tasks; 2240dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org kick_off_tests(tests, &reporter, &tasks); 225197ceda92966359962c51923a01dd2b0018b080fmtklein kick_off_gms(gms, configs, gpuAPI, &reporter, &tasks); 226197ceda92966359962c51923a01dd2b0018b080fmtklein kick_off_skps(skps, &reporter, &tasks); 227d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com tasks.wait(); 228d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com 2291d0f1642e8bc0fda200972926e2eaa99744e4d93mtklein DM::WriteTask::DumpJson(); 2301d0f1642e8bc0fda200972926e2eaa99744e4d93mtklein 231d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com SkDebugf("\n"); 232992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark#ifdef SK_DEBUG 233992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark if (FLAGS_portableFonts && FLAGS_reportUsedChars) { 234992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark sk_tool_utils::report_used_chars(); 235992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark } 236992c7b03ef7914a18bfd78e965b0b4c99a5f5672Cary Clark#endif 23792007583e43115998412ac8b0a06cc2780eb025cmtklein 23839e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org SkTArray<SkString> failures; 23939e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org reporter.getFailures(&failures); 24039e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org report_failures(failures); 24139e8d93337c7e37d2b09dc710a05a9beefef5c2ccommit-bot@chromium.org return failures.count() > 0; 242d36522d12d3e71958e50683a7eef43dc2a47d96dmtklein@google.com} 243846872f75bf3bfa86dbc3d4d672118959193487acommit-bot@chromium.org 244846872f75bf3bfa86dbc3d4d672118959193487acommit-bot@chromium.org#if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 245846872f75bf3bfa86dbc3d4d672118959193487acommit-bot@chromium.orgint main(int argc, char** argv) { 24617f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclark SkCommandLineFlags::Parse(argc, argv); 24717f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclark return dm_main(); 248846872f75bf3bfa86dbc3d4d672118959193487acommit-bot@chromium.org} 249846872f75bf3bfa86dbc3d4d672118959193487acommit-bot@chromium.org#endif 250