/* * Copyright (c) 2026 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 VIDEO_TIMING_SIMULATOR_RTT_SIMULATOR_H_ #define VIDEO_TIMING_SIMULATOR_RTT_SIMULATOR_H_ #include #include #include "absl/base/nullability.h" #include "api/environment/environment.h" #include "api/sequence_checker.h" #include "api/task_queue/task_queue_base.h" #include "api/units/time_delta.h" #include "api/units/timestamp.h" #include "logging/rtc_event_log/events/logged_rtp_rtcp.h" #include "modules/include/module_common_types.h" #include "rtc_base/thread_annotations.h" #include "video/call_stats2.h" #include "video/timing/simulator/rtcp_rtt_calculator.h" namespace webrtc::video_timing_simulator { class SimulatedRttCallback { public: virtual ~SimulatedRttCallback() = default; virtual void OnMaxRttUpdate(TimeDelta max_rtt) = 0; }; // Simulates session-level Round Trip Time (RTT) estimation by processing logged // RTCP packets. It uses `RtcpRttCalculator` to calculate RTT samples from // Sender Reports (SR), Receiver Reports (RR), and Extended Reports (XR), // feeds them into `CallStats` to calculate moving averages/maxima, and // propagates the updates back to the driver via `SimulatedRttCallback`. class RttSimulator : public CallStatsObserver { public: RttSimulator(const Environment& env, TaskQueueBase* absl_nonnull simulator_queue, SimulatedRttCallback* absl_nonnull callback); ~RttSimulator() override; RttSimulator(const RttSimulator&) = delete; RttSimulator& operator=(const RttSimulator&) = delete; // Handlers for logged RTCP packets. void OnOutgoingSenderReport(const LoggedRtcpPacketSenderReport& packet); void OnOutgoingExtendedReports(const LoggedRtcpPacketExtendedReports& packet); void OnIncomingSenderReport(const LoggedRtcpPacketSenderReport& packet); void OnIncomingReceiverReport(const LoggedRtcpPacketReceiverReport& packet); void OnIncomingExtendedReports(const LoggedRtcpPacketExtendedReports& packet); // Implements `CallStatsObserver`. void OnRttUpdate(int64_t /*avg_rtt_ms*/, int64_t max_rtt_ms) override; private: void UpdateCallStats(const std::vector& rtts, Timestamp now); // Environment. SequenceChecker sequence_checker_; const Environment env_; // Worker objects. RtcpRttCalculator rtt_calculator_ RTC_GUARDED_BY(sequence_checker_); internal::CallStats call_stats_ RTC_GUARDED_BY(sequence_checker_); // Outputs. SimulatedRttCallback& simulated_rtt_cb_; }; } // namespace webrtc::video_timing_simulator #endif // VIDEO_TIMING_SIMULATOR_RTT_SIMULATOR_H_