blob: 6000b2b88f3cff118e4c63707eaf9e07c8a3e22a [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) {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010062 AddSample(TimeDelta::Millis(delta_ms));
Sebastian Janssonefa3f762019-12-02 07:19:55 +010063}
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() {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010073 return TimeDelta::Seconds(stats_.Max());
Sebastian Janssonefa3f762019-12-02 07:19:55 +010074}
75
76TimeDelta SampleStats<TimeDelta>::Mean() {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010077 return TimeDelta::Seconds(stats_.Mean());
Sebastian Janssonefa3f762019-12-02 07:19:55 +010078}
79
80TimeDelta SampleStats<TimeDelta>::Median() {
81 return Quantile(0.5);
82}
83
84TimeDelta SampleStats<TimeDelta>::Quantile(double quantile) {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010085 return TimeDelta::Seconds(stats_.Quantile(quantile));
Sebastian Janssonefa3f762019-12-02 07:19:55 +010086}
87
88TimeDelta SampleStats<TimeDelta>::Min() {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010089 return TimeDelta::Seconds(stats_.Min());
Sebastian Janssonefa3f762019-12-02 07:19:55 +010090}
91
92TimeDelta SampleStats<TimeDelta>::Variance() {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010093 return TimeDelta::Seconds(stats_.Variance());
Sebastian Janssonefa3f762019-12-02 07:19:55 +010094}
95
96TimeDelta SampleStats<TimeDelta>::StandardDeviation() {
Danil Chapovalov0c626af2020-02-10 11:16:00 +010097 return TimeDelta::Seconds(stats_.StandardDeviation());
Sebastian Janssonefa3f762019-12-02 07:19:55 +010098}
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() {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100121 return DataRate::BitsPerSec(stats_.Max());
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100122}
123
124DataRate SampleStats<DataRate>::Mean() {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100125 return DataRate::BitsPerSec(stats_.Mean());
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100126}
127
128DataRate SampleStats<DataRate>::Median() {
129 return Quantile(0.5);
130}
131
132DataRate SampleStats<DataRate>::Quantile(double quantile) {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100133 return DataRate::BitsPerSec(stats_.Quantile(quantile));
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100134}
135
136DataRate SampleStats<DataRate>::Min() {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100137 return DataRate::BitsPerSec(stats_.Min());
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100138}
139
140DataRate SampleStats<DataRate>::Variance() {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100141 return DataRate::BitsPerSec(stats_.Variance());
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100142}
143
144DataRate SampleStats<DataRate>::StandardDeviation() {
Danil Chapovalovcad3e0e2020-02-17 18:46:07 +0100145 return DataRate::BitsPerSec(stats_.StandardDeviation());
Sebastian Janssonefa3f762019-12-02 07:19:55 +0100146}
147
148int SampleStats<DataRate>::Count() {
149 return stats_.Count();
150}
151
152} // namespace webrtc