• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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