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_knowledge_DEFINED 8d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#define gm_knowledge_DEFINED 9d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 10d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#include <cstdint> 11d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 12d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarynamespace skqp { 13d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryclass AssetManager; 14d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary} 15d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 16d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canarynamespace gmkb { 17d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 18d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryenum class Error { 19d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary kNone, /**< No error. */ 20d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary kBadInput, /**< Error with the given image data. */ 21d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary kBadData, /**< Error with the given gmkb data directory. */ 22d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary}; 23d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 24d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/** 25d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal CanaryCheck if the given test image matches the expected results. 26d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 27d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal CanaryEach pixel is an un-pre-multiplied RGBA color: 28d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary uint32_t make_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { 29d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary return (r << 0) | (g << 8) | (b << 16) | (a << 24); 30d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary } 31d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 32d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal CanaryThe image's rowBytes is width*sizeof(uint32_t): 33d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary uint32_t* get_pixel_addr(uint32_t* pixels, int width, int height, int x, int y) { 34d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary assert(x >= 0 && x < width); 35d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary assert(y >= 0 && y < height); 36d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary return &pixels[x + (width * y)]; 37d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary } 38d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 39d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param pixels, width, height the image 40d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param gm_name the name of the rendering test that produced the image 41d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param backend (optional) name of the backend 42d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param asset_manager GM KnowledgeBase data files 43d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param report_directory_path (optional) locatation to write report to. 44d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@param error_out (optional) error return code. 45d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 46d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary@return 0 if the test passes, otherwise a positive number representing how 47d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary badly it failed. Return FLT_MAX on error. 48d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary */ 49d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 50d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canaryfloat Check(const uint32_t* pixels, 51d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary int width, 52d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary int height, 53d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary const char* name, 54d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary const char* backend, 55d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary skqp::AssetManager* asset_manager, 56d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary const char* report_directory_path, 57d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary Error* error_out); 58d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 59d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary/** 602a7f0aa9ebfd66c902dcf1a0ca86ced9fde60d5aHal CanaryCall this after running all checks. 612a7f0aa9ebfd66c902dcf1a0ca86ced9fde60d5aHal Canary 622a7f0aa9ebfd66c902dcf1a0ca86ced9fde60d5aHal Canary@param report_directory_path locatation to write report to. 632a7f0aa9ebfd66c902dcf1a0ca86ced9fde60d5aHal Canary*/ 642a7f0aa9ebfd66c902dcf1a0ca86ced9fde60d5aHal Canarybool MakeReport(const char* report_directory_path); 65d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary} // namespace gmkb 66d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary 67d7b3845f3d3f3498c2adc542b4b20003ac7d3ab0Hal Canary#endif // gm_knowledge_DEFINED 68