1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7ba59d64b05b13081060a266c999158efab575b61commit-bot@chromium.org 830e6e2af14e84216b1c113fd7500d0822bc81daamtklein#include "CrashHandler.h" 98f6884aab8aecd7657cf3f9cdbc682f0deca29c5tfarina@chromium.org#include "OverwriteLine.h" 10bcbc1788b478b1e54079318ad073e8490aa66faetfarina#include "Resources.h" 1162a69c26b3a34c259918d6c97b4dea76b6285b67herb#include "SkAtomics.h" 1217f0b6df7248b9bbdaddacc3a6c9c6efe4ae278ecaryclark#include "SkCommonFlags.h" 135e5adfd12cc2cb194db971708cd7f34ff47e10b4reed@android.com#include "SkGraphics.h" 140506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org#include "SkOSFile.h" 15ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark#include "SkPathOpsDebug.h" 16197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org#include "SkTArray.h" 17406654be7a930b484159f5bca107d3b11d8a9edemtklein#include "SkTaskGroup.h" 18197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org#include "SkTemplates.h" 190506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org#include "SkTime.h" 20ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "Test.h" 21ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 22bdb1be599436a894ab88dfc323d14c0afb496a6frobertphillips@google.com#if SK_SUPPORT_GPU 23bdb1be599436a894ab88dfc323d14c0afb496a6frobertphillips@google.com#include "GrContext.h" 240dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#include "GrContextFactory.h" 25bdb1be599436a894ab88dfc323d14c0afb496a6frobertphillips@google.com#endif 26bdb1be599436a894ab88dfc323d14c0afb496a6frobertphillips@google.com 27ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.comusing namespace skiatest; 283724e574a744491b7cfb8187ac865a70ef3d4528bsalomonusing namespace sk_gpu_test; 29ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 301326068147ee60de138061a3fc1157fcfd5d017bcaryclarkDEFINE_bool2(dumpOp, d, false, "dump the pathOps to a file to recover mid-crash."); 31261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.orgDEFINE_bool2(extendedTest, x, false, "run extended tests for pathOps."); 3259d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary ClarkDEFINE_bool2(runFail, f, false, "check for success on tests known to fail."); 331326068147ee60de138061a3fc1157fcfd5d017bcaryclarkDEFINE_bool2(verifyOp, y, false, "compare the pathOps result against a region."); 341326068147ee60de138061a3fc1157fcfd5d017bcaryclark 35ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark#if DEBUG_COIN 36ab87d7abf1df007c90bef2e916294ca325d81c81Cary ClarkDEFINE_bool2(coinTest, c, false, "detect unused coincidence algorithms."); 37ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark#endif 38261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org 39d252db03d9650013b545ef9781fe993c07f8f314reed@android.com// need to explicitly declare this, or we get some weird infinite loop llist 40d252db03d9650013b545ef9781fe993c07f8f314reed@android.comtemplate TestRegistry* TestRegistry::gHead; 4126ad22ab61539e3d3b6bc5e0da8dcebbd52a53decaryclarkvoid (*gVerboseFinalize)() = nullptr; 42d252db03d9650013b545ef9781fe993c07f8f314reed@android.com 4387f3ba4847aa575016eb3a21e944197d757df8c0halcanary// The threads report back to this object when they are done. 4487f3ba4847aa575016eb3a21e944197d757df8c0halcanaryclass Status { 45ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.compublic: 4687f3ba4847aa575016eb3a21e944197d757df8c0halcanary explicit Status(int total) 4787f3ba4847aa575016eb3a21e944197d757df8c0halcanary : fDone(0), fTestCount(0), fFailCount(0), fTotal(total) {} 4887f3ba4847aa575016eb3a21e944197d757df8c0halcanary // Threadsafe. 4987f3ba4847aa575016eb3a21e944197d757df8c0halcanary void endTest(const char* testName, 5087f3ba4847aa575016eb3a21e944197d757df8c0halcanary bool success, 5187f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkMSec elapsed, 5287f3ba4847aa575016eb3a21e944197d757df8c0halcanary int testCount) { 53261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org const int done = 1 + sk_atomic_inc(&fDone); 5487f3ba4847aa575016eb3a21e944197d757df8c0halcanary for (int i = 0; i < testCount; ++i) { 5587f3ba4847aa575016eb3a21e944197d757df8c0halcanary sk_atomic_inc(&fTestCount); 5687f3ba4847aa575016eb3a21e944197d757df8c0halcanary } 5787f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!success) { 5887f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkDebugf("\n---- %s FAILED", testName); 590506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org } 600506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org 61261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org SkString prefix(kSkOverwriteLine); 62261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org SkString time; 63261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org if (FLAGS_verbose) { 64261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org prefix.printf("\n"); 6587f3ba4847aa575016eb3a21e944197d757df8c0halcanary time.printf("%5dms ", elapsed); 66eeb3b7ff9813600b6cab662e1a0174ee2e279cacreed@android.com } 6787f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkDebugf("%s[%3d/%3d] %s%s", prefix.c_str(), done, fTotal, time.c_str(), 6887f3ba4847aa575016eb3a21e944197d757df8c0halcanary testName); 69eeb3b7ff9813600b6cab662e1a0174ee2e279cacreed@android.com } 70197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 7187f3ba4847aa575016eb3a21e944197d757df8c0halcanary void reportFailure() { sk_atomic_inc(&fFailCount); } 7287f3ba4847aa575016eb3a21e944197d757df8c0halcanary 7387f3ba4847aa575016eb3a21e944197d757df8c0halcanary int32_t testCount() { return fTestCount; } 7487f3ba4847aa575016eb3a21e944197d757df8c0halcanary int32_t failCount() { return fFailCount; } 7587f3ba4847aa575016eb3a21e944197d757df8c0halcanary 76f4d1b3911831d2111a351b2742b3a94a9d17f92edjsollen@google.comprivate: 77261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org int32_t fDone; // atomic 7887f3ba4847aa575016eb3a21e944197d757df8c0halcanary int32_t fTestCount; // atomic 7987f3ba4847aa575016eb3a21e944197d757df8c0halcanary int32_t fFailCount; // atomic 80261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org const int fTotal; 81ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com}; 82ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 83048494c1e236c4db9d18952de83d2602c1abc7c3mtkleinclass SkTestRunnable { 84197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.orgpublic: 8587f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkTestRunnable(const Test& test, 8687f3ba4847aa575016eb3a21e944197d757df8c0halcanary Status* status, 8796fcdcc219d2a0d3579719b84b28bede76efba64halcanary GrContextFactory* grContextFactory = nullptr) 8887f3ba4847aa575016eb3a21e944197d757df8c0halcanary : fTest(test), fStatus(status), fGrContextFactory(grContextFactory) {} 89197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 90048494c1e236c4db9d18952de83d2602c1abc7c3mtklein void operator()() { 9187f3ba4847aa575016eb3a21e944197d757df8c0halcanary struct TestReporter : public skiatest::Reporter { 9287f3ba4847aa575016eb3a21e944197d757df8c0halcanary public: 93a35c68d52ad2694ef6f620a166baf93d4ef45b5bCary Clark TestReporter() : fStats(nullptr), fError(false), fTestCount(0) {} 9436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void bumpTestCount() override { ++fTestCount; } 9536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool allowExtendedTest() const override { 9687f3ba4847aa575016eb3a21e944197d757df8c0halcanary return FLAGS_extendedTest; 9787f3ba4847aa575016eb3a21e944197d757df8c0halcanary } 9836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool verbose() const override { return FLAGS_veryVerbose; } 9936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void reportFailed(const skiatest::Failure& failure) override { 10087f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkDebugf("\nFAILED: %s", failure.toString().c_str()); 10187f3ba4847aa575016eb3a21e944197d757df8c0halcanary fError = true; 10287f3ba4847aa575016eb3a21e944197d757df8c0halcanary } 103f114a9bb4ea1169ce9ad59938403aabca105fdeecaryclark void* stats() const override { return fStats; } 104ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark void* fStats; 10587f3ba4847aa575016eb3a21e944197d757df8c0halcanary bool fError; 10687f3ba4847aa575016eb3a21e944197d757df8c0halcanary int fTestCount; 10787f3ba4847aa575016eb3a21e944197d757df8c0halcanary } reporter; 10887f3ba4847aa575016eb3a21e944197d757df8c0halcanary 109ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner const Timer timer; 11087f3ba4847aa575016eb3a21e944197d757df8c0halcanary fTest.proc(&reporter, fGrContextFactory); 111ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner SkMSec elapsed = timer.elapsedMsInt(); 11287f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (reporter.fError) { 11387f3ba4847aa575016eb3a21e944197d757df8c0halcanary fStatus->reportFailure(); 114197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org } 11587f3ba4847aa575016eb3a21e944197d757df8c0halcanary fStatus->endTest(fTest.name, !reporter.fError, elapsed, 11687f3ba4847aa575016eb3a21e944197d757df8c0halcanary reporter.fTestCount); 117197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org } 118197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 119197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.orgprivate: 12087f3ba4847aa575016eb3a21e944197d757df8c0halcanary Test fTest; 12187f3ba4847aa575016eb3a21e944197d757df8c0halcanary Status* fStatus; 12287f3ba4847aa575016eb3a21e944197d757df8c0halcanary GrContextFactory* fGrContextFactory; 123197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org}; 124ba59d64b05b13081060a266c999158efab575b61commit-bot@chromium.org 1255a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.orgstatic bool should_run(const char* testName, bool isGPUTest) { 1265a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org if (SkCommandLineFlags::ShouldSkip(FLAGS_match, testName)) { 1275a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org return false; 1285a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org } 1295a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org if (!FLAGS_cpu && !isGPUTest) { 1305a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org return false; 1315a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org } 1325a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org if (!FLAGS_gpu && isGPUTest) { 1335a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org return false; 1345a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org } 1355a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org return true; 1365a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org} 1375a47b09fe8fff1439510f1839722e24ed6a91eaecommit-bot@chromium.org 138be28ee2974474800323ce4fabf62a839018be591Mike Kleinint main(int argc, char** argv) { 139be28ee2974474800323ce4fabf62a839018be591Mike Klein SkCommandLineFlags::Parse(argc, argv); 140918fb1fe6ff5349a2d1e5fb6872139f5fb931480Cary Clark#if DEBUG_DUMP_VERIFY 1411326068147ee60de138061a3fc1157fcfd5d017bcaryclark SkPathOpsDebug::gDumpOp = FLAGS_dumpOp; 1421326068147ee60de138061a3fc1157fcfd5d017bcaryclark SkPathOpsDebug::gVerifyOp = FLAGS_verifyOp; 1431326068147ee60de138061a3fc1157fcfd5d017bcaryclark#endif 14459d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark SkPathOpsDebug::gRunFail = FLAGS_runFail; 1451326068147ee60de138061a3fc1157fcfd5d017bcaryclark SkPathOpsDebug::gVeryVerbose = FLAGS_veryVerbose; 14630e6e2af14e84216b1c113fd7500d0822bc81daamtklein SetupCrashHandler(); 147ba59d64b05b13081060a266c999158efab575b61commit-bot@chromium.org 148a71d3af100baa6756a87f7ef42a0ae5f4cb0991atfarina SkAutoGraphics ag; 1495af16f8d670b3ce1c7644a4737e02e2e2257614ebungeman@google.com 15091d449ebf895d3c412a051272af3175be6976872reed@google.com { 15191d449ebf895d3c412a051272af3175be6976872reed@google.com SkString header("Skia UnitTests:"); 1529aff14831b45a7e31e46ebec482df9db6f125745reed@google.com if (!FLAGS_match.isEmpty()) { 153b631eec0e6c698b71423947d43199c33bc096a2fcaryclark@google.com header.appendf(" --match"); 154b631eec0e6c698b71423947d43199c33bc096a2fcaryclark@google.com for (int index = 0; index < FLAGS_match.count(); ++index) { 155b631eec0e6c698b71423947d43199c33bc096a2fcaryclark@google.com header.appendf(" %s", FLAGS_match[index]); 156b631eec0e6c698b71423947d43199c33bc096a2fcaryclark@google.com } 15791d449ebf895d3c412a051272af3175be6976872reed@google.com } 15887f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkString tmpDir = skiatest::GetTmpDir(); 159c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com if (!tmpDir.isEmpty()) { 160c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com header.appendf(" --tmpDir %s", tmpDir.c_str()); 161cb62650ecfd323a1ac215103a4d3106faad3c3cddjsollen@google.com } 162bcbc1788b478b1e54079318ad073e8490aa66faetfarina SkString resourcePath = GetResourcePath(); 163c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com if (!resourcePath.isEmpty()) { 164c76218d5edf08f1b73dc06a92e3af52ed268e7bascroggo@google.com header.appendf(" --resourcePath %s", resourcePath.c_str()); 165789c6f291ecfff925086015360da525d6de1c835reed@google.com } 1661326068147ee60de138061a3fc1157fcfd5d017bcaryclark#if DEBUG_COIN 1671326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_coinTest) { 1681326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -c"); 1691326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 1701326068147ee60de138061a3fc1157fcfd5d017bcaryclark#endif 1711326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_dumpOp) { 1721326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -d"); 1731326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 17459d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark#ifdef SK_DEBUG 17559d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark if (FLAGS_runFail) { 17659d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark header.appendf(" -f"); 17759d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark } 17859d5a0e3f560da40e0ae7036a01d7d58ce3718d8Cary Clark#endif 1791326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_verbose) { 1801326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -v"); 1811326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 1821326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_veryVerbose) { 1831326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -V"); 1841326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 1851326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_extendedTest) { 1861326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -x"); 1871326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 1881326068147ee60de138061a3fc1157fcfd5d017bcaryclark if (FLAGS_verifyOp) { 1891326068147ee60de138061a3fc1157fcfd5d017bcaryclark header.appendf(" -y"); 1901326068147ee60de138061a3fc1157fcfd5d017bcaryclark } 19191d449ebf895d3c412a051272af3175be6976872reed@google.com#ifdef SK_DEBUG 19291d449ebf895d3c412a051272af3175be6976872reed@google.com header.append(" SK_DEBUG"); 19391d449ebf895d3c412a051272af3175be6976872reed@google.com#else 19491d449ebf895d3c412a051272af3175be6976872reed@google.com header.append(" SK_RELEASE"); 19591d449ebf895d3c412a051272af3175be6976872reed@google.com#endif 1964431e7757cfcb8cfa99535eed0e9f156dabf95c2commit-bot@chromium.org if (FLAGS_veryVerbose) { 1974431e7757cfcb8cfa99535eed0e9f156dabf95c2commit-bot@chromium.org header.appendf("\n"); 1984431e7757cfcb8cfa99535eed0e9f156dabf95c2commit-bot@chromium.org } 199297aaf97a32ac16a2bc3f4bbc231d5de859ac02dkkinnunen SkDebugf("%s", header.c_str()); 20091d449ebf895d3c412a051272af3175be6976872reed@google.com } 20191d449ebf895d3c412a051272af3175be6976872reed@google.com 20280e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 2030506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org // Count tests first. 2040506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org int total = 0; 2050506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org int toRun = 0; 206586db93c447b753364d50fadc5426de4fef9a759sglez@google.com 20787f3ba4847aa575016eb3a21e944197d757df8c0halcanary for (const TestRegistry* iter = TestRegistry::Head(); iter; 20887f3ba4847aa575016eb3a21e944197d757df8c0halcanary iter = iter->next()) { 20987f3ba4847aa575016eb3a21e944197d757df8c0halcanary const Test& test = iter->factory(); 21087f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (should_run(test.name, test.needsGpu)) { 2110506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org toRun++; 2120506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org } 2130506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org total++; 2140506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org } 2150506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org 2160506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org // Now run them. 2175af16f8d670b3ce1c7644a4737e02e2e2257614ebungeman@google.com int skipCount = 0; 218197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 219406654be7a930b484159f5bca107d3b11d8a9edemtklein SkTaskGroup::Enabler enabled(FLAGS_threads); 220406654be7a930b484159f5bca107d3b11d8a9edemtklein SkTaskGroup cpuTests; 22187f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkTArray<const Test*> gpuTests; 222261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org 22387f3ba4847aa575016eb3a21e944197d757df8c0halcanary Status status(toRun); 22487f3ba4847aa575016eb3a21e944197d757df8c0halcanary for (const TestRegistry* iter = TestRegistry::Head(); iter; 22587f3ba4847aa575016eb3a21e944197d757df8c0halcanary iter = iter->next()) { 22687f3ba4847aa575016eb3a21e944197d757df8c0halcanary const Test& test = iter->factory(); 22787f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!should_run(test.name, test.needsGpu)) { 2285af16f8d670b3ce1c7644a4737e02e2e2257614ebungeman@google.com ++skipCount; 22987f3ba4847aa575016eb3a21e944197d757df8c0halcanary } else if (test.needsGpu) { 23087f3ba4847aa575016eb3a21e944197d757df8c0halcanary gpuTests.push_back(&test); 2315af16f8d670b3ce1c7644a4737e02e2e2257614ebungeman@google.com } else { 232048494c1e236c4db9d18952de83d2602c1abc7c3mtklein cpuTests.add(SkTestRunnable(test, &status)); 2335af16f8d670b3ce1c7644a4737e02e2e2257614ebungeman@google.com } 234ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com } 235eeb3b7ff9813600b6cab662e1a0174ee2e279cacreed@android.com 23696fcdcc219d2a0d3579719b84b28bede76efba64halcanary GrContextFactory* grContextFactoryPtr = nullptr; 2370dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#if SK_SUPPORT_GPU 2380dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org // Give GPU tests a context factory if that makes sense on this machine. 2390dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org GrContextFactory grContextFactory; 24087f3ba4847aa575016eb3a21e944197d757df8c0halcanary grContextFactoryPtr = &grContextFactory; 24187f3ba4847aa575016eb3a21e944197d757df8c0halcanary 2420dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org#endif 2430dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org 2440dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org // Run GPU tests on this thread. 2450dc5bd149a8b69e8dc6d3b4713b827659c9b0a6bcommit-bot@chromium.org for (int i = 0; i < gpuTests.count(); i++) { 246048494c1e236c4db9d18952de83d2602c1abc7c3mtklein SkTestRunnable(*gpuTests[i], &status, grContextFactoryPtr)(); 247197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org } 248197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 249a7538baeae619a513437f89b60cf738ee2de463dcommit-bot@chromium.org // Block until threaded tests finish. 250406654be7a930b484159f5bca107d3b11d8a9edemtklein cpuTests.wait(); 251197845ae157da0175bb8dd05c4fd9eb9cd935e54commit-bot@chromium.org 252261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org if (FLAGS_verbose) { 25387f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkDebugf( 25487f3ba4847aa575016eb3a21e944197d757df8c0halcanary "\nFinished %d tests, %d failures, %d skipped. " 25587f3ba4847aa575016eb3a21e944197d757df8c0halcanary "(%d internal tests)", 25687f3ba4847aa575016eb3a21e944197d757df8c0halcanary toRun, status.failCount(), skipCount, status.testCount()); 25726ad22ab61539e3d3b6bc5e0da8dcebbd52a53decaryclark if (gVerboseFinalize) { 25826ad22ab61539e3d3b6bc5e0da8dcebbd52a53decaryclark (*gVerboseFinalize)(); 25926ad22ab61539e3d3b6bc5e0da8dcebbd52a53decaryclark } 260d54e1e9751eea63b528a6e62d919d06929c9bd8fcaryclark@google.com } 261a276975a62ef4d9941e40c831fdfe7852e0e243ereed@google.com 262261c66668269588a26757a0bfe28a3a3eac07665commit-bot@chromium.org SkDebugf("\n"); 263ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark#if DEBUG_COIN 264ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark if (FLAGS_coinTest) { 265ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark SkPathOpsDebug::DumpCoinDict(); 266ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark } 267ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark#endif 268ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark 26987f3ba4847aa575016eb3a21e944197d757df8c0halcanary return (status.failCount() == 0) ? 0 : 1; 270ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com} 271