xref: /aosp_15_r20/external/webrtc/rtc_base/numerics/sample_stats.cc (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/numerics/sample_stats.h"
11*d9f75844SAndroid Build Coastguard Worker 
12*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
13*d9f75844SAndroid Build Coastguard Worker 
Max()14*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Max() {
15*d9f75844SAndroid Build Coastguard Worker   if (IsEmpty())
16*d9f75844SAndroid Build Coastguard Worker     return INFINITY;
17*d9f75844SAndroid Build Coastguard Worker   return GetMax();
18*d9f75844SAndroid Build Coastguard Worker }
19*d9f75844SAndroid Build Coastguard Worker 
Mean()20*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Mean() {
21*d9f75844SAndroid Build Coastguard Worker   if (IsEmpty())
22*d9f75844SAndroid Build Coastguard Worker     return 0;
23*d9f75844SAndroid Build Coastguard Worker   return GetAverage();
24*d9f75844SAndroid Build Coastguard Worker }
25*d9f75844SAndroid Build Coastguard Worker 
Median()26*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Median() {
27*d9f75844SAndroid Build Coastguard Worker   return Quantile(0.5);
28*d9f75844SAndroid Build Coastguard Worker }
29*d9f75844SAndroid Build Coastguard Worker 
Quantile(double quantile)30*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Quantile(double quantile) {
31*d9f75844SAndroid Build Coastguard Worker   if (IsEmpty())
32*d9f75844SAndroid Build Coastguard Worker     return 0;
33*d9f75844SAndroid Build Coastguard Worker   return GetPercentile(quantile);
34*d9f75844SAndroid Build Coastguard Worker }
35*d9f75844SAndroid Build Coastguard Worker 
Min()36*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Min() {
37*d9f75844SAndroid Build Coastguard Worker   if (IsEmpty())
38*d9f75844SAndroid Build Coastguard Worker     return -INFINITY;
39*d9f75844SAndroid Build Coastguard Worker   return GetMin();
40*d9f75844SAndroid Build Coastguard Worker }
41*d9f75844SAndroid Build Coastguard Worker 
Variance()42*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::Variance() {
43*d9f75844SAndroid Build Coastguard Worker   if (IsEmpty())
44*d9f75844SAndroid Build Coastguard Worker     return 0;
45*d9f75844SAndroid Build Coastguard Worker   return GetVariance();
46*d9f75844SAndroid Build Coastguard Worker }
47*d9f75844SAndroid Build Coastguard Worker 
StandardDeviation()48*d9f75844SAndroid Build Coastguard Worker double SampleStats<double>::StandardDeviation() {
49*d9f75844SAndroid Build Coastguard Worker   return sqrt(Variance());
50*d9f75844SAndroid Build Coastguard Worker }
51*d9f75844SAndroid Build Coastguard Worker 
Count()52*d9f75844SAndroid Build Coastguard Worker int SampleStats<double>::Count() {
53*d9f75844SAndroid Build Coastguard Worker   return static_cast<int>(GetSamples().size());
54*d9f75844SAndroid Build Coastguard Worker }
55*d9f75844SAndroid Build Coastguard Worker 
AddSample(TimeDelta delta)56*d9f75844SAndroid Build Coastguard Worker void SampleStats<TimeDelta>::AddSample(TimeDelta delta) {
57*d9f75844SAndroid Build Coastguard Worker   RTC_DCHECK(delta.IsFinite());
58*d9f75844SAndroid Build Coastguard Worker   stats_.AddSample(delta.seconds<double>());
59*d9f75844SAndroid Build Coastguard Worker }
60*d9f75844SAndroid Build Coastguard Worker 
AddSampleMs(double delta_ms)61*d9f75844SAndroid Build Coastguard Worker void SampleStats<TimeDelta>::AddSampleMs(double delta_ms) {
62*d9f75844SAndroid Build Coastguard Worker   AddSample(TimeDelta::Millis(delta_ms));
63*d9f75844SAndroid Build Coastguard Worker }
AddSamples(const SampleStats<TimeDelta> & other)64*d9f75844SAndroid Build Coastguard Worker void SampleStats<TimeDelta>::AddSamples(const SampleStats<TimeDelta>& other) {
65*d9f75844SAndroid Build Coastguard Worker   stats_.AddSamples(other.stats_);
66*d9f75844SAndroid Build Coastguard Worker }
67*d9f75844SAndroid Build Coastguard Worker 
IsEmpty()68*d9f75844SAndroid Build Coastguard Worker bool SampleStats<TimeDelta>::IsEmpty() {
69*d9f75844SAndroid Build Coastguard Worker   return stats_.IsEmpty();
70*d9f75844SAndroid Build Coastguard Worker }
71*d9f75844SAndroid Build Coastguard Worker 
Max()72*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Max() {
73*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.Max());
74*d9f75844SAndroid Build Coastguard Worker }
75*d9f75844SAndroid Build Coastguard Worker 
Mean()76*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Mean() {
77*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.Mean());
78*d9f75844SAndroid Build Coastguard Worker }
79*d9f75844SAndroid Build Coastguard Worker 
Median()80*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Median() {
81*d9f75844SAndroid Build Coastguard Worker   return Quantile(0.5);
82*d9f75844SAndroid Build Coastguard Worker }
83*d9f75844SAndroid Build Coastguard Worker 
Quantile(double quantile)84*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Quantile(double quantile) {
85*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.Quantile(quantile));
86*d9f75844SAndroid Build Coastguard Worker }
87*d9f75844SAndroid Build Coastguard Worker 
Min()88*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Min() {
89*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.Min());
90*d9f75844SAndroid Build Coastguard Worker }
91*d9f75844SAndroid Build Coastguard Worker 
Variance()92*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::Variance() {
93*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.Variance());
94*d9f75844SAndroid Build Coastguard Worker }
95*d9f75844SAndroid Build Coastguard Worker 
StandardDeviation()96*d9f75844SAndroid Build Coastguard Worker TimeDelta SampleStats<TimeDelta>::StandardDeviation() {
97*d9f75844SAndroid Build Coastguard Worker   return TimeDelta::Seconds(stats_.StandardDeviation());
98*d9f75844SAndroid Build Coastguard Worker }
99*d9f75844SAndroid Build Coastguard Worker 
Count()100*d9f75844SAndroid Build Coastguard Worker int SampleStats<TimeDelta>::Count() {
101*d9f75844SAndroid Build Coastguard Worker   return stats_.Count();
102*d9f75844SAndroid Build Coastguard Worker }
103*d9f75844SAndroid Build Coastguard Worker 
AddSample(DataRate sample)104*d9f75844SAndroid Build Coastguard Worker void SampleStats<DataRate>::AddSample(DataRate sample) {
105*d9f75844SAndroid Build Coastguard Worker   stats_.AddSample(sample.bps<double>());
106*d9f75844SAndroid Build Coastguard Worker }
107*d9f75844SAndroid Build Coastguard Worker 
AddSampleBps(double rate_bps)108*d9f75844SAndroid Build Coastguard Worker void SampleStats<DataRate>::AddSampleBps(double rate_bps) {
109*d9f75844SAndroid Build Coastguard Worker   stats_.AddSample(rate_bps);
110*d9f75844SAndroid Build Coastguard Worker }
111*d9f75844SAndroid Build Coastguard Worker 
AddSamples(const SampleStats<DataRate> & other)112*d9f75844SAndroid Build Coastguard Worker void SampleStats<DataRate>::AddSamples(const SampleStats<DataRate>& other) {
113*d9f75844SAndroid Build Coastguard Worker   stats_.AddSamples(other.stats_);
114*d9f75844SAndroid Build Coastguard Worker }
115*d9f75844SAndroid Build Coastguard Worker 
IsEmpty()116*d9f75844SAndroid Build Coastguard Worker bool SampleStats<DataRate>::IsEmpty() {
117*d9f75844SAndroid Build Coastguard Worker   return stats_.IsEmpty();
118*d9f75844SAndroid Build Coastguard Worker }
119*d9f75844SAndroid Build Coastguard Worker 
Max()120*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Max() {
121*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.Max());
122*d9f75844SAndroid Build Coastguard Worker }
123*d9f75844SAndroid Build Coastguard Worker 
Mean()124*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Mean() {
125*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.Mean());
126*d9f75844SAndroid Build Coastguard Worker }
127*d9f75844SAndroid Build Coastguard Worker 
Median()128*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Median() {
129*d9f75844SAndroid Build Coastguard Worker   return Quantile(0.5);
130*d9f75844SAndroid Build Coastguard Worker }
131*d9f75844SAndroid Build Coastguard Worker 
Quantile(double quantile)132*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Quantile(double quantile) {
133*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.Quantile(quantile));
134*d9f75844SAndroid Build Coastguard Worker }
135*d9f75844SAndroid Build Coastguard Worker 
Min()136*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Min() {
137*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.Min());
138*d9f75844SAndroid Build Coastguard Worker }
139*d9f75844SAndroid Build Coastguard Worker 
Variance()140*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::Variance() {
141*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.Variance());
142*d9f75844SAndroid Build Coastguard Worker }
143*d9f75844SAndroid Build Coastguard Worker 
StandardDeviation()144*d9f75844SAndroid Build Coastguard Worker DataRate SampleStats<DataRate>::StandardDeviation() {
145*d9f75844SAndroid Build Coastguard Worker   return DataRate::BitsPerSec(stats_.StandardDeviation());
146*d9f75844SAndroid Build Coastguard Worker }
147*d9f75844SAndroid Build Coastguard Worker 
Count()148*d9f75844SAndroid Build Coastguard Worker int SampleStats<DataRate>::Count() {
149*d9f75844SAndroid Build Coastguard Worker   return stats_.Count();
150*d9f75844SAndroid Build Coastguard Worker }
151*d9f75844SAndroid Build Coastguard Worker 
152*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
153