1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2011 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef skiatest_Test_DEFINED 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define skiatest_Test_DEFINED 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "../tools/Registry.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkClipOpPriv.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkString.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTraceEvent.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkTypes.h" 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "GrContextFactory.h" 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#else 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace sk_gpu_test { 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrContextFactory; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ContextInfo; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GLTestContext; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // namespace sk_gpu_test 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass GrContext; 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct GrContextOptions; 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace skiatest { 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSkString GetTmpDir(); 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct Failure { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Failure(const char* f, int l, const char* c, const SkString& m) 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : fileName(f), lineNo(l), condition(c), message(m) {} 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* fileName; 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot int lineNo; 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* condition; 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString message; 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString toString() const; 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Reporter : SkNoncopyable { 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual ~Reporter() {} 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual void bumpTestCount(); 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual void reportFailed(const skiatest::Failure&) = 0; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual bool allowExtendedTest() const; 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual bool verbose() const; 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot virtual void* stats() const { return nullptr; } 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void reportFailedWithContext(const skiatest::Failure& f) { 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkString fullMessage = f.message; 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!fContextStack.empty()) { 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fullMessage.append(" ["); 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (int i = 0; i < fContextStack.count(); ++i) { 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (i > 0) { 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fullMessage.append(", "); 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fullMessage.append(fContextStack[i]); 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fullMessage.append("]"); 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage)); 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void push(const SkString& message) { 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fContextStack.push_back(message); 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void pop() { 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fContextStack.pop_back(); 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkTArray<SkString> fContextStack; 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define REPORT_FAILURE(reporter, cond, message) \ 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter->reportFailedWithContext(skiatest::Failure(__FILE__, __LINE__, cond, message)) 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass ReporterContext : SkNoncopyable { 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ReporterContext(Reporter* reporter, const SkString& message) : fReporter(reporter) { 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fReporter->push(message); 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 84fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ~ReporterContext() { 85fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fReporter->pop(); 86fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 87fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 88fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 89fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Reporter* fReporter; 90fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 91fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 92fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef void (*TestProc)(skiatest::Reporter*, const GrContextOptions&); 93fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef void (*ContextOptionsProc)(GrContextOptions*); 94fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 95fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstruct Test { 96fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Test(const char* n, bool g, TestProc p, ContextOptionsProc optionsProc = nullptr) 97fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot : name(n), needsGpu(g), proc(p), fContextOptionsProc(optionsProc) {} 98fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const char* name; 99fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool needsGpu; 100fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TestProc proc; 101fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ContextOptionsProc fContextOptionsProc; 102fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 103fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void modifyGrContextOptions(GrContextOptions* options) { 104fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (fContextOptionsProc) { 105fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot (*fContextOptionsProc)(options); 106fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 107fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 108fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 109fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void run(skiatest::Reporter* r, const GrContextOptions& options) const { 110fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot TRACE_EVENT1("test", TRACE_FUNC, "name", this->name/*these are static*/); 111fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot this->proc(r, options); 112fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 113fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 114fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 115fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef sk_tools::Registry<Test> TestRegistry; 116fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 117fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 118fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Use the following macros to make use of the skiatest classes, e.g. 119fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 120fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot #include "Test.h" 121fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 122fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_TEST(TestName, reporter) { 123fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ... 124fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(reporter, x == 15); 125fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ... 126fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORTER_ASSERT(reporter, x == 15, "x should be 15"); 127fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ... 128fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (x != 15) { 129fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ERRORF(reporter, "x should be 15, but is %d", x); 130fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return; 131fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 132fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ... 133fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 134fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/ 135fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 136fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#if SK_SUPPORT_GPU 137fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotusing GrContextFactoryContextType = sk_gpu_test::GrContextFactory::ContextType; 138fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#else 139fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotusing GrContextFactoryContextType = int; 140fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 141fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 142fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef void GrContextTestFn(Reporter*, const sk_gpu_test::ContextInfo&); 143fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robottypedef bool GrContextTypeFilterFn(GrContextFactoryContextType); 144fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 145fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern bool IsGLContextType(GrContextFactoryContextType); 146fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern bool IsVulkanContextType(GrContextFactoryContextType); 147fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern bool IsRenderingGLContextType(GrContextFactoryContextType); 148fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotextern bool IsNullGLContextType(GrContextFactoryContextType); 149fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotvoid RunWithGPUTestContexts(GrContextTestFn*, GrContextTypeFilterFn*, Reporter*, 150fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrContextOptions&); 151fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 152fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/** Timer provides wall-clock duration since its creation. */ 153fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass Timer { 154fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 155fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Starts the timer. */ 156fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Timer(); 157fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 158fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Nanoseconds since creation. */ 159fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot double elapsedNs() const; 160fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 161fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Milliseconds since creation. */ 162fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot double elapsedMs() const; 163fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 164fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot /** Milliseconds since creation as an integer. 165fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot Behavior is undefined for durations longer than SK_MSecMax. 166fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 167fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkMSec elapsedMsInt() const; 168fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 169fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot double fStartNanos; 170fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 171fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 172fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} // namespace skiatest 173fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 174fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define REPORTER_ASSERT(r, cond, ...) \ 175fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot do { \ 176fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!(cond)) { \ 177fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORT_FAILURE(r, #cond, SkStringPrintf(__VA_ARGS__)); \ 178fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } \ 179fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } while (0) 180fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 181fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define ERRORF(r, ...) \ 182fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot do { \ 183fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ 184fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } while (0) 185fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 186fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define INFOF(REPORTER, ...) \ 187fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot do { \ 188fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if ((REPORTER)->verbose()) { \ 189fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkDebugf(__VA_ARGS__); \ 190fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } \ 191fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } while (0) 192fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 193fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_TEST(name, reporter) \ 194fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void test_##name(skiatest::Reporter*, const GrContextOptions&); \ 195fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, false, test_##name)); \ 196fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void test_##name(skiatest::Reporter* reporter, const GrContextOptions&) 197fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 198fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST(name, reporter, options) \ 199fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void test_##name(skiatest::Reporter*, const GrContextOptions&); \ 200fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skiatest::TestRegistry name##TestRegistry(skiatest::Test(#name, true, test_##name)); \ 201fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void test_##name(skiatest::Reporter* reporter, const GrContextOptions& options) 202fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 203fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_CONTEXTS(name, context_filter, reporter, context_info, options_filter) \ 204fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void test_##name(skiatest::Reporter*, const sk_gpu_test::ContextInfo& context_info); \ 205fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static void test_gpu_contexts_##name(skiatest::Reporter* reporter, \ 206fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot const GrContextOptions& options) { \ 207fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skiatest::RunWithGPUTestContexts(test_##name, context_filter, reporter, options); \ 208fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } \ 209fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skiatest::TestRegistry name##TestRegistry( \ 210fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot skiatest::Test(#name, true, test_gpu_contexts_##name, options_filter)); \ 211fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void test_##name(skiatest::Reporter* reporter, const sk_gpu_test::ContextInfo& context_info) 212fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 213fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, context_info) \ 214fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, nullptr, reporter, context_info, nullptr) 215fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 216fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name, reporter, context_info) \ 217fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, sk_gpu_test::GrContextFactory::IsRenderingContext, \ 218fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter, context_info, nullptr) 219fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_ALL_GL_CONTEXTS(name, reporter, context_info) \ 220fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsGLContextType, \ 221fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter, context_info, nullptr) 222fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(name, reporter, context_info) \ 223fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsRenderingGLContextType, \ 224fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter, context_info, nullptr) 225fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_NULLGL_CONTEXT(name, reporter, context_info) \ 226fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsNullGLContextType, \ 227fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter, context_info, nullptr) 228fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define DEF_GPUTEST_FOR_VULKAN_CONTEXT(name, reporter, context_info) \ 229fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot DEF_GPUTEST_FOR_CONTEXTS(name, &skiatest::IsVulkanContextType, \ 230fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot reporter, context_info, nullptr) 231fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 232fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER) \ 233fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot do { \ 234fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkDynamicMemoryWStream testStream; \ 235fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sk_sp<SkDocument> testDoc(SkDocument::MakePDF(&testStream)); \ 236fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!testDoc) { \ 237fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME); \ 238fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return; \ 239fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } \ 240fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } while (false) 241fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 242fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif 243