1d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/*
2d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary * Copyright 2017 Google Inc.
3d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary *
4d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary * Use of this source code is governed by a BSD-style license that can be
5d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary * found in the LICENSE file.
6d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary */
7d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#ifndef gm_runner_DEFINED
8d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#define gm_runner_DEFINED
9d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
10d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include <memory>
11d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include <string>
12d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include <tuple>
13d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include <vector>
14d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
15d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include "skqp_asset_manager.h"
16d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
17d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
18d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal CanaryA Skia GM is a single rendering test that can be executed on any Skia backend Canvas.
19d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
20d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarynamespace skiagm {
21d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryclass GM;
22d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary}
23d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
24d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarynamespace skiatest {
25d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystruct Test;
26d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary}
27d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
28d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarynamespace gm_runner {
29d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
30d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryusing GMFactory = skiagm::GM* (*)(void*);
31d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
32d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryusing UnitTest = const skiatest::Test*;
33d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
34d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryenum class SkiaBackend {
35d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    kGL,
36d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    kGLES,
37d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    kVulkan,
38d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary};
39d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
40a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canaryenum class Mode {
41a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary    /** This mode is set when used by Android CTS.  All known tests are executed.  */
42a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary    kCompatibilityTestMode,
43a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary    /** This mode is set when used in the test lab.  Some tests are skipped, if
44a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary        they are known to cause crashes in older devices.  All GMs are evaluated
45a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary        with stricter requirements. */
46a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary    kExperimentalMode,
47a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary
48a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary};
49a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canary
50d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
51d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal CanaryInitialize Skia
52d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
53a9de760a217cf48c974d6c51b4ba88f08c269bbeHal Canaryvoid InitSkia(Mode, skqp::AssetManager*);
54d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
55d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::vector<SkiaBackend> GetSupportedBackends();
56d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
57d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
58d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a list of all Skia GMs in lexicographic order.
59d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
60d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::vector<GMFactory> GetGMFactories(skqp::AssetManager*);
61d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
62d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
63d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a list of all Skia GPU unit tests in lexicographic order.
64d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
65d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::vector<UnitTest> GetUnitTests();
66d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
67d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
68d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a descriptive name for the GM.
69d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
70d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::string GetGMName(GMFactory);
71d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
72d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
73d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a descriptive name for the unit test.
74d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
75d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryconst char* GetUnitTestName(UnitTest);
76d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
77d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
78d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a descriptive name for the backend.
79d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
80d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryconst char* GetBackendName(SkiaBackend);
81d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
82d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryenum class Error {
83d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    None = 0,
84d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    BadSkiaOutput = 1,
85d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    BadGMKBData = 2,
86d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary    SkiaFailure = 3,
87d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary};
88d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
89d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryconst char* GetErrorString(Error);
90d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
91d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
92d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return A non-negative float representing how badly the GM failed (or zero for
93d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary        success).  Any error running or evaluating the GM will result in a non-zero
94d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary        error code.
95d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
96d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::tuple<float, Error> EvaluateGM(SkiaBackend backend,
97d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary                                    GMFactory gmFact,
98d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary                                    skqp::AssetManager* assetManager,
99d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary                                    const char* reportDirectoryPath);
100d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
101d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/**
102d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return a (hopefully empty) list of errors produced by this unit test.
103d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary*/
104d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarystd::vector<std::string> ExecuteTest(UnitTest);
105d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
106d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary}  // namespace gm_runner
107d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary
108d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#endif  // gm_runner_DEFINED
109