Plumb OBJECT_ACK time scale into the bitrate adjuster. PiperOrigin-RevId: 788387987
diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster.cc b/quiche/quic/moqt/moqt_bitrate_adjuster.cc index 8955759..fbcc224 100644 --- a/quiche/quic/moqt/moqt_bitrate_adjuster.cc +++ b/quiche/quic/moqt/moqt_bitrate_adjuster.cc
@@ -6,6 +6,7 @@ #include <cstdint> #include <cstdlib> +#include <optional> #include "quiche/quic/core/quic_bandwidth.h" #include "quiche/quic/core/quic_time.h" @@ -66,12 +67,14 @@ BitrateAdjustmentType::kDown); } -void MoqtBitrateAdjuster::OnObjectAckSupportKnown(bool supported) { - if (!supported) { +void MoqtBitrateAdjuster::OnObjectAckSupportKnown( + std::optional<quic::QuicTimeDelta> time_window) { + if (!time_window.has_value() || *time_window <= QuicTimeDelta::Zero()) { QUICHE_DLOG(WARNING) << "OBJECT_ACK not supported; bitrate adjustments will not work."; return; } + time_window_ = *time_window; Start(); }
diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster.h b/quiche/quic/moqt/moqt_bitrate_adjuster.h index b9a9487..135373a 100644 --- a/quiche/quic/moqt/moqt_bitrate_adjuster.h +++ b/quiche/quic/moqt/moqt_bitrate_adjuster.h
@@ -6,6 +6,7 @@ #define QUICHE_QUIC_MOQT_MOQT_BITRATE_ADJUSTER_H_ #include <cstdint> +#include <optional> #include "quiche/quic/core/quic_bandwidth.h" #include "quiche/quic/core/quic_clock.h" @@ -69,7 +70,8 @@ : clock_(clock), session_(session), adjustable_(adjustable) {} // MoqtPublishingMonitorInterface implementation. - void OnObjectAckSupportKnown(bool supported) override; + void OnObjectAckSupportKnown( + std::optional<quic::QuicTimeDelta> time_window) override; void OnObjectAckReceived(uint64_t group_id, uint64_t object_id, quic::QuicTimeDelta delta_from_deadline) override; @@ -84,6 +86,7 @@ BitrateAdjustable* adjustable_; // Not owned. MoqtBitrateAdjusterParameters parameters_; quic::QuicTime start_time_ = quic::QuicTime::Zero(); + quic::QuicTimeDelta time_window_ = quic::QuicTimeDelta::Zero(); }; // Given a suggestion to change bitrate `old_bitrate` to `new_bitrate` with the
diff --git a/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc b/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc index c6b499e..47ef36d 100644 --- a/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc +++ b/quiche/quic/moqt/moqt_bitrate_adjuster_test.cc
@@ -42,6 +42,7 @@ constexpr QuicBandwidth kDefaultBitrate = QuicBandwidth::FromBitsPerSecond(2000); constexpr QuicTimeDelta kDefaultRtt = QuicTimeDelta::FromMilliseconds(20); +constexpr QuicTimeDelta kDefaultTimeScale = QuicTimeDelta::FromSeconds(1); class MoqtBitrateAdjusterTest : public quiche::test::QuicheTest { protected: @@ -55,7 +56,7 @@ }); clock_.AdvanceTime(quic::QuicTimeDelta::FromSeconds(10)); - adjuster_.OnObjectAckSupportKnown(true); + adjuster_.OnObjectAckSupportKnown(kDefaultTimeScale); } MockBitrateAdjustable adjustable_;
diff --git a/quiche/quic/moqt/moqt_integration_test.cc b/quiche/quic/moqt/moqt_integration_test.cc index e01317e..3b6af85 100644 --- a/quiche/quic/moqt/moqt_integration_test.cc +++ b/quiche/quic/moqt/moqt_integration_test.cc
@@ -668,7 +668,7 @@ parameters.oack_window_size = quic::QuicTimeDelta::FromMilliseconds(100); client_->session()->SubscribeCurrentObject(full_track_name, &client_visitor, parameters); - EXPECT_CALL(monitoring, OnObjectAckSupportKnown(true)); + EXPECT_CALL(monitoring, OnObjectAckSupportKnown(parameters.oack_window_size)); EXPECT_CALL( monitoring, OnObjectAckReceived(10, 20, quic::QuicTimeDelta::FromMicroseconds(-123)));
diff --git a/quiche/quic/moqt/moqt_session.cc b/quiche/quic/moqt/moqt_session.cc index 76f09e0..eb11c26 100644 --- a/quiche/quic/moqt/moqt_session.cc +++ b/quiche/quic/moqt/moqt_session.cc
@@ -1907,7 +1907,7 @@ monitoring_interface_(monitoring_interface) { if (monitoring_interface_ != nullptr) { monitoring_interface_->OnObjectAckSupportKnown( - subscribe.parameters.oack_window_size.has_value()); + subscribe.parameters.oack_window_size); } QUIC_DLOG(INFO) << ENDPOINT << "Created subscription for " << subscribe.full_track_name;
diff --git a/quiche/quic/moqt/moqt_session.h b/quiche/quic/moqt/moqt_session.h index e3166a0..25c5ae2 100644 --- a/quiche/quic/moqt/moqt_session.h +++ b/quiche/quic/moqt/moqt_session.h
@@ -62,7 +62,8 @@ public: virtual ~MoqtPublishingMonitorInterface() = default; - virtual void OnObjectAckSupportKnown(bool supported) = 0; + virtual void OnObjectAckSupportKnown( + std::optional<quic::QuicTimeDelta> time_window) = 0; virtual void OnObjectAckReceived(uint64_t group_id, uint64_t object_id, quic::QuicTimeDelta delta_from_deadline) = 0; };
diff --git a/quiche/quic/moqt/tools/moqt_mock_visitor.h b/quiche/quic/moqt/tools/moqt_mock_visitor.h index f0be1c8..ab2943c 100644 --- a/quiche/quic/moqt/tools/moqt_mock_visitor.h +++ b/quiche/quic/moqt/tools/moqt_mock_visitor.h
@@ -106,7 +106,8 @@ class MockPublishingMonitorInterface : public MoqtPublishingMonitorInterface { public: - MOCK_METHOD(void, OnObjectAckSupportKnown, (bool supported), (override)); + MOCK_METHOD(void, OnObjectAckSupportKnown, + (std::optional<quic::QuicTimeDelta> time_window), (override)); MOCK_METHOD(void, OnObjectAckReceived, (uint64_t group_id, uint64_t object_id, quic::QuicTimeDelta delta_from_deadline),