xref: /aosp_15_r20/external/skia/tests/Test.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2011 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include "tests/Test.h"
9*c8dee2aaSAndroid Build Coastguard Worker 
10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkTime.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "tools/flags/CommandLineFlags.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "tools/timer/TimeUtils.h"
14*c8dee2aaSAndroid Build Coastguard Worker 
15*c8dee2aaSAndroid Build Coastguard Worker #include <cstdlib>
16*c8dee2aaSAndroid Build Coastguard Worker #include <cstring>
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker static DEFINE_string2(tmpDir, t, nullptr, "Temp directory to use.");
19*c8dee2aaSAndroid Build Coastguard Worker 
bumpTestCount()20*c8dee2aaSAndroid Build Coastguard Worker void skiatest::Reporter::bumpTestCount() {}
21*c8dee2aaSAndroid Build Coastguard Worker 
allowExtendedTest() const22*c8dee2aaSAndroid Build Coastguard Worker bool skiatest::Reporter::allowExtendedTest() const { return false; }
23*c8dee2aaSAndroid Build Coastguard Worker 
verbose() const24*c8dee2aaSAndroid Build Coastguard Worker bool skiatest::Reporter::verbose() const { return false; }
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker template skiatest::TestRegistry* skiatest::TestRegistry::gHead;
27*c8dee2aaSAndroid Build Coastguard Worker 
reportFailedWithContext(const skiatest::Failure & f)28*c8dee2aaSAndroid Build Coastguard Worker void skiatest::Reporter::reportFailedWithContext(const skiatest::Failure& f) {
29*c8dee2aaSAndroid Build Coastguard Worker     SkString fullMessage = f.message;
30*c8dee2aaSAndroid Build Coastguard Worker     if (!fContextStack.empty()) {
31*c8dee2aaSAndroid Build Coastguard Worker         fullMessage.append(" [");
32*c8dee2aaSAndroid Build Coastguard Worker         for (int i = 0; i < fContextStack.size(); ++i) {
33*c8dee2aaSAndroid Build Coastguard Worker             if (i > 0) {
34*c8dee2aaSAndroid Build Coastguard Worker                 fullMessage.append(", ");
35*c8dee2aaSAndroid Build Coastguard Worker             }
36*c8dee2aaSAndroid Build Coastguard Worker             fullMessage.append(fContextStack[i]);
37*c8dee2aaSAndroid Build Coastguard Worker         }
38*c8dee2aaSAndroid Build Coastguard Worker         fullMessage.append("]");
39*c8dee2aaSAndroid Build Coastguard Worker     }
40*c8dee2aaSAndroid Build Coastguard Worker     this->reportFailed(skiatest::Failure(f.fileName, f.lineNo, f.condition, fullMessage));
41*c8dee2aaSAndroid Build Coastguard Worker }
42*c8dee2aaSAndroid Build Coastguard Worker 
toString() const43*c8dee2aaSAndroid Build Coastguard Worker SkString skiatest::Failure::toString() const {
44*c8dee2aaSAndroid Build Coastguard Worker     SkString result = SkStringPrintf("%s:%d\t", this->fileName, this->lineNo);
45*c8dee2aaSAndroid Build Coastguard Worker     if (!this->message.isEmpty()) {
46*c8dee2aaSAndroid Build Coastguard Worker         result.append(this->message);
47*c8dee2aaSAndroid Build Coastguard Worker         if (strlen(this->condition) > 0) {
48*c8dee2aaSAndroid Build Coastguard Worker             result.append(": ");
49*c8dee2aaSAndroid Build Coastguard Worker         }
50*c8dee2aaSAndroid Build Coastguard Worker     }
51*c8dee2aaSAndroid Build Coastguard Worker     result.append(this->condition);
52*c8dee2aaSAndroid Build Coastguard Worker     return result;
53*c8dee2aaSAndroid Build Coastguard Worker }
54*c8dee2aaSAndroid Build Coastguard Worker 
GetTmpDir()55*c8dee2aaSAndroid Build Coastguard Worker SkString skiatest::GetTmpDir() {
56*c8dee2aaSAndroid Build Coastguard Worker     if (!FLAGS_tmpDir.isEmpty()) {
57*c8dee2aaSAndroid Build Coastguard Worker         return SkString(FLAGS_tmpDir[0]);
58*c8dee2aaSAndroid Build Coastguard Worker     }
59*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_BUILD_FOR_ANDROID
60*c8dee2aaSAndroid Build Coastguard Worker     const char* environmentVariable = "TMPDIR";
61*c8dee2aaSAndroid Build Coastguard Worker     const char* defaultValue = "/data/local/tmp";
62*c8dee2aaSAndroid Build Coastguard Worker #elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX)
63*c8dee2aaSAndroid Build Coastguard Worker     const char* environmentVariable = "TMPDIR";
64*c8dee2aaSAndroid Build Coastguard Worker     const char* defaultValue = "/tmp";
65*c8dee2aaSAndroid Build Coastguard Worker #elif defined(SK_BUILD_FOR_WIN)
66*c8dee2aaSAndroid Build Coastguard Worker     const char* environmentVariable = "TEMP";
67*c8dee2aaSAndroid Build Coastguard Worker     const char* defaultValue = nullptr;
68*c8dee2aaSAndroid Build Coastguard Worker #else
69*c8dee2aaSAndroid Build Coastguard Worker     const char* environmentVariable = nullptr;
70*c8dee2aaSAndroid Build Coastguard Worker     const char* defaultValue = nullptr;
71*c8dee2aaSAndroid Build Coastguard Worker #endif
72*c8dee2aaSAndroid Build Coastguard Worker     const char* tmpdir = environmentVariable ? getenv(environmentVariable) : nullptr;
73*c8dee2aaSAndroid Build Coastguard Worker     return SkString(tmpdir ? tmpdir : defaultValue);
74*c8dee2aaSAndroid Build Coastguard Worker }
75*c8dee2aaSAndroid Build Coastguard Worker 
Timer()76*c8dee2aaSAndroid Build Coastguard Worker skiatest::Timer::Timer() : fStartNanos(SkTime::GetNSecs()) {}
77*c8dee2aaSAndroid Build Coastguard Worker 
elapsedNs() const78*c8dee2aaSAndroid Build Coastguard Worker double skiatest::Timer::elapsedNs() const {
79*c8dee2aaSAndroid Build Coastguard Worker     return SkTime::GetNSecs() - fStartNanos;
80*c8dee2aaSAndroid Build Coastguard Worker }
81*c8dee2aaSAndroid Build Coastguard Worker 
elapsedMs() const82*c8dee2aaSAndroid Build Coastguard Worker double skiatest::Timer::elapsedMs() const { return this->elapsedNs() * 1e-6; }
83*c8dee2aaSAndroid Build Coastguard Worker 
elapsedMsInt() const84*c8dee2aaSAndroid Build Coastguard Worker TimeUtils::MSec skiatest::Timer::elapsedMsInt() const {
85*c8dee2aaSAndroid Build Coastguard Worker     const double elapsedMs = this->elapsedMs();
86*c8dee2aaSAndroid Build Coastguard Worker     SkASSERT(TimeUtils::MSecMax >= elapsedMs);
87*c8dee2aaSAndroid Build Coastguard Worker     return static_cast<TimeUtils::MSec>(elapsedMs);
88*c8dee2aaSAndroid Build Coastguard Worker }
89