Move MoqtTrack code into a .cc file. PiperOrigin-RevId: 647676691
diff --git a/build/source_list.bzl b/build/source_list.bzl index bbe3b4c..d204605 100644 --- a/build/source_list.bzl +++ b/build/source_list.bzl
@@ -1527,6 +1527,7 @@ "quic/moqt/moqt_session_test.cc", "quic/moqt/moqt_subscribe_windows.cc", "quic/moqt/moqt_subscribe_windows_test.cc", + "quic/moqt/moqt_track.cc", "quic/moqt/moqt_track_test.cc", "quic/moqt/test_tools/moqt_simulator_harness.cc", "quic/moqt/tools/chat_client_bin.cc",
diff --git a/build/source_list.gni b/build/source_list.gni index 3429497..3556e72 100644 --- a/build/source_list.gni +++ b/build/source_list.gni
@@ -1531,6 +1531,7 @@ "src/quiche/quic/moqt/moqt_session_test.cc", "src/quiche/quic/moqt/moqt_subscribe_windows.cc", "src/quiche/quic/moqt/moqt_subscribe_windows_test.cc", + "src/quiche/quic/moqt/moqt_track.cc", "src/quiche/quic/moqt/moqt_track_test.cc", "src/quiche/quic/moqt/test_tools/moqt_simulator_harness.cc", "src/quiche/quic/moqt/tools/chat_client_bin.cc",
diff --git a/build/source_list.json b/build/source_list.json index 12fec03..2c75654 100644 --- a/build/source_list.json +++ b/build/source_list.json
@@ -1530,6 +1530,7 @@ "quiche/quic/moqt/moqt_session_test.cc", "quiche/quic/moqt/moqt_subscribe_windows.cc", "quiche/quic/moqt/moqt_subscribe_windows_test.cc", + "quiche/quic/moqt/moqt_track.cc", "quiche/quic/moqt/moqt_track_test.cc", "quiche/quic/moqt/test_tools/moqt_simulator_harness.cc", "quiche/quic/moqt/tools/chat_client_bin.cc",
diff --git a/quiche/quic/moqt/moqt_track.cc b/quiche/quic/moqt/moqt_track.cc new file mode 100644 index 0000000..d2644c8 --- /dev/null +++ b/quiche/quic/moqt/moqt_track.cc
@@ -0,0 +1,82 @@ +// Copyright 2024 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file + +#include "quiche/quic/moqt/moqt_track.h" + +#include <cstdint> + +#include "quiche/quic/moqt/moqt_messages.h" + +namespace moqt { + +void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group, + uint64_t start_object) { + QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) + << "Canceled track got subscription"; + windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object); +} + +void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group, + uint64_t start_object, uint64_t end_group) { + QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) + << "Canceled track got subscription"; + // The end object might be unknown. + auto it = max_object_ids_.find(end_group); + if (end_group >= next_sequence_.group) { + // Group is not fully published yet, so end object is unknown. + windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object, + end_group, UINT64_MAX); + return; + } + windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object, + end_group, it->second); +} + +void LocalTrack::AddWindow(uint64_t subscribe_id, uint64_t start_group, + uint64_t start_object, uint64_t end_group, + uint64_t end_object) { + QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) + << "Canceled track got subscription"; + windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object, + end_group, end_object); +} + +void LocalTrack::SentSequence(FullSequence sequence, MoqtObjectStatus status) { + QUICHE_DCHECK(max_object_ids_.find(sequence.group) == max_object_ids_.end() || + max_object_ids_[sequence.group] < sequence.object); + switch (status) { + case MoqtObjectStatus::kNormal: + case MoqtObjectStatus::kObjectDoesNotExist: + if (next_sequence_ <= sequence) { + next_sequence_ = sequence.next(); + } + break; + case MoqtObjectStatus::kGroupDoesNotExist: + max_object_ids_[sequence.group] = 0; + break; + case MoqtObjectStatus::kEndOfGroup: + max_object_ids_[sequence.group] = sequence.object; + if (next_sequence_ <= sequence) { + next_sequence_ = FullSequence(sequence.group + 1, 0); + } + break; + case MoqtObjectStatus::kEndOfTrack: + max_object_ids_[sequence.group] = sequence.object; + break; + default: + QUICHE_DCHECK(false); + return; + } +} + +bool RemoteTrack::CheckForwardingPreference( + MoqtForwardingPreference preference) { + if (forwarding_preference_.has_value()) { + return forwarding_preference_.value() == preference; + } + forwarding_preference_ = preference; + return true; +} + +} // namespace moqt
diff --git a/quiche/quic/moqt/moqt_track.h b/quiche/quic/moqt/moqt_track.h index e61dc8b..c9ece3f 100644 --- a/quiche/quic/moqt/moqt_track.h +++ b/quiche/quic/moqt/moqt_track.h
@@ -69,36 +69,14 @@ } void AddWindow(uint64_t subscribe_id, uint64_t start_group, - uint64_t start_object) { - QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) - << "Canceled track got subscription"; - windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object); - } + uint64_t start_object); void AddWindow(uint64_t subscribe_id, uint64_t start_group, - uint64_t start_object, uint64_t end_group) { - QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) - << "Canceled track got subscription"; - // The end object might be unknown. - auto it = max_object_ids_.find(end_group); - if (end_group >= next_sequence_.group) { - // Group is not fully published yet, so end object is unknown. - windows_.AddWindow(subscribe_id, next_sequence_, start_group, - start_object, end_group, UINT64_MAX); - return; - } - windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object, - end_group, it->second); - } + uint64_t start_object, uint64_t end_group); void AddWindow(uint64_t subscribe_id, uint64_t start_group, uint64_t start_object, uint64_t end_group, - uint64_t end_object) { - QUIC_BUG_IF(quic_bug_subscribe_to_canceled_track, announce_canceled_) - << "Canceled track got subscription"; - windows_.AddWindow(subscribe_id, next_sequence_, start_group, start_object, - end_group, end_object); - } + uint64_t end_object); void DeleteWindow(uint64_t subscribe_id) { windows_.RemoveWindow(subscribe_id); @@ -110,34 +88,7 @@ // Updates next_sequence_ if |sequence| is larger. Updates max_object_ids_ // if relevant. - void SentSequence(FullSequence sequence, MoqtObjectStatus status) { - QUICHE_DCHECK(max_object_ids_.find(sequence.group) == - max_object_ids_.end() || - max_object_ids_[sequence.group] < sequence.object); - switch (status) { - case MoqtObjectStatus::kNormal: - case MoqtObjectStatus::kObjectDoesNotExist: - if (next_sequence_ <= sequence) { - next_sequence_ = sequence.next(); - } - break; - case MoqtObjectStatus::kGroupDoesNotExist: - max_object_ids_[sequence.group] = 0; - break; - case MoqtObjectStatus::kEndOfGroup: - max_object_ids_[sequence.group] = sequence.object; - if (next_sequence_ <= sequence) { - next_sequence_ = FullSequence(sequence.group + 1, 0); - } - break; - case MoqtObjectStatus::kEndOfTrack: - max_object_ids_[sequence.group] = sequence.object; - break; - default: - QUICHE_DCHECK(false); - return; - } - } + void SentSequence(FullSequence sequence, MoqtObjectStatus status); bool HasSubscriber() const { return !windows_.IsEmpty(); } @@ -213,13 +164,7 @@ // forwarding preference to the value indicated by the incoming encoding. // Otherwise, returns true if the incoming object does not violate the rule // that the preference is consistent. - bool CheckForwardingPreference(MoqtForwardingPreference preference) { - if (forwarding_preference_.has_value()) { - return forwarding_preference_.value() == preference; - } - forwarding_preference_ = preference; - return true; - } + bool CheckForwardingPreference(MoqtForwardingPreference preference); private: // TODO: There is no accounting for the number of outstanding subscribes,