/* * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "rtc_base/numerics/sample_stats.h" namespace webrtc { double SampleStats::Max() { if (IsEmpty()) return INFINITY; return GetMax(); } double SampleStats::Mean() { if (IsEmpty()) return 0; return GetAverage(); } double SampleStats::Median() { return Quantile(0.5); } double SampleStats::Quantile(double quantile) { if (IsEmpty()) return 0; return GetPercentile(quantile); } double SampleStats::Min() { if (IsEmpty()) return -INFINITY; return GetMin(); } double SampleStats::Variance() { if (IsEmpty()) return 0; return GetVariance(); } double SampleStats::StandardDeviation() { return sqrt(Variance()); } int SampleStats::Count() { return static_cast(GetSamples().size()); } void SampleStats::AddSample(TimeDelta delta) { RTC_DCHECK(delta.IsFinite()); stats_.AddSample(delta.seconds()); } void SampleStats::AddSampleMs(double delta_ms) { AddSample(TimeDelta::Millis(delta_ms)); } void SampleStats::AddSamples(const SampleStats& other) { stats_.AddSamples(other.stats_); } bool SampleStats::IsEmpty() { return stats_.IsEmpty(); } TimeDelta SampleStats::Max() { return TimeDelta::Seconds(stats_.Max()); } TimeDelta SampleStats::Mean() { return TimeDelta::Seconds(stats_.Mean()); } TimeDelta SampleStats::Median() { return Quantile(0.5); } TimeDelta SampleStats::Quantile(double quantile) { return TimeDelta::Seconds(stats_.Quantile(quantile)); } TimeDelta SampleStats::Min() { return TimeDelta::Seconds(stats_.Min()); } TimeDelta SampleStats::Variance() { return TimeDelta::Seconds(stats_.Variance()); } TimeDelta SampleStats::StandardDeviation() { return TimeDelta::Seconds(stats_.StandardDeviation()); } int SampleStats::Count() { return stats_.Count(); } void SampleStats::AddSample(DataRate sample) { stats_.AddSample(sample.bps()); } void SampleStats::AddSampleBps(double rate_bps) { stats_.AddSample(rate_bps); } void SampleStats::AddSamples(const SampleStats& other) { stats_.AddSamples(other.stats_); } bool SampleStats::IsEmpty() { return stats_.IsEmpty(); } DataRate SampleStats::Max() { return DataRate::BitsPerSec(stats_.Max()); } DataRate SampleStats::Mean() { return DataRate::BitsPerSec(stats_.Mean()); } DataRate SampleStats::Median() { return Quantile(0.5); } DataRate SampleStats::Quantile(double quantile) { return DataRate::BitsPerSec(stats_.Quantile(quantile)); } DataRate SampleStats::Min() { return DataRate::BitsPerSec(stats_.Min()); } DataRate SampleStats::Variance() { return DataRate::BitsPerSec(stats_.Variance()); } DataRate SampleStats::StandardDeviation() { return DataRate::BitsPerSec(stats_.StandardDeviation()); } int SampleStats::Count() { return stats_.Count(); } } // namespace webrtc