From ed5a6b9305145fd073d046d6e9814ffb70c5fdbe Mon Sep 17 00:00:00 2001 From: Roman Lebedev Date: Sun, 26 Jul 2020 14:00:15 +0300 Subject: [PATCH] [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. --- llvm/tools/llvm-xray/xray-account.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/llvm/tools/llvm-xray/xray-account.cpp b/llvm/tools/llvm-xray/xray-account.cpp index fcac33b23d4d..21da53f362b0 100644 --- a/llvm/tools/llvm-xray/xray-account.cpp +++ b/llvm/tools/llvm-xray/xray-account.cpp @@ -226,7 +226,7 @@ struct ResultRow { std::string Function; }; -ResultRow getStats(std::vector &Timings) { +ResultRow getStats(MutableArrayRef Timings) { assert(!Timings.empty()); ResultRow R; R.Sum = std::accumulate(Timings.begin(), Timings.end(), 0.0); @@ -240,11 +240,13 @@ ResultRow getStats(std::vector &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; }