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),