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 #ifndef RTC_BASE_NUMERICS_SAMPLE_STATS_H_ 11*d9f75844SAndroid Build Coastguard Worker #define RTC_BASE_NUMERICS_SAMPLE_STATS_H_ 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker #include "api/numerics/samples_stats_counter.h" 14*d9f75844SAndroid Build Coastguard Worker #include "api/units/data_rate.h" 15*d9f75844SAndroid Build Coastguard Worker #include "api/units/time_delta.h" 16*d9f75844SAndroid Build Coastguard Worker #include "api/units/timestamp.h" 17*d9f75844SAndroid Build Coastguard Worker 18*d9f75844SAndroid Build Coastguard Worker namespace webrtc { 19*d9f75844SAndroid Build Coastguard Worker template <typename T> 20*d9f75844SAndroid Build Coastguard Worker class SampleStats; 21*d9f75844SAndroid Build Coastguard Worker 22*d9f75844SAndroid Build Coastguard Worker // TODO(srte): Merge this implementation with SamplesStatsCounter. 23*d9f75844SAndroid Build Coastguard Worker template <> 24*d9f75844SAndroid Build Coastguard Worker class SampleStats<double> : public SamplesStatsCounter { 25*d9f75844SAndroid Build Coastguard Worker public: 26*d9f75844SAndroid Build Coastguard Worker double Max(); 27*d9f75844SAndroid Build Coastguard Worker double Mean(); 28*d9f75844SAndroid Build Coastguard Worker double Median(); 29*d9f75844SAndroid Build Coastguard Worker double Quantile(double quantile); 30*d9f75844SAndroid Build Coastguard Worker double Min(); 31*d9f75844SAndroid Build Coastguard Worker double Variance(); 32*d9f75844SAndroid Build Coastguard Worker double StandardDeviation(); 33*d9f75844SAndroid Build Coastguard Worker int Count(); 34*d9f75844SAndroid Build Coastguard Worker }; 35*d9f75844SAndroid Build Coastguard Worker 36*d9f75844SAndroid Build Coastguard Worker template <> 37*d9f75844SAndroid Build Coastguard Worker class SampleStats<TimeDelta> { 38*d9f75844SAndroid Build Coastguard Worker public: 39*d9f75844SAndroid Build Coastguard Worker void AddSample(TimeDelta delta); 40*d9f75844SAndroid Build Coastguard Worker void AddSampleMs(double delta_ms); 41*d9f75844SAndroid Build Coastguard Worker void AddSamples(const SampleStats<TimeDelta>& other); 42*d9f75844SAndroid Build Coastguard Worker bool IsEmpty(); 43*d9f75844SAndroid Build Coastguard Worker TimeDelta Max(); 44*d9f75844SAndroid Build Coastguard Worker TimeDelta Mean(); 45*d9f75844SAndroid Build Coastguard Worker TimeDelta Median(); 46*d9f75844SAndroid Build Coastguard Worker TimeDelta Quantile(double quantile); 47*d9f75844SAndroid Build Coastguard Worker TimeDelta Min(); 48*d9f75844SAndroid Build Coastguard Worker TimeDelta Variance(); 49*d9f75844SAndroid Build Coastguard Worker TimeDelta StandardDeviation(); 50*d9f75844SAndroid Build Coastguard Worker int Count(); 51*d9f75844SAndroid Build Coastguard Worker 52*d9f75844SAndroid Build Coastguard Worker private: 53*d9f75844SAndroid Build Coastguard Worker SampleStats<double> stats_; 54*d9f75844SAndroid Build Coastguard Worker }; 55*d9f75844SAndroid Build Coastguard Worker 56*d9f75844SAndroid Build Coastguard Worker template <> 57*d9f75844SAndroid Build Coastguard Worker class SampleStats<DataRate> { 58*d9f75844SAndroid Build Coastguard Worker public: 59*d9f75844SAndroid Build Coastguard Worker void AddSample(DataRate rate); 60*d9f75844SAndroid Build Coastguard Worker void AddSampleBps(double rate_bps); 61*d9f75844SAndroid Build Coastguard Worker void AddSamples(const SampleStats<DataRate>& other); 62*d9f75844SAndroid Build Coastguard Worker bool IsEmpty(); 63*d9f75844SAndroid Build Coastguard Worker DataRate Max(); 64*d9f75844SAndroid Build Coastguard Worker DataRate Mean(); 65*d9f75844SAndroid Build Coastguard Worker DataRate Median(); 66*d9f75844SAndroid Build Coastguard Worker DataRate Quantile(double quantile); 67*d9f75844SAndroid Build Coastguard Worker DataRate Min(); 68*d9f75844SAndroid Build Coastguard Worker DataRate Variance(); 69*d9f75844SAndroid Build Coastguard Worker DataRate StandardDeviation(); 70*d9f75844SAndroid Build Coastguard Worker int Count(); 71*d9f75844SAndroid Build Coastguard Worker 72*d9f75844SAndroid Build Coastguard Worker private: 73*d9f75844SAndroid Build Coastguard Worker SampleStats<double> stats_; 74*d9f75844SAndroid Build Coastguard Worker }; 75*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc 76*d9f75844SAndroid Build Coastguard Worker 77*d9f75844SAndroid Build Coastguard Worker #endif // RTC_BASE_NUMERICS_SAMPLE_STATS_H_ 78