skia2/tools/ok_test.cpp
Mike Klein 200f6da4cd ok, unify failure and crash logging
Just as deferred and locked crash logging makes crashes easier to read,
so does deferred and locked failure logging make failures easier to read.

Change-Id: I71578d61b0056f8d7e692149762def1f155c0387
Reviewed-on: https://skia-review.googlesource.com/10280
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
2017-03-28 14:11:38 +00:00

103 lines
3.4 KiB
C++

/*
* Copyright 2017 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "ok.h"
#include "Test.h"
#if SK_SUPPORT_GPU
#include "GrContextFactory.h"
#endif
struct TestStream : Stream {
const skiatest::TestRegistry* registry = skiatest::TestRegistry::Head();
bool extended = false, verbose = false;
static std::unique_ptr<Stream> Create(Options options) {
TestStream stream;
if (options("extended") != "") { stream.extended = true; }
if (options("verbose" ) != "") { stream.verbose = true; }
return move_unique(stream);
}
struct TestSrc : Src {
skiatest::Test test {"", false, nullptr};
bool extended, verbose;
std::string name() override { return test.name; }
SkISize size() override { return {0,0}; }
bool draw(SkCanvas*) override {
struct : public skiatest::Reporter {
bool ok = true;
bool extended, verbose_;
void reportFailed(const skiatest::Failure& failure) override {
ok_log(failure.toString().c_str());
ok = false;
}
bool allowExtendedTest() const override { return extended; }
bool verbose() const override { return verbose_; }
} reporter;
reporter.extended = extended;
reporter.verbose_ = verbose;
sk_gpu_test::GrContextFactory* factory = nullptr;
#if SK_SUPPORT_GPU
GrContextOptions options;
sk_gpu_test::GrContextFactory a_real_factory(options);
factory = &a_real_factory;
#endif
test.proc(&reporter, factory);
return reporter.ok;
}
};
std::unique_ptr<Src> next() override {
if (!registry) {
return nullptr;
}
TestSrc src;
src.test = registry->factory();
src.extended = extended;
src.verbose = verbose;
registry = registry->next();
return move_unique(src);
}
};
static Register test{"test", TestStream::Create};
// Hey, now why were these defined in DM.cpp? That's kind of weird.
namespace skiatest {
#if SK_SUPPORT_GPU
bool IsGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
return kOpenGL_GrBackend == sk_gpu_test::GrContextFactory::ContextTypeBackend(type);
}
bool IsVulkanContextType(sk_gpu_test::GrContextFactory::ContextType type) {
return kVulkan_GrBackend == sk_gpu_test::GrContextFactory::ContextTypeBackend(type);
}
bool IsRenderingGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
return IsGLContextType(type) && sk_gpu_test::GrContextFactory::IsRenderingContext(type);
}
bool IsNullGLContextType(sk_gpu_test::GrContextFactory::ContextType type) {
return type == sk_gpu_test::GrContextFactory::kNullGL_ContextType;
}
#else
bool IsGLContextType (int) { return false; }
bool IsVulkanContextType (int) { return false; }
bool IsRenderingGLContextType(int) { return false; }
bool IsNullGLContextType (int) { return false; }
#endif
void RunWithGPUTestContexts(GrContextTestFn* test, GrContextTypeFilterFn* contextTypeFilter,
Reporter* reporter, sk_gpu_test::GrContextFactory* factory) {
// TODO(bsalomon)
}
}