/* * Copyright (c) 2018 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. */ #ifndef MODULES_AUDIO_PROCESSING_AEC3_API_CALL_JITTER_METRICS_H_ #define MODULES_AUDIO_PROCESSING_AEC3_API_CALL_JITTER_METRICS_H_ namespace webrtc { // Stores data for reporting metrics on the API call jitter. class ApiCallJitterMetrics { public: class Jitter { public: Jitter(); void Update(int num_api_calls_in_a_row); void Reset(); int min() const { return min_; } int max() const { return max_; } private: int max_; int min_; }; ApiCallJitterMetrics() { Reset(); } // Update metrics for render API call. void ReportRenderCall(); // Update and periodically report metrics for capture API call. void ReportCaptureCall(); // Methods used only for testing. const Jitter& render_jitter() const { return render_jitter_; } const Jitter& capture_jitter() const { return capture_jitter_; } bool WillReportMetricsAtNextCapture() const; private: void Reset(); Jitter render_jitter_; Jitter capture_jitter_; int num_api_calls_in_a_row_ = 0; int frames_since_last_report_ = 0; bool last_call_was_render_ = false; bool proper_call_observed_ = false; }; } // namespace webrtc #endif // MODULES_AUDIO_PROCESSING_AEC3_API_CALL_JITTER_METRICS_H_