diff --git a/webrtc/modules/congestion_controller/send_side_congestion_controller.cc b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc index 782c060f00..e0918d7b76 100644 --- a/webrtc/modules/congestion_controller/send_side_congestion_controller.cc +++ b/webrtc/modules/congestion_controller/send_side_congestion_controller.cc @@ -53,8 +53,8 @@ SendSideCongestionController::SendSideCongestionController( clock, observer, event_log, - std::unique_ptr(new PacedSender(clock, packet_router))) { -} + std::unique_ptr( + new PacedSender(clock, packet_router, event_log))) {} SendSideCongestionController::SendSideCongestionController( const Clock* clock, diff --git a/webrtc/modules/pacing/BUILD.gn b/webrtc/modules/pacing/BUILD.gn index 88cb864541..ea16e8e2a3 100644 --- a/webrtc/modules/pacing/BUILD.gn +++ b/webrtc/modules/pacing/BUILD.gn @@ -31,6 +31,7 @@ rtc_static_library("pacing") { "../../system_wrappers", "../rtp_rtcp", "../utility", + "//webrtc/logging:rtc_event_log_api", ] } diff --git a/webrtc/modules/pacing/DEPS b/webrtc/modules/pacing/DEPS index 2805958070..e4b8c616db 100644 --- a/webrtc/modules/pacing/DEPS +++ b/webrtc/modules/pacing/DEPS @@ -1,4 +1,5 @@ include_rules = [ "+webrtc/base", "+webrtc/system_wrappers", + "+webrtc/logging/rtc_event_log" ] diff --git a/webrtc/modules/pacing/bitrate_prober.cc b/webrtc/modules/pacing/bitrate_prober.cc index dd9ee33257..e4de4a8dad 100644 --- a/webrtc/modules/pacing/bitrate_prober.cc +++ b/webrtc/modules/pacing/bitrate_prober.cc @@ -14,6 +14,7 @@ #include "webrtc/base/checks.h" #include "webrtc/base/logging.h" +#include "webrtc/logging/rtc_event_log/rtc_event_log.h" #include "webrtc/modules/pacing/paced_sender.h" namespace webrtc { @@ -45,10 +46,13 @@ constexpr int64_t kProbeClusterTimeoutMs = 5000; } // namespace -BitrateProber::BitrateProber() +BitrateProber::BitrateProber() : BitrateProber(nullptr) {} + +BitrateProber::BitrateProber(RtcEventLog* event_log) : probing_state_(ProbingState::kDisabled), next_probe_time_ms_(-1), - next_cluster_id_(0) { + next_cluster_id_(0), + event_log_(event_log) { SetEnabled(true); } @@ -95,6 +99,11 @@ void BitrateProber::CreateProbeCluster(int bitrate_bps, int64_t now_ms) { cluster.pace_info.send_bitrate_bps = bitrate_bps; cluster.pace_info.probe_cluster_id = next_cluster_id_++; clusters_.push(cluster); + if (event_log_) + event_log_->LogProbeClusterCreated( + cluster.pace_info.probe_cluster_id, cluster.pace_info.send_bitrate_bps, + cluster.pace_info.probe_cluster_min_probes, + cluster.pace_info.probe_cluster_min_bytes); LOG(LS_INFO) << "Probe cluster (bitrate:min bytes:min packets): (" << cluster.pace_info.send_bitrate_bps << ":" diff --git a/webrtc/modules/pacing/bitrate_prober.h b/webrtc/modules/pacing/bitrate_prober.h index 0690750bbd..510b2bd568 100644 --- a/webrtc/modules/pacing/bitrate_prober.h +++ b/webrtc/modules/pacing/bitrate_prober.h @@ -18,12 +18,14 @@ #include "webrtc/typedefs.h" namespace webrtc { +class RtcEventLog; // Note that this class isn't thread-safe by itself and therefore relies // on being protected by the caller. class BitrateProber { public: BitrateProber(); + explicit BitrateProber(RtcEventLog* event_log); void SetEnabled(bool enable); @@ -100,6 +102,7 @@ class BitrateProber { int64_t next_probe_time_ms_; int next_cluster_id_; + RtcEventLog* const event_log_; }; } // namespace webrtc diff --git a/webrtc/modules/pacing/mock/mock_paced_sender.h b/webrtc/modules/pacing/mock/mock_paced_sender.h index 1eee3f9f75..aad58c715f 100644 --- a/webrtc/modules/pacing/mock/mock_paced_sender.h +++ b/webrtc/modules/pacing/mock/mock_paced_sender.h @@ -21,7 +21,8 @@ namespace webrtc { class MockPacedSender : public PacedSender { public: - MockPacedSender() : PacedSender(Clock::GetRealTimeClock(), nullptr) {} + MockPacedSender() + : PacedSender(Clock::GetRealTimeClock(), nullptr, nullptr) {} MOCK_METHOD6(SendPacket, bool(Priority priority, uint32_t ssrc, uint16_t sequence_number, diff --git a/webrtc/modules/pacing/paced_sender.cc b/webrtc/modules/pacing/paced_sender.cc index 0d7b2c012c..96a6a8860e 100644 --- a/webrtc/modules/pacing/paced_sender.cc +++ b/webrtc/modules/pacing/paced_sender.cc @@ -247,7 +247,9 @@ class IntervalBudget { const int64_t PacedSender::kMaxQueueLengthMs = 2000; const float PacedSender::kDefaultPaceMultiplier = 2.5f; -PacedSender::PacedSender(const Clock* clock, PacketSender* packet_sender) +PacedSender::PacedSender(const Clock* clock, + PacketSender* packet_sender, + RtcEventLog* event_log) : clock_(clock), packet_sender_(packet_sender), alr_detector_(new AlrDetector()), @@ -255,7 +257,7 @@ PacedSender::PacedSender(const Clock* clock, PacketSender* packet_sender) paused_(false), media_budget_(new paced_sender::IntervalBudget(0)), padding_budget_(new paced_sender::IntervalBudget(0)), - prober_(new BitrateProber()), + prober_(new BitrateProber(event_log)), probing_send_failure_(false), estimated_bitrate_bps_(0), min_send_bitrate_kbps_(0u), diff --git a/webrtc/modules/pacing/paced_sender.h b/webrtc/modules/pacing/paced_sender.h index e69c1d26b8..320e62f076 100644 --- a/webrtc/modules/pacing/paced_sender.h +++ b/webrtc/modules/pacing/paced_sender.h @@ -27,6 +27,7 @@ class BitrateProber; class Clock; class CriticalSectionWrapper; class ProbeClusterCreatedObserver; +class RtcEventLog; namespace paced_sender { class IntervalBudget; @@ -68,7 +69,9 @@ class PacedSender : public Module, public RtpPacketSender { // overshoots from the encoder. static const float kDefaultPaceMultiplier; - PacedSender(const Clock* clock, PacketSender* packet_sender); + PacedSender(const Clock* clock, + PacketSender* packet_sender, + RtcEventLog* event_log); virtual ~PacedSender(); diff --git a/webrtc/modules/pacing/paced_sender_unittest.cc b/webrtc/modules/pacing/paced_sender_unittest.cc index 62359785ae..cac01b8484 100644 --- a/webrtc/modules/pacing/paced_sender_unittest.cc +++ b/webrtc/modules/pacing/paced_sender_unittest.cc @@ -106,7 +106,7 @@ class PacedSenderTest : public ::testing::Test { PacedSenderTest() : clock_(123456) { srand(0); // Need to initialize PacedSender after we initialize clock. - send_bucket_.reset(new PacedSender(&clock_, &callback_)); + send_bucket_.reset(new PacedSender(&clock_, &callback_, nullptr)); send_bucket_->CreateProbeCluster(kFirstClusterBps); send_bucket_->CreateProbeCluster(kSecondClusterBps); // Default to bitrate probing disabled for testing purposes. Probing tests @@ -410,7 +410,7 @@ TEST_F(PacedSenderTest, VerifyAverageBitrateVaryingMediaPayload) { const int kTimeStep = 5; const int64_t kBitrateWindow = 10000; PacedSenderPadding callback; - send_bucket_.reset(new PacedSender(&clock_, &callback)); + send_bucket_.reset(new PacedSender(&clock_, &callback, nullptr)); send_bucket_->SetProbingEnabled(false); send_bucket_->SetEstimatedBitrate(kTargetBitrateBps); @@ -805,7 +805,7 @@ TEST_F(PacedSenderTest, ProbingWithInsertedPackets) { uint16_t sequence_number = 1234; PacedSenderProbing packet_sender; - send_bucket_.reset(new PacedSender(&clock_, &packet_sender)); + send_bucket_.reset(new PacedSender(&clock_, &packet_sender, nullptr)); send_bucket_->CreateProbeCluster(kFirstClusterBps); send_bucket_->CreateProbeCluster(kSecondClusterBps); send_bucket_->SetEstimatedBitrate(kInitialBitrateBps); @@ -851,7 +851,7 @@ TEST_F(PacedSenderTest, ProbingWithPaddingSupport) { uint16_t sequence_number = 1234; PacedSenderProbing packet_sender; - send_bucket_.reset(new PacedSender(&clock_, &packet_sender)); + send_bucket_.reset(new PacedSender(&clock_, &packet_sender, nullptr)); send_bucket_->CreateProbeCluster(kFirstClusterBps); send_bucket_->SetEstimatedBitrate(kInitialBitrateBps); diff --git a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc index f0f57b4e70..e962c591a7 100644 --- a/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc +++ b/webrtc/modules/remote_bitrate_estimator/test/packet_sender.cc @@ -156,8 +156,7 @@ uint32_t VideoSender::TargetBitrateKbps() { PacedVideoSender::PacedVideoSender(PacketProcessorListener* listener, VideoSource* source, BandwidthEstimatorType estimator) - : VideoSender(listener, source, estimator), - pacer_(&clock_, this) { + : VideoSender(listener, source, estimator), pacer_(&clock_, this, nullptr) { modules_.push_back(&pacer_); pacer_.SetEstimatedBitrate(source->bits_per_second()); }