| /* | |
| * 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 "tests/Test.h" | |
| #include "include/core/SkString.h" | |
| #include "src/core/SkTime.h" | |
| #include "tools/flags/CommandLineFlags.h" | |
| #include "tools/timer/TimeUtils.h" | |
| #include <cstdlib> | |
| #include <cstring> | |
| static DEFINE_string2(tmpDir, t, nullptr, "Temp directory to use."); | |
| void skiatest::Reporter::bumpTestCount() {} | |
| bool skiatest::Reporter::allowExtendedTest() const { return false; } | |
| bool skiatest::Reporter::verbose() const { return false; } | |
| template skiatest::TestRegistry* skiatest::TestRegistry::gHead; | |
| void skiatest::Reporter::reportFailedWithContext(const skiatest::Failure& f) { | |
| SkString fullMessage = f.message; | |
| if (!fContextStack.empty()) { | |
| fullMessage.append(" ["); | |
| for (int i = 0; i < fContextStack.size(); ++i) { | |
| if (i > 0) { | |
| fullMessage.append(", "); | |
| } | |
| fullMessage.append(fContextStack[i]); | |
| } | |
| fullMessage.append("]"); | |
| } | |
| this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage)); | |
| } | |
| SkString skiatest::Failure::toString() const { | |
| SkString result = SkStringPrintf("%s:%d\t", this->fileName, this->lineNo); | |
| if (!this->message.isEmpty()) { | |
| result.append(this->message); | |
| if (strlen(this->condition) > 0) { | |
| result.append(": "); | |
| } | |
| } | |
| result.append(this->condition); | |
| return result; | |
| } | |
| SkString skiatest::GetTmpDir() { | |
| if (!FLAGS_tmpDir.isEmpty()) { | |
| return SkString(FLAGS_tmpDir[0]); | |
| } | |
| #ifdef SK_BUILD_FOR_ANDROID | |
| const char* environmentVariable = "TMPDIR"; | |
| const char* defaultValue = "/data/local/tmp"; | |
| #elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX) || defined(SK_BUILD_FOR_WASM) | |
| const char* environmentVariable = "TMPDIR"; | |
| const char* defaultValue = "/tmp"; | |
| #elif defined(SK_BUILD_FOR_WIN) | |
| const char* environmentVariable = "TEMP"; | |
| const char* defaultValue = nullptr; | |
| #else | |
| const char* environmentVariable = nullptr; | |
| const char* defaultValue = nullptr; | |
| #endif | |
| const char* tmpdir = environmentVariable ? getenv(environmentVariable) : nullptr; | |
| return SkString(tmpdir ? tmpdir : defaultValue); | |
| } | |
| skiatest::Timer::Timer() : fStartNanos(SkTime::GetNSecs()) {} | |
| double skiatest::Timer::elapsedNs() const { | |
| return SkTime::GetNSecs() - fStartNanos; | |
| } | |
| double skiatest::Timer::elapsedMs() const { return this->elapsedNs() * 1e-6; } | |
| TimeUtils::MSec skiatest::Timer::elapsedMsInt() const { | |
| const double elapsedMs = this->elapsedMs(); | |
| SkASSERT(TimeUtils::MSecMax >= elapsedMs); | |
| return static_cast<TimeUtils::MSec>(elapsedMs); | |
| } | |
| namespace skiatest { | |
| void Test::cpu(skiatest::Reporter* r) const { | |
| SkASSERT(this->fTestType == TestType::kCPU || | |
| this->fTestType == TestType::kCPUSerial); | |
| TRACE_EVENT1("test_cpu", TRACE_FUNC, "name", this->fName/*these are static*/); | |
| this->fCPUProc(r); | |
| } | |
| void Test::ganesh(skiatest::Reporter* r, const GrContextOptions& options) const { | |
| SkASSERT(this->fTestType == TestType::kGanesh); | |
| TRACE_EVENT1("test_ganesh", TRACE_FUNC, "name", this->fName/*these are static*/); | |
| this->fGaneshProc(r, options); | |
| } | |
| void Test::graphite(skiatest::Reporter* r, const graphite::TestOptions& options) const { | |
| SkASSERT(this->fTestType == TestType::kGraphite); | |
| TRACE_EVENT1("test_graphite", TRACE_FUNC, "name", this->fName/*these are static*/); | |
| this->fGraphiteProc(r, options); | |
| } | |
| } // namespace skiatest |