1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 * 7 * Classes for writing out bench results in various formats. 8 */ 9 10 #ifndef SkResultsWriter_DEFINED 11 #define SkResultsWriter_DEFINED 12 13 #include "include/core/SkString.h" 14 #include "include/core/SkTypes.h" 15 #include "src/utils/SkJSONWriter.h" 16 #include <cmath> 17 18 /** 19 NanoJSONResultsWriter helps nanobench writes the test results out in the following format: 20 21 { 22 "key": { 23 "arch": "Arm7", 24 "gpu": "SGX540", 25 "os": "Android", 26 "model": "GalaxyNexus", 27 } 28 "gitHash": "d1830323662ae8ae06908b97f15180fd25808894", 29 "build_number": "1234", 30 "results" : { 31 "Xfermode_Luminosity_640_480" : { 32 "8888" : { 33 "median_ms" : 143.188128906250, 34 "min_ms" : 143.835957031250, 35 ... 36 }, 37 ... 38 */ 39 class NanoJSONResultsWriter : public SkJSONWriter { 40 public: NanoJSONResultsWriter(SkWStream * stream,Mode mode)41 NanoJSONResultsWriter(SkWStream* stream, Mode mode) : SkJSONWriter(stream, mode) {} 42 beginBench(const char * name,int32_t x,int32_t y)43 void beginBench(const char* name, int32_t x, int32_t y) { 44 SkString id = SkStringPrintf("%s_%d_%d", name, x, y); 45 this->beginObject(id.c_str()); 46 } 47 endBench()48 void endBench() { this->endObject(); } 49 appendMetric(const char * name,double value)50 void appendMetric(const char* name, double value) { 51 // Don't record if NaN or Inf. 52 if (std::isfinite(value)) { 53 this->appendDoubleDigits(name, value, 16); 54 } 55 } 56 }; 57 58 #endif 59