1/* 2 * Copyright 2012 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 8#ifndef TimerData_DEFINED 9#define TimerData_DEFINED 10 11#include "SkString.h" 12#include "SkTemplates.h" 13 14#ifdef SK_BUILD_FOR_WIN 15 #pragma warning(push) 16 #pragma warning(disable : 4530) 17#endif 18 19#include "SkJSONCPP.h" 20 21#ifdef SK_BUILD_FOR_WIN 22 #pragma warning(pop) 23#endif 24 25class Timer; 26 27class TimerData { 28public: 29 /** 30 * Constructs a TimerData to hold at most maxNumTimings sets of elapsed timer values. 31 **/ 32 explicit TimerData(int maxNumTimings); 33 34 /** 35 * Collect times from the Timer for an iteration. It will fail if called more often than 36 * indicated in the constructor. 37 * 38 * @param Timer Must not be null. 39 */ 40 bool appendTimes(Timer*); 41 42 enum Result { 43 kMin_Result, 44 kAvg_Result, 45 kPerIter_Result 46 }; 47 48 enum TimerFlags { 49 kWall_Flag = 0x1, 50 kTruncatedWall_Flag = 0x2, 51 kCpu_Flag = 0x4, 52 kTruncatedCpu_Flag = 0x8, 53 kGpu_Flag = 0x10 54 }; 55 56 /** 57 * Gets the timer data results as a string. 58 * @param doubleFormat printf-style format for doubles (e.g. "%02d") 59 * @param result the type of result desired 60 * @param the name of the config being timed (prepended to results string) 61 * @param timerFlags bitfield of TimerFlags values indicating which timers should be reported. 62 * @param itersPerTiming the number of test/bench iterations that correspond to each 63 * appendTimes() call, 1 when appendTimes is called for each iteration. 64 */ 65 SkString getResult(const char* doubleFormat, 66 Result result, 67 const char* configName, 68 uint32_t timerFlags, 69 int itersPerTiming = 1); 70 Json::Value getJSON(uint32_t timerFlags, 71 Result result, 72 int itersPerTiming = 1); 73 74private: 75 int fMaxNumTimings; 76 int fCurrTiming; 77 78 SkAutoTArray<double> fWallTimes; 79 SkAutoTArray<double> fTruncatedWallTimes; 80 SkAutoTArray<double> fCpuTimes; 81 SkAutoTArray<double> fTruncatedCpuTimes; 82 SkAutoTArray<double> fGpuTimes; 83}; 84 85#endif // TimerData_DEFINED 86