1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/*
2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2017 Google Inc.
3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot *
4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be
5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file.
6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#ifndef gm_knowledge_DEFINED
8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#define gm_knowledge_DEFINED
9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include <cstdint>
11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace skqp {
13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass AssetManager;
14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}
15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotnamespace gmkb {
17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotenum class Error {
19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    kNone,     /**< No error. */
20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    kBadInput, /**< Error with the given image data. */
21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    kBadData,  /**< Error with the given gmkb data directory. */
22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot};
23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotCheck if the given test image matches the expected results.
26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotEach pixel is an un-pre-multiplied RGBA color:
28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t make_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return (r << 0) | (g << 8) | (b << 16) | (a << 24);
30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotThe image's rowBytes is width*sizeof(uint32_t):
33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    uint32_t* get_pixel_addr(uint32_t* pixels, int width, int height, int x, int y) {
34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        assert(x >= 0 && x < width);
35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        assert(y >= 0 && y < height);
36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot        return &pixels[x + (width * y)];
37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot    }
38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param pixels, width, height  the image
40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param gm_name                the name of the rendering test that produced the image
41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param backend                (optional) name of the backend
42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param asset_manager          GM KnowledgeBase data files
43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param report_directory_path  (optional) locatation to write report to.
44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param error_out              (optional) error return code.
45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@return 0 if the test passes, otherwise a positive number representing how
47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot         badly it failed.  Return FLT_MAX on error.
48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */
49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotfloat Check(const uint32_t* pixels,
51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            int width,
52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            int height,
53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            const char* name,
54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            const char* backend,
55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            skqp::AssetManager* asset_manager,
56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            const char* report_directory_path,
57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot            Error* error_out);
58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/**
60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotCall this after running all checks.
61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot@param report_directory_path  locatation to write report to.
63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot*/
64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotbool MakeReport(const char* report_directory_path);
65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}  // namespace gmkb
66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot
67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#endif  // gm_knowledge_DEFINED
68