1 /* 2 * Copyright (c) 2018 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 11 #ifndef RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_ 12 #define RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_ 13 14 #include <stdint.h> 15 16 #include "absl/types/optional.h" 17 18 namespace rtc { 19 20 // Simple utility class for counting basic statistics (max./avg./variance) on 21 // stream of samples. 22 class SampleCounter { 23 public: 24 SampleCounter(); 25 ~SampleCounter(); 26 void Add(int sample); 27 absl::optional<int> Avg(int64_t min_required_samples) const; 28 absl::optional<int> Max() const; 29 absl::optional<int64_t> Sum(int64_t min_required_samples) const; 30 int64_t NumSamples() const; 31 void Reset(); 32 // Adds all the samples from the |other| SampleCounter as if they were all 33 // individually added using |Add(int)| method. 34 void Add(const SampleCounter& other); 35 36 protected: 37 int64_t sum_ = 0; 38 int64_t num_samples_ = 0; 39 absl::optional<int> max_; 40 }; 41 42 class SampleCounterWithVariance : public SampleCounter { 43 public: 44 SampleCounterWithVariance(); 45 ~SampleCounterWithVariance(); 46 void Add(int sample); 47 absl::optional<int64_t> Variance(int64_t min_required_samples) const; 48 void Reset(); 49 // Adds all the samples from the |other| SampleCounter as if they were all 50 // individually added using |Add(int)| method. 51 void Add(const SampleCounterWithVariance& other); 52 53 private: 54 int64_t sum_squared_ = 0; 55 }; 56 57 } // namespace rtc 58 #endif // RTC_BASE_NUMERICS_SAMPLE_COUNTER_H_ 59