Index: dm/DM.cpp |
diff --git a/dm/DM.cpp b/dm/DM.cpp |
index 8873dcabbe591792fec88dc10cc4feaacd330c11..7497161369b42788dac022dc8f9eedb534801135 100644 |
--- a/dm/DM.cpp |
+++ b/dm/DM.cpp |
@@ -1144,6 +1144,67 @@ int dm_main() { |
return 0; |
} |
+// TODO: currently many GPU tests are declared outside SK_SUPPORT_GPU guards. |
+// Thus we export the empty RunWithGPUTestContexts when SK_SUPPORT_GPU=0. |
+namespace skiatest { |
+namespace { |
+typedef void(*TestWithGrContext)(skiatest::Reporter*, GrContext*); |
+typedef void(*TestWithGrContextAndGLContext)(skiatest::Reporter*, GrContext*, SkGLContext*); |
+#if SK_SUPPORT_GPU |
+template<typename T> |
+void call_test(T test, skiatest::Reporter* reporter, GrContextFactory::ContextInfo* context); |
+template<> |
+void call_test(TestWithGrContext test, skiatest::Reporter* reporter, |
+ GrContextFactory::ContextInfo* context) { |
+ test(reporter, context->fGrContext); |
+} |
+template<> |
+void call_test(TestWithGrContextAndGLContext test, skiatest::Reporter* reporter, |
+ GrContextFactory::ContextInfo* context) { |
+ test(reporter, context->fGrContext, context->fGLContext); |
+} |
+#endif |
+} // namespace |
+ |
+ |
+template<typename T> |
+void RunWithGPUTestContexts(T test, GPUTestContexts testContexts, Reporter* reporter, |
+ GrContextFactory* factory) { |
+#if SK_SUPPORT_GPU |
+ for (int i = 0; i < GrContextFactory::kGLContextTypeCnt; ++i) { |
+ GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLContextType) i; |
+ int contextSelector = kNone_GPUTestContexts; |
+ if (GrContextFactory::IsRenderingGLContext(glCtxType)) { |
+ contextSelector |= kAllRendering_GPUTestContexts; |
+ } |
+ if (glCtxType == GrContextFactory::kNative_GLContextType) { |
+ contextSelector |= kNative_GPUTestContexts; |
+ } |
+ if (glCtxType == GrContextFactory::kNull_GLContextType) { |
+ contextSelector |= kNull_GPUTestContexts; |
+ } |
+ if ((testContexts & contextSelector) == 0) { |
+ continue; |
+ } |
+ if (GrContextFactory::ContextInfo* context = factory->getContextInfo(glCtxType)) { |
+ call_test(test, reporter, context); |
+ } |
+ } |
+#endif |
+} |
+ |
+template |
+void RunWithGPUTestContexts<TestWithGrContext>(TestWithGrContext test, |
+ GPUTestContexts testContexts, |
+ Reporter* reporter, |
+ GrContextFactory* factory); |
+template |
+void RunWithGPUTestContexts<TestWithGrContextAndGLContext>(TestWithGrContextAndGLContext test, |
+ GPUTestContexts testContexts, |
+ Reporter* reporter, |
+ GrContextFactory* factory); |
+} // namespace skiatest |
+ |
#if !defined(SK_BUILD_FOR_IOS) |
int main(int argc, char** argv) { |
SkCommandLineFlags::Parse(argc, argv); |