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