Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1192)

Side by Side Diff: bench/TimerData.cpp

Issue 344213003: Move BenchTimer to tools as Timer (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fixes Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1
2 /*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8 #include "TimerData.h"
9
10 #include "BenchTimer.h"
11 #include <limits>
12
13 using namespace std;
14
15 TimerData::TimerData(int maxNumTimings)
16 : fMaxNumTimings(maxNumTimings)
17 , fCurrTiming(0)
18 , fWallTimes(maxNumTimings)
19 , fTruncatedWallTimes(maxNumTimings)
20 , fCpuTimes(maxNumTimings)
21 , fTruncatedCpuTimes(maxNumTimings)
22 , fGpuTimes(maxNumTimings){
23 }
24
25 bool TimerData::appendTimes(BenchTimer* timer) {
26 SkASSERT(timer != NULL);
27 if (fCurrTiming >= fMaxNumTimings) {
28 return false;
29 }
30
31 fWallTimes[fCurrTiming] = timer->fWall;
32 fTruncatedWallTimes[fCurrTiming] = timer->fTruncatedWall;
33 fCpuTimes[fCurrTiming] = timer->fCpu;
34 fTruncatedCpuTimes[fCurrTiming] = timer->fTruncatedCpu;
35 fGpuTimes[fCurrTiming] = timer->fGpu;
36
37 ++fCurrTiming;
38
39 return true;
40 }
41
42 SkString TimerData::getResult(const char* doubleFormat,
43 Result result,
44 const char *configName,
45 uint32_t timerFlags,
46 int itersPerTiming) {
47 SkASSERT(itersPerTiming >= 1);
48
49 if (!fCurrTiming) {
50 return SkString("");
51 }
52
53 int numTimings = fCurrTiming;
54
55 SkString wallStr(" msecs = ");
56 SkString truncWallStr(" Wmsecs = ");
57 SkString cpuStr(" cmsecs = ");
58 SkString truncCpuStr(" Cmsecs = ");
59 SkString gpuStr(" gmsecs = ");
60
61 double wallMin = std::numeric_limits<double>::max();
62 double truncWallMin = std::numeric_limits<double>::max();
63 double cpuMin = std::numeric_limits<double>::max();
64 double truncCpuMin = std::numeric_limits<double>::max();
65 double gpuMin = std::numeric_limits<double>::max();
66
67 double wallSum = 0;
68 double truncWallSum = 0;
69 double cpuSum = 0;
70 double truncCpuSum = 0;
71 double gpuSum = 0;
72
73 for (int i = 0; i < numTimings; ++i) {
74 if (kPerIter_Result == result) {
75 wallStr.appendf(doubleFormat, fWallTimes[i] / itersPerTiming);
76 truncWallStr.appendf(doubleFormat, fTruncatedWallTimes[i] / itersPer Timing);
77 cpuStr.appendf(doubleFormat, fCpuTimes[i] / itersPerTiming);
78 truncCpuStr.appendf(doubleFormat, fTruncatedCpuTimes[i] / itersPerTi ming);
79 gpuStr.appendf(doubleFormat, fGpuTimes[i] / itersPerTiming);
80
81 if (i != numTimings - 1) {
82 static const char kSep[] = ", ";
83 wallStr.append(kSep);
84 truncWallStr.append(kSep);
85 cpuStr.append(kSep);
86 truncCpuStr.append(kSep);
87 gpuStr.append(kSep);
88 }
89 } else if (kMin_Result == result) {
90 wallMin = SkTMin(wallMin, fWallTimes[i]);
91 truncWallMin = SkTMin(truncWallMin, fTruncatedWallTimes[i]);
92 cpuMin = SkTMin(cpuMin, fCpuTimes[i]);
93 truncCpuMin = SkTMin(truncCpuMin, fTruncatedCpuTimes[i]);
94 gpuMin = SkTMin(gpuMin, fGpuTimes[i]);
95 } else {
96 SkASSERT(kAvg_Result == result);
97 wallSum += fWallTimes[i];
98 truncWallSum += fTruncatedWallTimes[i];
99 cpuSum += fCpuTimes[i];
100 truncCpuSum += fTruncatedCpuTimes[i];
101 }
102
103 // We always track the GPU sum because whether it is non-zero indicates if valid gpu times
104 // were recorded at all.
105 gpuSum += fGpuTimes[i];
106 }
107
108 if (kMin_Result == result) {
109 wallStr.appendf(doubleFormat, wallMin / itersPerTiming);
110 truncWallStr.appendf(doubleFormat, truncWallMin / itersPerTiming);
111 cpuStr.appendf(doubleFormat, cpuMin / itersPerTiming);
112 truncCpuStr.appendf(doubleFormat, truncCpuMin / itersPerTiming);
113 gpuStr.appendf(doubleFormat, gpuMin / itersPerTiming);
114 } else if (kAvg_Result == result) {
115 int divisor = numTimings * itersPerTiming;
116 wallStr.appendf(doubleFormat, wallSum / divisor);
117 truncWallStr.appendf(doubleFormat, truncWallSum / divisor);
118 cpuStr.appendf(doubleFormat, cpuSum / divisor);
119 truncCpuStr.appendf(doubleFormat, truncCpuSum / divisor);
120 gpuStr.appendf(doubleFormat, gpuSum / divisor);
121 }
122
123 SkString str;
124 str.printf(" %4s:", configName);
125 if (timerFlags & kWall_Flag) {
126 str += wallStr;
127 }
128 if (timerFlags & kTruncatedWall_Flag) {
129 str += truncWallStr;
130 }
131 if (timerFlags & kCpu_Flag) {
132 str += cpuStr;
133 }
134 if (timerFlags & kTruncatedCpu_Flag) {
135 str += truncCpuStr;
136 }
137 if ((timerFlags & kGpu_Flag) && gpuSum > 0) {
138 str += gpuStr;
139 }
140 return str;
141 }
142
143 Json::Value TimerData::getJSON(uint32_t timerFlags,
144 Result result,
145 int itersPerTiming) {
146 SkASSERT(itersPerTiming >= 1);
147 Json::Value dataNode;
148 Json::Value wallNode, truncWall, cpuNode, truncCpu, gpuNode;
149 if (!fCurrTiming) {
150 return dataNode;
151 }
152
153 int numTimings = fCurrTiming;
154
155 double wallMin = std::numeric_limits<double>::max();
156 double truncWallMin = std::numeric_limits<double>::max();
157 double cpuMin = std::numeric_limits<double>::max();
158 double truncCpuMin = std::numeric_limits<double>::max();
159 double gpuMin = std::numeric_limits<double>::max();
160
161 double wallSum = 0;
162 double truncWallSum = 0;
163 double cpuSum = 0;
164 double truncCpuSum = 0;
165 double gpuSum = 0;
166
167 for (int i = 0; i < numTimings; ++i) {
168 if (kPerIter_Result == result) {
169 wallNode.append(fWallTimes[i] / itersPerTiming);
170 truncWall.append(fTruncatedWallTimes[i] / itersPerTiming);
171 cpuNode.append(fCpuTimes[i] / itersPerTiming);
172 truncCpu.append(fTruncatedCpuTimes[i] / itersPerTiming);
173 gpuNode.append(fGpuTimes[i] / itersPerTiming);
174 } else if (kMin_Result == result) {
175 wallMin = SkTMin(wallMin, fWallTimes[i]);
176 truncWallMin = SkTMin(truncWallMin, fTruncatedWallTimes[i]);
177 cpuMin = SkTMin(cpuMin, fCpuTimes[i]);
178 truncCpuMin = SkTMin(truncCpuMin, fTruncatedCpuTimes[i]);
179 gpuMin = SkTMin(gpuMin, fGpuTimes[i]);
180 } else {
181 SkASSERT(kAvg_Result == result);
182 wallSum += fWallTimes[i];
183 truncWallSum += fTruncatedWallTimes[i];
184 cpuSum += fCpuTimes[i];
185 truncCpuSum += fTruncatedCpuTimes[i];
186 }
187
188 // We always track the GPU sum because whether it is non-zero indicates if valid gpu times
189 // were recorded at all.
190 gpuSum += fGpuTimes[i];
191 }
192
193 if (kMin_Result == result) {
194 wallNode.append(wallMin / itersPerTiming);
195 truncWall.append(truncWallMin / itersPerTiming);
196 cpuNode.append(cpuMin / itersPerTiming);
197 truncCpu.append(truncCpuMin / itersPerTiming);
198 gpuNode.append(gpuMin / itersPerTiming);
199 } else if (kAvg_Result == result) {
200 int divisor = numTimings * itersPerTiming;
201 wallNode.append(wallSum / divisor);
202 truncWall.append(truncWallSum / divisor);
203 cpuNode.append(cpuSum / divisor);
204 truncCpu.append(truncCpuSum / divisor);
205 gpuNode.append(gpuSum / divisor);
206 }
207
208 if (timerFlags & kWall_Flag) {
209 dataNode["wall"] = wallNode;
210 }
211 if (timerFlags & kTruncatedWall_Flag) {
212 dataNode["truncWall"] = truncWall;
213 }
214 if (timerFlags & kCpu_Flag) {
215 dataNode["cpu"] = cpuNode;
216 }
217 if (timerFlags & kTruncatedCpu_Flag) {
218 dataNode["trucCpu"] = truncCpu;
219 }
220 if ((timerFlags & kGpu_Flag) && gpuSum > 0) {
221 dataNode["gpu"] = gpuNode;
222 }
223 return dataNode;
224 }
OLDNEW
« no previous file with comments | « bench/TimerData.h ('k') | bench/benchmain.cpp » ('j') | tools/timer/GpuTimer.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698