aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dm/DM.cpp31
-rw-r--r--tests/Test.h39
2 files changed, 69 insertions, 1 deletions
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 0d39867ba6..ce45515ffb 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -1410,6 +1410,36 @@ bool IsRenderingGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
bool IsNullGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
return type == GrContextFactory::kNullGL_ContextType;
}
+const char* ContextTypeName(GrContextFactory::ContextType contextType) {
+ switch (contextType) {
+ case GrContextFactory::kGL_ContextType:
+ return "OpenGL";
+ case GrContextFactory::kGLES_ContextType:
+ return "OpenGLES";
+ case GrContextFactory::kANGLE_D3D9_ES2_ContextType:
+ return "ANGLE D3D9 ES2";
+ case GrContextFactory::kANGLE_D3D11_ES2_ContextType:
+ return "ANGLE D3D11 ES2";
+ case GrContextFactory::kANGLE_D3D11_ES3_ContextType:
+ return "ANGLE D3D11 ES3";
+ case GrContextFactory::kANGLE_GL_ES2_ContextType:
+ return "ANGLE GL ES2";
+ case GrContextFactory::kANGLE_GL_ES3_ContextType:
+ return "ANGLE GL ES3";
+ case GrContextFactory::kCommandBuffer_ContextType:
+ return "Command Buffer";
+ case GrContextFactory::kMESA_ContextType:
+ return "Mesa";
+ case GrContextFactory::kNullGL_ContextType:
+ return "Null GL";
+ case GrContextFactory::kDebugGL_ContextType:
+ return "Debug GL";
+ case GrContextFactory::kVulkan_ContextType:
+ return "Vulkan";
+ }
+ SkDEBUGFAIL("Unreachable");
+ return "Unknown";
+}
#else
bool IsGLContextType(int) { return false; }
bool IsVulkanContextType(int) { return false; }
@@ -1435,6 +1465,7 @@ void RunWithGPUTestContexts(GrContextTestFn* test, GrContextTypeFilterFn* contex
if (contextTypeFilter && !(*contextTypeFilter)(contextType)) {
continue;
}
+ ReporterContext ctx(reporter, SkString(ContextTypeName(contextType)));
if (ctxInfo.grContext()) {
(*test)(reporter, ctxInfo);
}
diff --git a/tests/Test.h b/tests/Test.h
index ea10cdf7e3..8b60039da0 100644
--- a/tests/Test.h
+++ b/tests/Test.h
@@ -44,10 +44,47 @@ public:
virtual bool allowExtendedTest() const;
virtual bool verbose() const;
virtual void* stats() const { return nullptr; }
+
+ void reportFailedWithContext(const skiatest::Failure& f) {
+ SkString fullMessage = f.message;
+ if (!fContextStack.empty()) {
+ fullMessage.append(" [");
+ for (int i = 0; i < fContextStack.count(); ++i) {
+ if (i > 0) {
+ fullMessage.append(", ");
+ }
+ fullMessage.append(fContextStack[i]);
+ }
+ fullMessage.append("]");
+ }
+ this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage));
+ }
+ void push(const SkString& message) {
+ fContextStack.push_back(message);
+ }
+ void pop() {
+ fContextStack.pop_back();
+ }
+
+private:
+ SkTArray<SkString> fContextStack;
};
#define REPORT_FAILURE(reporter, cond, message) \
- reporter->reportFailed(skiatest::Failure(__FILE__, __LINE__, cond, message))
+ reporter->reportFailedWithContext(skiatest::Failure(__FILE__, __LINE__, cond, message))
+
+class ReporterContext : SkNoncopyable {
+public:
+ ReporterContext(Reporter* reporter, const SkString& message) : fReporter(reporter) {
+ fReporter->push(message);
+ }
+ ~ReporterContext() {
+ fReporter->pop();
+ }
+
+private:
+ Reporter* fReporter;
+};
typedef void (*TestProc)(skiatest::Reporter*, sk_gpu_test::GrContextFactory*);