OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 #ifndef skiatest_Test_DEFINED | 7 #ifndef skiatest_Test_DEFINED |
8 #define skiatest_Test_DEFINED | 8 #define skiatest_Test_DEFINED |
9 | 9 |
10 #include "SkString.h" | 10 #include "SkString.h" |
11 #include "SkTRegistry.h" | 11 #include "SkTRegistry.h" |
12 #include "SkTypes.h" | 12 #include "SkTypes.h" |
13 | 13 |
| 14 namespace sk_gpu_test { |
14 class GrContextFactory; | 15 class GrContextFactory; |
| 16 class GLContext; |
| 17 } // namespace sk_gpu_test |
15 class GrContext; | 18 class GrContext; |
16 class SkGLContext; | |
17 | 19 |
18 namespace skiatest { | 20 namespace skiatest { |
19 | 21 |
20 SkString GetTmpDir(); | 22 SkString GetTmpDir(); |
21 | 23 |
22 struct Failure { | 24 struct Failure { |
23 Failure(const char* f, int l, const char* c, const SkString& m) | 25 Failure(const char* f, int l, const char* c, const SkString& m) |
24 : fileName(f), lineNo(l), condition(c), message(m) {} | 26 : fileName(f), lineNo(l), condition(c), message(m) {} |
25 const char* fileName; | 27 const char* fileName; |
26 int lineNo; | 28 int lineNo; |
27 const char* condition; | 29 const char* condition; |
28 SkString message; | 30 SkString message; |
29 SkString toString() const; | 31 SkString toString() const; |
30 }; | 32 }; |
31 | 33 |
32 class Reporter : SkNoncopyable { | 34 class Reporter : SkNoncopyable { |
33 public: | 35 public: |
34 virtual ~Reporter() {} | 36 virtual ~Reporter() {} |
35 virtual void bumpTestCount(); | 37 virtual void bumpTestCount(); |
36 virtual void reportFailed(const skiatest::Failure&) = 0; | 38 virtual void reportFailed(const skiatest::Failure&) = 0; |
37 virtual bool allowExtendedTest() const; | 39 virtual bool allowExtendedTest() const; |
38 virtual bool verbose() const; | 40 virtual bool verbose() const; |
39 }; | 41 }; |
40 | 42 |
41 #define REPORT_FAILURE(reporter, cond, message) \ | 43 #define REPORT_FAILURE(reporter, cond, message) \ |
42 reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message)) | 44 reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message)) |
43 | 45 |
44 typedef void (*TestProc)(skiatest::Reporter*, GrContextFactory*); | 46 typedef void (*TestProc)(skiatest::Reporter*, sk_gpu_test::GrContextFactory*); |
45 | 47 |
46 struct Test { | 48 struct Test { |
47 Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {} | 49 Test(const char* n, bool g, TestProc p) : name(n), needsGpu(g), proc(p) {} |
48 const char* name; | 50 const char* name; |
49 bool needsGpu; | 51 bool needsGpu; |
50 TestProc proc; | 52 TestProc proc; |
51 }; | 53 }; |
52 | 54 |
53 typedef SkTRegistry<Test> TestRegistry; | 55 typedef SkTRegistry<Test> TestRegistry; |
54 | 56 |
(...skipping 21 matching lines...) Expand all Loading... |
76 kDebug_GPUTestContexts = 1 << 1, | 78 kDebug_GPUTestContexts = 1 << 1, |
77 kNative_GPUTestContexts = 1 << 2, | 79 kNative_GPUTestContexts = 1 << 2, |
78 kOther_GPUTestContexts = 1 << 3, // Other than native, used only for
below. | 80 kOther_GPUTestContexts = 1 << 3, // Other than native, used only for
below. |
79 kAllRendering_GPUTestContexts = kNative_GPUTestContexts | kOther_GPUTestCont
exts, | 81 kAllRendering_GPUTestContexts = kNative_GPUTestContexts | kOther_GPUTestCont
exts, |
80 kAll_GPUTestContexts = kAllRendering_GPUTestContexts | 82 kAll_GPUTestContexts = kAllRendering_GPUTestContexts |
81 | kNull_GPUTestContexts | 83 | kNull_GPUTestContexts |
82 | kDebug_GPUTestContexts | 84 | kDebug_GPUTestContexts |
83 }; | 85 }; |
84 template<typename T> | 86 template<typename T> |
85 void RunWithGPUTestContexts(T testFunction, GPUTestContexts contexts, Reporter*
reporter, | 87 void RunWithGPUTestContexts(T testFunction, GPUTestContexts contexts, Reporter*
reporter, |
86 GrContextFactory* factory); | 88 sk_gpu_test::GrContextFactory* factory); |
87 | 89 |
88 /** Timer provides wall-clock duration since its creation. */ | 90 /** Timer provides wall-clock duration since its creation. */ |
89 class Timer { | 91 class Timer { |
90 public: | 92 public: |
91 /** Starts the timer. */ | 93 /** Starts the timer. */ |
92 Timer(); | 94 Timer(); |
93 | 95 |
94 /** Nanoseconds since creation. */ | 96 /** Nanoseconds since creation. */ |
95 double elapsedNs() const; | 97 double elapsedNs() const; |
96 | 98 |
(...skipping 29 matching lines...) Expand all Loading... |
126 REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ | 128 REPORT_FAILURE(r, "", SkStringPrintf(__VA_ARGS__)); \ |
127 } while (0) | 129 } while (0) |
128 | 130 |
129 #define INFOF(REPORTER, ...) \ | 131 #define INFOF(REPORTER, ...) \ |
130 do { \ | 132 do { \ |
131 if ((REPORTER)->verbose()) { \ | 133 if ((REPORTER)->verbose()) { \ |
132 SkDebugf(__VA_ARGS__); \ | 134 SkDebugf(__VA_ARGS__); \ |
133 } \ | 135 } \ |
134 } while (0) | 136 } while (0) |
135 | 137 |
136 #define DEF_TEST(name, reporter) \ | 138 #define DEF_TEST(name, reporter)
\ |
137 static void test_##name(skiatest::Reporter*, GrContextFactory*); \ | 139 static void test_##name(skiatest::Reporter*, sk_gpu_test::GrContextFactory*)
; \ |
138 skiatest::TestRegistry name##TestRegistry( \ | 140 skiatest::TestRegistry name##TestRegistry(
\ |
139 skiatest::Test(#name, false, test_##name)); \ | 141 skiatest::Test(#name, false, test_##name));
\ |
140 void test_##name(skiatest::Reporter* reporter, GrContextFactory*) | 142 void test_##name(skiatest::Reporter* reporter, sk_gpu_test::GrContextFactory
*) |
141 | 143 |
142 #define GPUTEST_EXPAND_MSVC(x) x | 144 #define GPUTEST_EXPAND_MSVC(x) x |
143 #define GPUTEST_APPLY(C, ...) GPUTEST_EXPAND_MSVC(C(__VA_ARGS__)) | 145 #define GPUTEST_APPLY(C, ...) GPUTEST_EXPAND_MSVC(C(__VA_ARGS__)) |
144 #define GPUTEST_SELECT(a1, a2, N, ...) N | 146 #define GPUTEST_SELECT(a1, a2, N, ...) N |
145 | 147 |
146 #define GPUTEST_CONTEXT_ARGS1(a1) GrContext* a1 | 148 #define GPUTEST_CONTEXT_ARGS1(a1) GrContext* a1 |
147 #define GPUTEST_CONTEXT_ARGS2(a1, a2) GrContext* a1, SkGLContext* a2 | 149 #define GPUTEST_CONTEXT_ARGS2(a1, a2) GrContext* a1, sk_gpu_test::GLContext* a2 |
148 #define GPUTEST_CONTEXT_ARGS(...)
\ | 150 #define GPUTEST_CONTEXT_ARGS(...)
\ |
149 GPUTEST_APPLY(GPUTEST_SELECT(__VA_ARGS__, GPUTEST_CONTEXT_ARGS2, GPUTEST_CON
TEXT_ARGS1), \ | 151 GPUTEST_APPLY(GPUTEST_SELECT(__VA_ARGS__, GPUTEST_CONTEXT_ARGS2, GPUTEST_CON
TEXT_ARGS1), \ |
150 __VA_ARGS__) | 152 __VA_ARGS__) |
151 | 153 |
152 #define DEF_GPUTEST(name, reporter, factory) \ | 154 #define DEF_GPUTEST(name, reporter, factory)
\ |
153 static void test_##name(skiatest::Reporter*, GrContextFactory*); \ | 155 static void test_##name(skiatest::Reporter*, sk_gpu_test::GrContextFactory*)
; \ |
154 skiatest::TestRegistry name##TestRegistry( \ | 156 skiatest::TestRegistry name##TestRegistry(
\ |
155 skiatest::Test(#name, true, test_##name)); \ | 157 skiatest::Test(#name, true, test_##name));
\ |
156 void test_##name(skiatest::Reporter* reporter, GrContextFactory* factory) | 158 void test_##name(skiatest::Reporter* reporter, sk_gpu_test::GrContextFactory
* factory) |
157 | 159 |
158 #define DEF_GPUTEST_FOR_CONTEXTS(name, contexts, reporter, ...)
\ | 160 #define DEF_GPUTEST_FOR_CONTEXTS(name, contexts, reporter, ...)
\ |
159 static void test_##name(skiatest::Reporter*, GPUTEST_CONTEXT_ARGS(__VA_ARGS_
_)); \ | 161 static void test_##name(skiatest::Reporter*, GPUTEST_CONTEXT_ARGS(__VA_ARGS_
_)); \ |
160 static void test_gpu_contexts_##name(skiatest::Reporter* reporter,
\ | 162 static void test_gpu_contexts_##name(skiatest::Reporter* reporter,
\ |
161 GrContextFactory* factory) {
\ | 163 sk_gpu_test::GrContextFactory* factory)
{ \ |
162 skiatest::RunWithGPUTestContexts(test_##name, contexts, reporter, factor
y); \ | 164 skiatest::RunWithGPUTestContexts(test_##name, contexts, reporter, factor
y); \ |
163 }
\ | 165 }
\ |
164 skiatest::TestRegistry name##TestRegistry(
\ | 166 skiatest::TestRegistry name##TestRegistry(
\ |
165 skiatest::Test(#name, true, test_gpu_contexts_##name));
\ | 167 skiatest::Test(#name, true, test_gpu_contexts_##name));
\ |
166 void test_##name(skiatest::Reporter* reporter, GPUTEST_CONTEXT_ARGS(__VA_ARG
S__)) | 168 void test_##name(skiatest::Reporter* reporter, GPUTEST_CONTEXT_ARGS(__VA_ARG
S__)) |
167 | 169 |
168 #define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, ...) \ | 170 #define DEF_GPUTEST_FOR_ALL_CONTEXTS(name, reporter, ...) \ |
169 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kAll_GPUTestContexts, reporter,
__VA_ARGS__) | 171 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kAll_GPUTestContexts, reporter,
__VA_ARGS__) |
170 #define DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name, reporter, ...) \ | 172 #define DEF_GPUTEST_FOR_RENDERING_CONTEXTS(name, reporter, ...) \ |
171 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kAllRendering_GPUTestContexts,
reporter, __VA_ARGS__) | 173 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kAllRendering_GPUTestContexts,
reporter, __VA_ARGS__) |
172 #define DEF_GPUTEST_FOR_NULL_CONTEXT(name, reporter, ...) \ | 174 #define DEF_GPUTEST_FOR_NULL_CONTEXT(name, reporter, ...) \ |
173 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kNull_GPUTestContexts, reporter
, __VA_ARGS__) | 175 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kNull_GPUTestContexts, reporter
, __VA_ARGS__) |
174 #define DEF_GPUTEST_FOR_NATIVE_CONTEXT(name, reporter, ...) \ | 176 #define DEF_GPUTEST_FOR_NATIVE_CONTEXT(name, reporter, ...) \ |
175 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kNative_GPUTestContexts, report
er, __VA_ARGS__) | 177 DEF_GPUTEST_FOR_CONTEXTS(name, skiatest::kNative_GPUTestContexts, report
er, __VA_ARGS__) |
176 | 178 |
177 #define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER) \ | 179 #define REQUIRE_PDF_DOCUMENT(TEST_NAME, REPORTER) \ |
178 do { \ | 180 do { \ |
179 SkDynamicMemoryWStream testStream; \ | 181 SkDynamicMemoryWStream testStream; \ |
180 SkAutoTUnref<SkDocument> testDoc(SkDocument::CreatePDF(&testStream)); \ | 182 SkAutoTUnref<SkDocument> testDoc(SkDocument::CreatePDF(&testStream)); \ |
181 if (!testDoc) { \ | 183 if (!testDoc) { \ |
182 INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME); \ | 184 INFOF(REPORTER, "PDF disabled; %s test skipped.", #TEST_NAME); \ |
183 return; \ | 185 return; \ |
184 } \ | 186 } \ |
185 } while (false) | 187 } while (false) |
186 | 188 |
187 #endif | 189 #endif |
OLD | NEW |