| /* | |
| * 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 <functional> | |
| #include <memory> | |
| #include "absl/strings/string_view.h" | |
| #include "api/test/pclf/media_quality_test_params.h" | |
| #include "api/test/pclf/peer_configurer.h" | |
| #include "api/test/stats_observer_interface.h" | |
| #include "api/test/track_id_stream_info_map.h" | |
| #include "api/units/time_delta.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: | |
| ~QualityMetricsReporter() override = 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_ |