Implement DefaultAudioQualityAnalyzer.
The DefaultAudioQualityAnalyzer will read stats reports (temporarily
using the old PeerConnectionInterface::GetStats) and for each audio
stream it will collect some NetEq related stats.
When DefaultAudioQualityAnalyzer::Stop is invoked by the framework,
it will report the following metrics:
- expand_rate
- accelerate_rate
- preemptive_rate
- speech_expand_rate
- preferred_buffer_size_ms
Bug: webrtc:10138
Change-Id: Ie493456fcb9ed86455b12dabdab98a317387ef46
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125980
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27474}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 0d26945..ba7570d 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -213,6 +213,13 @@
]
}
+rtc_source_set("track_id_stream_label_map") {
+ visibility = [ "*" ]
+ sources = [
+ "test/track_id_stream_label_map.h",
+ ]
+}
+
rtc_source_set("audio_quality_analyzer_api") {
visibility = [ "*" ]
testonly = true
@@ -222,6 +229,7 @@
deps = [
":stats_observer_interface",
+ ":track_id_stream_label_map",
]
}
diff --git a/api/test/audio_quality_analyzer_interface.h b/api/test/audio_quality_analyzer_interface.h
index 1f67ce6..88392d7 100644
--- a/api/test/audio_quality_analyzer_interface.h
+++ b/api/test/audio_quality_analyzer_interface.h
@@ -14,6 +14,7 @@
#include <string>
#include "api/test/stats_observer_interface.h"
+#include "api/test/track_id_stream_label_map.h"
namespace webrtc {
namespace webrtc_pc_e2e {
@@ -23,10 +24,18 @@
public:
~AudioQualityAnalyzerInterface() override = default;
- // Will be called by framework before test.
+ // Will be called by the framework before the test.
// |test_case_name| is name of test case, that should be used to report all
// audio metrics.
- virtual void Start(std::string test_case_name) = 0;
+ // |analyzer_helper| is a pointer to a class that will allow track_id to
+ // stream_id matching. The caller is responsible for ensuring the
+ // AnalyzerHelper outlives the instance of the AudioQualityAnalyzerInterface.
+ virtual void Start(std::string test_case_name,
+ TrackIdStreamLabelMap* analyzer_helper) = 0;
+
+ // Will be called by the framework at the end of the test. The analyzer
+ // has to finalize all its stats and it should report them.
+ virtual void Stop() = 0;
};
} // namespace webrtc_pc_e2e
diff --git a/api/test/track_id_stream_label_map.h b/api/test/track_id_stream_label_map.h
new file mode 100644
index 0000000..9f8e121
--- /dev/null
+++ b/api/test/track_id_stream_label_map.h
@@ -0,0 +1,36 @@
+/*
+ * 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.
+ */
+
+#ifndef API_TEST_TRACK_ID_STREAM_LABEL_MAP_H_
+#define API_TEST_TRACK_ID_STREAM_LABEL_MAP_H_
+
+#include <string>
+
+namespace webrtc {
+namespace webrtc_pc_e2e {
+
+// Instances of |TrackIdStreamLabelMap| provide bookkeeing capabilities that
+// are useful to associate stats reports track_ids to the remote stream_id.
+class TrackIdStreamLabelMap {
+ public:
+ virtual ~TrackIdStreamLabelMap() = default;
+
+ // This method must be called on the same thread where
+ // StatsObserverInterface::OnStatsReports is invoked.
+ // Returns a reference to a stream label owned by the TrackIdStreamLabelMap.
+ // Precondition: |track_id| must be already mapped to a stream_label.
+ virtual const std::string& GetStreamLabelFromTrackId(
+ const std::string& track_id) const = 0;
+};
+
+} // namespace webrtc_pc_e2e
+} // namespace webrtc
+
+#endif // API_TEST_TRACK_ID_STREAM_LABEL_MAP_H_