[NFC][XRay] Account: decouple getStats() interface from underlying data structure

It doesn't really need to know where Timings are stored, it just needs
to be able to sort them, so MutableArrayRef is enough.

That uncovers an interesting quirk that it relied on
implicit double->int conversion for calculating percentiles.
This commit is contained in:
Roman Lebedev 2020-07-26 14:00:15 +03:00
parent 18df607dbe
commit ed5a6b9305
No known key found for this signature in database
GPG Key ID: 083C3EBB4A1689E0
1 changed files with 5 additions and 3 deletions

View File

@ -226,7 +226,7 @@ struct ResultRow {
std::string Function;
};
ResultRow getStats(std::vector<uint64_t> &Timings) {
ResultRow getStats(MutableArrayRef<uint64_t> Timings) {
assert(!Timings.empty());
ResultRow R;
R.Sum = std::accumulate(Timings.begin(), Timings.end(), 0.0);
@ -240,11 +240,13 @@ ResultRow getStats(std::vector<uint64_t> &Timings) {
R.Median = Timings[MedianOff];
auto Pct90Off = std::floor(Timings.size() * 0.9);
std::nth_element(Timings.begin(), Timings.begin() + Pct90Off, Timings.end());
std::nth_element(Timings.begin(), Timings.begin() + (uint64_t)Pct90Off,
Timings.end());
R.Pct90 = Timings[Pct90Off];
auto Pct99Off = std::floor(Timings.size() * 0.99);
std::nth_element(Timings.begin(), Timings.begin() + Pct99Off, Timings.end());
std::nth_element(Timings.begin(), Timings.begin() + (uint64_t)Pct99Off,
Timings.end());
R.Pct99 = Timings[Pct99Off];
return R;
}