| |
| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #include "Test.h" |
| |
| #include "SkTLazy.h" |
| |
| #if SK_SUPPORT_GPU |
| #include "GrContext.h" |
| #include "gl/SkNativeGLContext.h" |
| #else |
| class GrContext; |
| #endif |
| |
| SK_DEFINE_INST_COUNT(skiatest::Reporter) |
| |
| using namespace skiatest; |
| |
| Reporter::Reporter() { |
| this->resetReporting(); |
| } |
| |
| void Reporter::resetReporting() { |
| fCurrTest = NULL; |
| fTestCount = 0; |
| sk_bzero(fResultCount, sizeof(fResultCount)); |
| } |
| |
| void Reporter::startTest(Test* test) { |
| SkASSERT(NULL == fCurrTest); |
| fCurrTest = test; |
| this->onStart(test); |
| fTestCount += 1; |
| fCurrTestSuccess = true; // we're optimistic |
| } |
| |
| void Reporter::report(const char desc[], Result result) { |
| if (NULL == desc) { |
| desc = "<no description>"; |
| } |
| this->onReport(desc, result); |
| fResultCount[result] += 1; |
| if (kFailed == result) { |
| fCurrTestSuccess = false; |
| } |
| } |
| |
| void Reporter::endTest(Test* test) { |
| SkASSERT(test == fCurrTest); |
| this->onEnd(test); |
| fCurrTest = NULL; |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| Test::Test() : fReporter(NULL) {} |
| |
| Test::~Test() { |
| SkSafeUnref(fReporter); |
| } |
| |
| void Test::setReporter(Reporter* r) { |
| SkRefCnt_SafeAssign(fReporter, r); |
| } |
| |
| const char* Test::getName() { |
| if (fName.size() == 0) { |
| this->onGetName(&fName); |
| } |
| return fName.c_str(); |
| } |
| |
| bool Test::run() { |
| fReporter->startTest(this); |
| this->onRun(fReporter); |
| fReporter->endTest(this); |
| return fReporter->getCurrSuccess(); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| #if SK_SUPPORT_GPU |
| static SkAutoTUnref<SkNativeGLContext> gGLContext; |
| static SkAutoTUnref<GrContext> gGrContext; |
| #endif |
| |
| void GpuTest::DestroyContext() { |
| #if SK_SUPPORT_GPU |
| // preserve this order, we want gGrContext destroyed before gGLContext |
| gGrContext.reset(NULL); |
| gGLContext.reset(NULL); |
| #endif |
| } |
| |
| |
| GrContext* GpuTest::GetContext() { |
| #if SK_SUPPORT_GPU |
| if (NULL == gGrContext.get()) { |
| gGLContext.reset(new SkNativeGLContext()); |
| if (gGLContext.get()->init(800, 600)) { |
| GrBackendContext ctx = reinterpret_cast<GrBackendContext>(gGLContext.get()->gl()); |
| gGrContext.reset(GrContext::Create(kOpenGL_GrBackend, ctx)); |
| } |
| } |
| if (gGLContext.get()) { |
| gGLContext.get()->makeCurrent(); |
| } |
| return gGrContext.get(); |
| #else |
| return NULL; |
| #endif |
| } |