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 */ 7ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#ifndef skiatest_Test_DEFINED 8ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#define skiatest_Test_DEFINED 9ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 10ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#include "SkString.h" 11ab273facbfe496a3d5dd798e6b4b57c41eed7f16Mike Reed#include "../tools/Registry.h" 120506b9d7d531fdfc9536895481d789a48626a86bcommit-bot@chromium.org#include "SkTypes.h" 13ebfce6d9b42198e04288a15953f40c395a7b6139Mike Reed#include "SkClipOpPriv.h" 14ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 15f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon#if SK_SUPPORT_GPU 16f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon#include "GrContextFactory.h" 17f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon#else 183724e574a744491b7cfb8187ac865a70ef3d4528bsalomonnamespace sk_gpu_test { 1967b915de99e6b89d476907930ac8c27afb64d10ebsalomon@google.comclass GrContextFactory; 20f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomonclass ContextInfo; 21273c0f5e87397c40d22bb7e3ee078bb46a3f6860bsalomonclass GLTestContext; 223724e574a744491b7cfb8187ac865a70ef3d4528bsalomon} // namespace sk_gpu_test 23179a8f5f7feab052e24596d0d04ab5cf2ccab5e0kkinnunenclass GrContext; 24f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon#endif 25a8e686eb6cadb74039d3b624ece0d3ccb0684dccbsalomon@google.com 26ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.comnamespace skiatest { 2780e39a77b16f4396eed230efea1d0b2fc8cbfb00reed@android.com 2887f3ba4847aa575016eb3a21e944197d757df8c0halcanarySkString GetTmpDir(); 2987f3ba4847aa575016eb3a21e944197d757df8c0halcanary 3087f3ba4847aa575016eb3a21e944197d757df8c0halcanarystruct Failure { 3187f3ba4847aa575016eb3a21e944197d757df8c0halcanary Failure(const char* f, int l, const char* c, const SkString& m) 3287f3ba4847aa575016eb3a21e944197d757df8c0halcanary : fileName(f), lineNo(l), condition(c), message(m) {} 3387f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* fileName; 3487f3ba4847aa575016eb3a21e944197d757df8c0halcanary int lineNo; 3587f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* condition; 3687f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkString message; 3787f3ba4847aa575016eb3a21e944197d757df8c0halcanary SkString toString() const; 3887f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 3987f3ba4847aa575016eb3a21e944197d757df8c0halcanary 4087f3ba4847aa575016eb3a21e944197d757df8c0halcanaryclass Reporter : SkNoncopyable { 4187f3ba4847aa575016eb3a21e944197d757df8c0halcanarypublic: 4287f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual ~Reporter() {} 4387f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual void bumpTestCount(); 4487f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual void reportFailed(const skiatest::Failure&) = 0; 4587f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual bool allowExtendedTest() const; 4687f3ba4847aa575016eb3a21e944197d757df8c0halcanary virtual bool verbose() const; 47ab87d7abf1df007c90bef2e916294ca325d81c81Cary Clark virtual void* stats() const { return nullptr; } 48287f6512f34d456b593ea030197925dfc5b15c65Brian Osman 49287f6512f34d456b593ea030197925dfc5b15c65Brian Osman void reportFailedWithContext(const skiatest::Failure& f) { 50287f6512f34d456b593ea030197925dfc5b15c65Brian Osman SkString fullMessage = f.message; 51287f6512f34d456b593ea030197925dfc5b15c65Brian Osman if (!fContextStack.empty()) { 52287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fullMessage.append(" ["); 53287f6512f34d456b593ea030197925dfc5b15c65Brian Osman for (int i = 0; i < fContextStack.count(); ++i) { 54287f6512f34d456b593ea030197925dfc5b15c65Brian Osman if (i > 0) { 55287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fullMessage.append(", "); 56287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 57287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fullMessage.append(fContextStack[i]); 58287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 59287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fullMessage.append("]"); 60287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 61287f6512f34d456b593ea030197925dfc5b15c65Brian Osman this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage)); 62287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 63287f6512f34d456b593ea030197925dfc5b15c65Brian Osman void push(const SkString& message) { 64287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fContextStack.push_back(message); 65287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 66287f6512f34d456b593ea030197925dfc5b15c65Brian Osman void pop() { 67287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fContextStack.pop_back(); 68287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 69287f6512f34d456b593ea030197925dfc5b15c65Brian Osman 70287f6512f34d456b593ea030197925dfc5b15c65Brian Osmanprivate: 71287f6512f34d456b593ea030197925dfc5b15c65Brian Osman SkTArray<SkString> fContextStack; 7287f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 7387f3ba4847aa575016eb3a21e944197d757df8c0halcanary 7487f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORT_FAILURE(reporter, cond, message) \ 75287f6512f34d456b593ea030197925dfc5b15c65Brian Osman reporter->reportFailedWithContext(skiatest::Failure(__FILE__, __LINE__, cond, message)) 76287f6512f34d456b593ea030197925dfc5b15c65Brian Osman 77287f6512f34d456b593ea030197925dfc5b15c65Brian Osmanclass ReporterContext : SkNoncopyable { 78287f6512f34d456b593ea030197925dfc5b15c65Brian Osmanpublic: 79287f6512f34d456b593ea030197925dfc5b15c65Brian Osman ReporterContext(Reporter* reporter, const SkString& message) : fReporter(reporter) { 80287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fReporter->push(message); 81287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 82287f6512f34d456b593ea030197925dfc5b15c65Brian Osman ~ReporterContext() { 83287f6512f34d456b593ea030197925dfc5b15c65Brian Osman fReporter->pop(); 84287f6512f34d456b593ea030197925dfc5b15c65Brian Osman } 85287f6512f34d456b593ea030197925dfc5b15c65Brian Osman 86287f6512f34d456b593ea030197925dfc5b15c65Brian Osmanprivate: 87287f6512f34d456b593ea030197925dfc5b15c65Brian Osman Reporter* fReporter; 88287f6512f34d456b593ea030197925dfc5b15c65Brian Osman}; 8987f3ba4847aa575016eb3a21e944197d757df8c0halcanary 903724e574a744491b7cfb8187ac865a70ef3d4528bsalomontypedef void (*TestProc)(skiatest::Reporter*, sk_gpu_test::GrContextFactory*); 9187f3ba4847aa575016eb3a21e944197d757df8c0halcanary 9287f3ba4847aa575016eb3a21e944197d757df8c0halcanarystruct Test { 9387f3ba4847aa575016eb3a21e944197d757df8c0halcanary Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {} 9487f3ba4847aa575016eb3a21e944197d757df8c0halcanary const char* name; 9587f3ba4847aa575016eb3a21e944197d757df8c0halcanary bool needsGpu; 9687f3ba4847aa575016eb3a21e944197d757df8c0halcanary TestProc proc; 9787f3ba4847aa575016eb3a21e944197d757df8c0halcanary}; 9887f3ba4847aa575016eb3a21e944197d757df8c0halcanary 99ab273facbfe496a3d5dd798e6b4b57c41eed7f16Mike Reedtypedef sk_tools::Registry<Test> TestRegistry; 100e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 101e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org/* 102e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org Use the following macros to make use of the skiatest classes, e.g. 103e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 104e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org #include "Test.h" 105e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 106e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org DEF_TEST(TestName, reporter) { 107e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 108e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org REPORTER_ASSERT(reporter, x == 15); 109e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 110e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org REPORTER_ASSERT_MESSAGE(reporter, x == 15, "x should be 15"); 111e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 112e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org if (x != 15) { 113e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ERRORF(reporter, "x should be 15, but is %d", x); 114e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org return; 115e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org } 116e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org ... 117e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org } 118e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org*/ 119758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon 120758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#if SK_SUPPORT_GPU 121758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonusing GrContextFactoryContextType = sk_gpu_test::GrContextFactory::ContextType; 122758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#else 123758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonusing GrContextFactoryContextType = int; 124758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#endif 125f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon 126f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomontypedef void GrContextTestFn(Reporter*, const sk_gpu_test::ContextInfo&); 127758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomontypedef bool GrContextTypeFilterFn(GrContextFactoryContextType); 128758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon 129758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonextern bool IsGLContextType(GrContextFactoryContextType); 130dc0fcd41e75682a8bfd5e285d684461475226330bsalomonextern bool IsVulkanContextType(GrContextFactoryContextType); 131758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonextern bool IsRenderingGLContextType(GrContextFactoryContextType); 132758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonextern bool IsNullGLContextType(GrContextFactoryContextType); 133758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomonvoid RunWithGPUTestContexts(GrContextTestFn*, GrContextTypeFilterFn*, 134758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon Reporter*, sk_gpu_test::GrContextFactory*); 135ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner 136ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner/** Timer provides wall-clock duration since its creation. */ 137ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagnerclass Timer { 138ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagnerpublic: 139ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner /** Starts the timer. */ 140ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner Timer(); 141ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner 142ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner /** Nanoseconds since creation. */ 143ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner double elapsedNs() const; 144ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner 145ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner /** Milliseconds since creation. */ 146ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner double elapsedMs() const; 147ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner 148ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner /** Milliseconds since creation as an integer. 149ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner Behavior is undefined for durations longer than SK_MSecMax. 150ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner */ 151ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner SkMSec elapsedMsInt() const; 152ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagnerprivate: 153ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner double fStartNanos; 154ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner}; 155ec4d4d784dbb250e572f8e04d18d0fd2ebeee851benjaminwagner 15687f3ba4847aa575016eb3a21e944197d757df8c0halcanary} // namespace skiatest 157ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com 15887f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORTER_ASSERT(r, cond) \ 15987f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 16087f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!(cond)) { \ 16187f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, #cond, SkString()); \ 16287f3ba4847aa575016eb3a21e944197d757df8c0halcanary } \ 16387f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 16487f3ba4847aa575016eb3a21e944197d757df8c0halcanary 16587f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define REPORTER_ASSERT_MESSAGE(r, cond, message) \ 16687f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 16787f3ba4847aa575016eb3a21e944197d757df8c0halcanary if (!(cond)) { \ 16887f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, #cond, SkString(message)); \ 16987f3ba4847aa575016eb3a21e944197d757df8c0halcanary } \ 17087f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 17187f3ba4847aa575016eb3a21e944197d757df8c0halcanary 17287f3ba4847aa575016eb3a21e944197d757df8c0halcanary#define ERRORF(r, ...) \ 17387f3ba4847aa575016eb3a21e944197d757df8c0halcanary do { \ 17487f3ba4847aa575016eb3a21e944197d757df8c0halcanary REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ 17587f3ba4847aa575016eb3a21e944197d757df8c0halcanary } while (0) 17687f3ba4847aa575016eb3a21e944197d757df8c0halcanary 1777d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary#define INFOF(REPORTER, ...) \ 1787d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary do { \ 1797d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary if ((REPORTER)->verbose()) { \ 1807d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary SkDebugf(__VA_ARGS__); \ 1817d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary } \ 1827d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary } while (0) 1837d57124a2a9ed7b271568fb75b3cfd949fdb313ahalcanary 1843724e574a744491b7cfb8187ac865a70ef3d4528bsalomon#define DEF_TEST(name, reporter) \ 1853724e574a744491b7cfb8187ac865a70ef3d4528bsalomon static void test_##name(skiatest::Reporter*, sk_gpu_test::GrContextFactory*); \ 1863724e574a744491b7cfb8187ac865a70ef3d4528bsalomon skiatest::TestRegistry name##TestRegistry( \ 1873724e574a744491b7cfb8187ac865a70ef3d4528bsalomon skiatest::Test(#name, false, test_##name)); \ 1883724e574a744491b7cfb8187ac865a70ef3d4528bsalomon void test_##name(skiatest::Reporter* reporter, sk_gpu_test::GrContextFactory*) 18987f3ba4847aa575016eb3a21e944197d757df8c0halcanary 190179a8f5f7feab052e24596d0d04ab5cf2ccab5e0kkinnunen 191f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon#define DEF_GPUTEST(name, reporter, factory) \ 192f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon static void test_##name(skiatest::Reporter*, sk_gpu_test::GrContextFactory*); \ 193f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon skiatest::TestRegistry name##TestRegistry( \ 194f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon skiatest::Test(#name, true, test_##name)); \ 1953724e574a744491b7cfb8187ac865a70ef3d4528bsalomon void test_##name(skiatest::Reporter* reporter, sk_gpu_test::GrContextFactory* factory) 196e2eac8b2fd8966cc9af51f8d40151dad6c591d2ecommit-bot@chromium.org 197fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon#define DEF_GPUTEST_FOR_CONTEXTS(name, context_filter, reporter, context_info) \ 198fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon static void test_##name(skiatest::Reporter*, \ 199fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon const sk_gpu_test::ContextInfo& context_info); \ 200fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon static void test_gpu_contexts_##name(skiatest::Reporter* reporter, \ 201fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon sk_gpu_test::GrContextFactory* factory) { \ 202fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon skiatest::RunWithGPUTestContexts(test_##name, context_filter, reporter, factory); \ 203fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon } \ 204fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon skiatest::TestRegistry name##TestRegistry( \ 205fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon skiatest::Test(#name, true, test_gpu_contexts_##name)); \ 206fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon void test_##name(skiatest::Reporter* reporter, \ 207f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon const sk_gpu_test::ContextInfo& context_info) 208f2f1c17e331fe1e0ce695969970ecebc81e12cebbsalomon 209fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon#define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, context_info) \ 210fda880710c28a1b0ff0c8c88f90a7659a7ce553fbsalomon DEF_GPUTEST_FOR_CONTEXTS(name, nullptr, reporter, context_info) 21168d9134bec16e91c4a6cde071bcaa579bc0801a7bsalomon#define DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name, reporter, context_info) \ 21268d9134bec16e91c4a6cde071bcaa579bc0801a7bsalomon DEF_GPUTEST_FOR_CONTEXTS(name, sk_gpu_test::GrContextFactory::IsRenderingContext, \ 21368d9134bec16e91c4a6cde071bcaa579bc0801a7bsalomon reporter, context_info) 214758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#define DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(name, reporter, context_info) \ 215758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsGLContextType, reporter, context_info) 216758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#define DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(name, reporter, context_info) \ 217758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsRenderingGLContextType, reporter, context_info) 218758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon#define DEF_GPUTEST_FOR_NULLGL_CONTEXT(name, reporter, context_info) \ 219758586c7f11a6b3529bd4a1c9b4e982a0d0b0582bsalomon DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsNullGLContextType, reporter, context_info) 220dc0fcd41e75682a8bfd5e285d684461475226330bsalomon#define DEF_GPUTEST_FOR_VULKAN_CONTEXT(name, reporter, context_info) \ 221dc0fcd41e75682a8bfd5e285d684461475226330bsalomon DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsVulkanContextType, reporter, context_info) 222179a8f5f7feab052e24596d0d04ab5cf2ccab5e0kkinnunen 2234b6566644f704cf9e30c71fa547c9b5915752792halcanary#define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER) \ 2244b6566644f704cf9e30c71fa547c9b5915752792halcanary do { \ 2254b6566644f704cf9e30c71fa547c9b5915752792halcanary SkDynamicMemoryWStream testStream; \ 2264b6566644f704cf9e30c71fa547c9b5915752792halcanary sk_sp<SkDocument> testDoc(SkDocument::MakePDF(&testStream)); \ 2274b6566644f704cf9e30c71fa547c9b5915752792halcanary if (!testDoc) { \ 2284b6566644f704cf9e30c71fa547c9b5915752792halcanary INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME); \ 2294b6566644f704cf9e30c71fa547c9b5915752792halcanary return; \ 2304b6566644f704cf9e30c71fa547c9b5915752792halcanary } \ 2312ccdb636e8618db77be8e05cdacd82c249c6898chalcanary } while (false) 2322ccdb636e8618db77be8e05cdacd82c249c6898chalcanary 233ed673310e2551e64d8196f7776d7d4c92085f8c2reed@android.com#endif 234