The open source OpenXR runtime
at prediction-2 66 lines 1.4 kB view raw
1// Copyright 2024, Collabora, Ltd. 2// SPDX-License-Identifier: BSL-1.0 3/*! 4 * @file 5 * @brief Live stats tracking and printing. 6 * @author Jakob Bornecrantz <jakob@collabora.com> 7 * @ingroup aux_util 8 */ 9 10#include "u_live_stats.h" 11 12#include <algorithm> 13 14 15/* 16 * 17 * 'Exported' functions. 18 * 19 */ 20 21extern "C" void 22u_ls_ns_get_and_reset(struct u_live_stats_ns *uls, uint64_t *out_median, uint64_t *out_mean, uint64_t *out_worst) 23{ 24 uint32_t count = uls->value_count; 25 26 if (count == 0) { 27 *out_median = 0; 28 *out_mean = 0; 29 *out_worst = 0; 30 return; 31 } 32 33 std::sort(&uls->values[0], &uls->values[count]); 34 35 uint64_t worst = uls->values[count - 1]; // Always greater then 0. 36 uint64_t median = uls->values[count / 2]; 37 38 uint64_t mean = 0; 39 for (uint32_t i = 0; i < count; ++i) { 40 mean += uls->values[i] / count; 41 } 42 43 uls->value_count = 0; 44 *out_median = median; 45 *out_mean = mean; 46 *out_worst = worst; 47} 48 49extern "C" void 50u_ls_ns_print_header(u_pp_delegate_t dg) 51{ 52 // "xxxxYYYYzzzzWWWW M'TTT'###.FFFms M'TTT'###.FFFms M'TTT'###.FFFms" 53 u_pp(dg, " name median mean worst"); 54} 55 56extern "C" void 57u_ls_ns_print_and_reset(struct u_live_stats_ns *uls, u_pp_delegate_t dg) 58{ 59 uint64_t median, mean, worst; 60 u_ls_ns_get_and_reset(uls, &median, &mean, &worst); 61 62 u_pp(dg, "%16s", uls->name); 63 u_pp_padded_pretty_ms(dg, median); 64 u_pp_padded_pretty_ms(dg, mean); 65 u_pp_padded_pretty_ms(dg, worst); 66}