OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2012 Google Inc. | 3 * Copyright 2012 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 #include "TimerData.h" | 9 #include "TimerData.h" |
10 | 10 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 str += cpuStr; | 133 str += cpuStr; |
134 } | 134 } |
135 if (timerFlags & kTruncatedCpu_Flag) { | 135 if (timerFlags & kTruncatedCpu_Flag) { |
136 str += truncCpuStr; | 136 str += truncCpuStr; |
137 } | 137 } |
138 if ((timerFlags & kGpu_Flag) && gpuSum > 0) { | 138 if ((timerFlags & kGpu_Flag) && gpuSum > 0) { |
139 str += gpuStr; | 139 str += gpuStr; |
140 } | 140 } |
141 return str; | 141 return str; |
142 } | 142 } |
143 | |
144 Json::Value TimerData::getJSON(uint32_t timerFlags, | |
145 Result result, | |
146 int itersPerTiming) { | |
147 SkASSERT(itersPerTiming >= 1); | |
148 Json::Value dataNode; | |
149 Json::Value wallNode, truncWall, cpuNode, truncCpu, gpuNode; | |
150 if (!fCurrTiming) { | |
151 return dataNode; | |
152 } | |
153 | |
154 int numTimings = fCurrTiming; | |
155 | |
156 double wallMin = std::numeric_limits<double>::max(); | |
157 double truncWallMin = std::numeric_limits<double>::max(); | |
158 double cpuMin = std::numeric_limits<double>::max(); | |
159 double truncCpuMin = std::numeric_limits<double>::max(); | |
160 double gpuMin = std::numeric_limits<double>::max(); | |
161 | |
162 double wallSum = 0; | |
163 double truncWallSum = 0; | |
164 double cpuSum = 0; | |
165 double truncCpuSum = 0; | |
166 double gpuSum = 0; | |
167 | |
168 for (int i = 0; i < numTimings; ++i) { | |
169 if (kPerIter_Result == result) { | |
170 wallNode.append(fWallTimes[i] / itersPerTiming); | |
171 truncWall.append(fTruncatedWallTimes[i] / itersPerTiming); | |
172 cpuNode.append(fCpuTimes[i] / itersPerTiming); | |
173 truncCpu.append(fTruncatedCpuTimes[i] / itersPerTiming); | |
174 gpuNode.append(fGpuTimes[i] / itersPerTiming); | |
175 } else if (kMin_Result == result) { | |
176 wallMin = SkTMin(wallMin, fWallTimes[i]); | |
177 truncWallMin = SkTMin(truncWallMin, fTruncatedWallTimes[i]); | |
178 cpuMin = SkTMin(cpuMin, fCpuTimes[i]); | |
179 truncCpuMin = SkTMin(truncCpuMin, fTruncatedCpuTimes[i]); | |
180 gpuMin = SkTMin(gpuMin, fGpuTimes[i]); | |
181 } else { | |
182 SkASSERT(kAvg_Result == result); | |
183 wallSum += fWallTimes[i]; | |
184 truncWallSum += fTruncatedWallTimes[i]; | |
185 cpuSum += fCpuTimes[i]; | |
186 truncCpuSum += fTruncatedCpuTimes[i]; | |
187 } | |
188 | |
189 // We always track the GPU sum because whether it is non-zero indicates
if valid gpu times | |
190 // were recorded at all. | |
191 gpuSum += fGpuTimes[i]; | |
192 } | |
193 | |
194 if (kMin_Result == result) { | |
195 wallNode.append(wallMin / itersPerTiming); | |
196 truncWall.append(truncWallMin / itersPerTiming); | |
197 cpuNode.append(cpuMin / itersPerTiming); | |
198 truncCpu.append(truncCpuMin / itersPerTiming); | |
199 gpuNode.append(gpuMin / itersPerTiming); | |
200 } else if (kAvg_Result == result) { | |
201 int divisor = numTimings * itersPerTiming; | |
202 wallNode.append(wallSum / divisor); | |
203 truncWall.append(truncWallSum / divisor); | |
204 cpuNode.append(cpuSum / divisor); | |
205 truncCpu.append(truncCpuSum / divisor); | |
206 gpuNode.append(gpuSum / divisor); | |
207 } | |
208 | |
209 if (timerFlags & kWall_Flag) { | |
210 dataNode["wall"] = wallNode; | |
211 } | |
212 if (timerFlags & kTruncatedWall_Flag) { | |
213 dataNode["truncWall"] = truncWall; | |
214 } | |
215 if (timerFlags & kCpu_Flag) { | |
216 dataNode["cpu"] = cpuNode; | |
217 } | |
218 if (timerFlags & kTruncatedCpu_Flag) { | |
219 dataNode["trucCpu"] = truncCpu; | |
220 } | |
221 if ((timerFlags & kGpu_Flag) && gpuSum > 0) { | |
222 dataNode["gpu"] = gpuNode; | |
223 } | |
224 return dataNode; | |
225 } | |
OLD | NEW |