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