| 230 | } |
| 231 | |
| 232 | Metrics PerformanceTest::getMetrics() |
| 233 | { |
| 234 | uint64_t totalDuration = 0; |
| 235 | |
| 236 | std::sort(m_durations.begin(), m_durations.end()); |
| 237 | |
| 238 | m_durations.erase(m_durations.end() - m_discardCount, m_durations.end()); |
| 239 | for (uint64_t &duration : m_durations) { |
| 240 | totalDuration += duration; |
| 241 | } |
| 242 | |
| 243 | Metrics metrics; |
| 244 | |
| 245 | metrics.executedOperations = m_durations.size() * m_threadsCount * |
| 246 | m_operationsCount; |
| 247 | metrics.totalDuration = totalDuration; |
| 248 | metrics.repeatDuration = (double) totalDuration / |
| 249 | ((uint64_t)m_durations.size() * NanoSecInSec); |
| 250 | metrics.iterationDuration = metrics.repeatDuration; |
| 251 | if (m_executionMode == ExecutionMode::ManyIterations) { |
| 252 | metrics.executedOperations *= m_testOperations.size(); |
| 253 | metrics.iterationDuration /= m_testOperations.size(); |
| 254 | } |
| 255 | metrics.operationsPerSecond = (double) metrics.executedOperations * |
| 256 | NanoSecInSec / totalDuration; |
| 257 | metrics.avgOperationDuration = (double) totalDuration / |
| 258 | metrics.executedOperations; |
| 259 | assert(metrics.iterationDuration != 0.0); |
| 260 | return metrics; |
| 261 | } |
| 262 | |
| 263 | void PerformanceTest::writeMetrics(const string &suiteName, |
| 264 | const string &caseName, const string &fileName) |