| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_WEBRTC_AUDIO_DELAY_STATS_REPORTER_H_ |
| #define MEDIA_WEBRTC_AUDIO_DELAY_STATS_REPORTER_H_ |
| |
| #include <vector> |
| |
| #include "base/component_export.h" |
| #include "base/threading/thread_checker.h" |
| #include "base/time/time.h" |
| |
| namespace media { |
| |
| // Reports UMA stats for audio delays. The class may be created, deleted and |
| // called on different threads, though all calls must be on the same thread. The |
| // user must ensure that no calls are made after destruction. |
| class COMPONENT_EXPORT(MEDIA_WEBRTC) AudioDelayStatsReporter { |
| public: |
| // |variance_window_size| is the window size, that is the number of delay |
| // values, on which to calculate the variance. |
| AudioDelayStatsReporter(int variance_window_size); |
| |
| AudioDelayStatsReporter(const AudioDelayStatsReporter&) = delete; |
| AudioDelayStatsReporter& operator=(const AudioDelayStatsReporter&) = delete; |
| |
| virtual ~AudioDelayStatsReporter(); |
| |
| // Reports delay stats and stores delays. When the number of stored delays |
| // reaches the variance window size, variance stats are reported. |
| void ReportDelay(base::TimeDelta capture_delay, base::TimeDelta render_delay); |
| |
| private: |
| const int variance_window_size_; |
| |
| // Min and max values in the delay histograms. |
| const base::TimeDelta delay_histogram_min_; |
| const base::TimeDelta delay_histogram_max_; |
| |
| // Stores delay values. |
| std::vector<int> capture_delays_ms_; |
| std::vector<int> render_delays_ms_; |
| std::vector<int> total_delays_ms_; |
| |
| // Ensures that all function calls are done on the same thread. |
| THREAD_CHECKER(thread_checker_); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_WEBRTC_AUDIO_DELAY_STATS_REPORTER_H_ |