summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/api/test/peerconnection_quality_test_fixture.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--third_party/libwebrtc/api/test/peerconnection_quality_test_fixture.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/third_party/libwebrtc/api/test/peerconnection_quality_test_fixture.h b/third_party/libwebrtc/api/test/peerconnection_quality_test_fixture.h
new file mode 100644
index 0000000000..74470cdf86
--- /dev/null
+++ b/third_party/libwebrtc/api/test/peerconnection_quality_test_fixture.h
@@ -0,0 +1,142 @@
+/*
+ * 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 API_TEST_PEERCONNECTION_QUALITY_TEST_FIXTURE_H_
+#define API_TEST_PEERCONNECTION_QUALITY_TEST_FIXTURE_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <string>
+#include <utility>
+#include <vector>
+
+#include "absl/base/macros.h"
+#include "absl/memory/memory.h"
+#include "absl/strings/string_view.h"
+#include "absl/types/optional.h"
+#include "api/array_view.h"
+#include "api/async_resolver_factory.h"
+#include "api/audio/audio_mixer.h"
+#include "api/call/call_factory_interface.h"
+#include "api/fec_controller.h"
+#include "api/function_view.h"
+#include "api/media_stream_interface.h"
+#include "api/peer_connection_interface.h"
+#include "api/rtc_event_log/rtc_event_log_factory_interface.h"
+#include "api/rtp_parameters.h"
+#include "api/task_queue/task_queue_factory.h"
+#include "api/test/audio_quality_analyzer_interface.h"
+#include "api/test/frame_generator_interface.h"
+#include "api/test/pclf/media_configuration.h"
+#include "api/test/pclf/media_quality_test_params.h"
+#include "api/test/pclf/peer_configurer.h"
+#include "api/test/peer_network_dependencies.h"
+#include "api/test/simulated_network.h"
+#include "api/test/stats_observer_interface.h"
+#include "api/test/track_id_stream_info_map.h"
+#include "api/test/video/video_frame_writer.h"
+#include "api/test/video_quality_analyzer_interface.h"
+#include "api/transport/network_control.h"
+#include "api/units/time_delta.h"
+#include "api/video_codecs/video_decoder_factory.h"
+#include "api/video_codecs/video_encoder.h"
+#include "api/video_codecs/video_encoder_factory.h"
+#include "media/base/media_constants.h"
+#include "modules/audio_processing/include/audio_processing.h"
+#include "rtc_base/checks.h"
+#include "rtc_base/network.h"
+#include "rtc_base/rtc_certificate_generator.h"
+#include "rtc_base/ssl_certificate.h"
+#include "rtc_base/thread.h"
+
+namespace webrtc {
+namespace webrtc_pc_e2e {
+
+// API is in development. Can be changed/removed without notice.
+class PeerConnectionE2EQualityTestFixture {
+ public:
+ // Represent an entity that will report quality metrics after test.
+ class QualityMetricsReporter : public StatsObserverInterface {
+ public:
+ virtual ~QualityMetricsReporter() = default;
+
+ // Invoked by framework after peer connection factory and peer connection
+ // itself will be created but before offer/answer exchange will be started.
+ // `test_case_name` is name of test case, that should be used to report all
+ // metrics.
+ // `reporter_helper` is a pointer to a class that will allow track_id to
+ // stream_id matching. The caller is responsible for ensuring the
+ // TrackIdStreamInfoMap will be valid from Start() to
+ // StopAndReportResults().
+ virtual void Start(absl::string_view test_case_name,
+ const TrackIdStreamInfoMap* reporter_helper) = 0;
+
+ // Invoked by framework after call is ended and peer connection factory and
+ // peer connection are destroyed.
+ virtual void StopAndReportResults() = 0;
+ };
+
+ // Represents single participant in call and can be used to perform different
+ // in-call actions. Might be extended in future.
+ class PeerHandle {
+ public:
+ virtual ~PeerHandle() = default;
+ };
+
+ virtual ~PeerConnectionE2EQualityTestFixture() = default;
+
+ // Add activity that will be executed on the best effort at least after
+ // `target_time_since_start` after call will be set up (after offer/answer
+ // exchange, ICE gathering will be done and ICE candidates will passed to
+ // remote side). `func` param is amount of time spent from the call set up.
+ virtual void ExecuteAt(TimeDelta target_time_since_start,
+ std::function<void(TimeDelta)> func) = 0;
+ // Add activity that will be executed every `interval` with first execution
+ // on the best effort at least after `initial_delay_since_start` after call
+ // will be set up (after all participants will be connected). `func` param is
+ // amount of time spent from the call set up.
+ virtual void ExecuteEvery(TimeDelta initial_delay_since_start,
+ TimeDelta interval,
+ std::function<void(TimeDelta)> func) = 0;
+
+ // Add stats reporter entity to observe the test.
+ virtual void AddQualityMetricsReporter(
+ std::unique_ptr<QualityMetricsReporter> quality_metrics_reporter) = 0;
+
+ // Add a new peer to the call and return an object through which caller
+ // can configure peer's behavior.
+ // `network_dependencies` are used to provide networking for peer's peer
+ // connection. Members must be non-null.
+ // `configurer` function will be used to configure peer in the call.
+ virtual PeerHandle* AddPeer(std::unique_ptr<PeerConfigurer> configurer) = 0;
+
+ // Runs the media quality test, which includes setting up the call with
+ // configured participants, running it according to provided `run_params` and
+ // terminating it properly at the end. During call duration media quality
+ // metrics are gathered, which are then reported to stdout and (if configured)
+ // to the json/protobuf output file through the WebRTC perf test results
+ // reporting system.
+ virtual void Run(RunParams run_params) = 0;
+
+ // Returns real test duration - the time of test execution measured during
+ // test. Client must call this method only after test is finished (after
+ // Run(...) method returned). Test execution time is time from end of call
+ // setup (offer/answer, ICE candidates exchange done and ICE connected) to
+ // start of call tear down (PeerConnection closed).
+ virtual TimeDelta GetRealTestDuration() const = 0;
+};
+
+} // namespace webrtc_pc_e2e
+} // namespace webrtc
+
+#endif // API_TEST_PEERCONNECTION_QUALITY_TEST_FIXTURE_H_