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