Skip to content

Commit 9843feb

Browse files
martindukecopybara-github
authored andcommitted
Get rid of moqt::SubscribeWindow.
This is a legacy of when there were multiple windows on a single subscribe. Also, make relative joining fetch set the window start correctly. PiperOrigin-RevId: 902630468
1 parent 47f25a8 commit 9843feb

16 files changed

Lines changed: 153 additions & 206 deletions

build/source_list.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,7 +1601,7 @@ moqt_hdrs = [
16011601
"quic/moqt/moqt_session.h",
16021602
"quic/moqt/moqt_session_callbacks.h",
16031603
"quic/moqt/moqt_session_interface.h",
1604-
"quic/moqt/moqt_subscribe_windows.h",
1604+
"quic/moqt/moqt_stream_map.h",
16051605
"quic/moqt/moqt_trace_recorder.h",
16061606
"quic/moqt/moqt_track.h",
16071607
"quic/moqt/moqt_types.h",
@@ -1632,7 +1632,7 @@ moqt_srcs = [
16321632
"quic/moqt/moqt_relay_publisher.cc",
16331633
"quic/moqt/moqt_relay_track_publisher.cc",
16341634
"quic/moqt/moqt_session.cc",
1635-
"quic/moqt/moqt_subscribe_windows.cc",
1635+
"quic/moqt/moqt_stream_map.cc",
16361636
"quic/moqt/moqt_trace_recorder.cc",
16371637
"quic/moqt/moqt_track.cc",
16381638
"quic/moqt/relay_namespace_tree.cc",
@@ -1662,7 +1662,7 @@ moqt_test_srcs = [
16621662
"quic/moqt/moqt_relay_publisher_test.cc",
16631663
"quic/moqt/moqt_relay_track_publisher_test.cc",
16641664
"quic/moqt/moqt_session_test.cc",
1665-
"quic/moqt/moqt_subscribe_windows_test.cc",
1665+
"quic/moqt/moqt_stream_map_test.cc",
16661666
"quic/moqt/moqt_track_test.cc",
16671667
"quic/moqt/relay_namespace_tree_test.cc",
16681668
"quic/moqt/session_namespace_tree_test.cc",

build/source_list.gni

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1605,7 +1605,7 @@ moqt_hdrs = [
16051605
"src/quiche/quic/moqt/moqt_session.h",
16061606
"src/quiche/quic/moqt/moqt_session_callbacks.h",
16071607
"src/quiche/quic/moqt/moqt_session_interface.h",
1608-
"src/quiche/quic/moqt/moqt_subscribe_windows.h",
1608+
"src/quiche/quic/moqt/moqt_stream_map.h",
16091609
"src/quiche/quic/moqt/moqt_trace_recorder.h",
16101610
"src/quiche/quic/moqt/moqt_track.h",
16111611
"src/quiche/quic/moqt/moqt_types.h",
@@ -1636,7 +1636,7 @@ moqt_srcs = [
16361636
"src/quiche/quic/moqt/moqt_relay_publisher.cc",
16371637
"src/quiche/quic/moqt/moqt_relay_track_publisher.cc",
16381638
"src/quiche/quic/moqt/moqt_session.cc",
1639-
"src/quiche/quic/moqt/moqt_subscribe_windows.cc",
1639+
"src/quiche/quic/moqt/moqt_stream_map.cc",
16401640
"src/quiche/quic/moqt/moqt_trace_recorder.cc",
16411641
"src/quiche/quic/moqt/moqt_track.cc",
16421642
"src/quiche/quic/moqt/relay_namespace_tree.cc",
@@ -1667,7 +1667,7 @@ moqt_test_srcs = [
16671667
"src/quiche/quic/moqt/moqt_relay_publisher_test.cc",
16681668
"src/quiche/quic/moqt/moqt_relay_track_publisher_test.cc",
16691669
"src/quiche/quic/moqt/moqt_session_test.cc",
1670-
"src/quiche/quic/moqt/moqt_subscribe_windows_test.cc",
1670+
"src/quiche/quic/moqt/moqt_stream_map_test.cc",
16711671
"src/quiche/quic/moqt/moqt_track_test.cc",
16721672
"src/quiche/quic/moqt/relay_namespace_tree_test.cc",
16731673
"src/quiche/quic/moqt/session_namespace_tree_test.cc",

build/source_list.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,7 +1604,7 @@
16041604
"quiche/quic/moqt/moqt_session.h",
16051605
"quiche/quic/moqt/moqt_session_callbacks.h",
16061606
"quiche/quic/moqt/moqt_session_interface.h",
1607-
"quiche/quic/moqt/moqt_subscribe_windows.h",
1607+
"quiche/quic/moqt/moqt_stream_map.h",
16081608
"quiche/quic/moqt/moqt_trace_recorder.h",
16091609
"quiche/quic/moqt/moqt_track.h",
16101610
"quiche/quic/moqt/moqt_types.h",
@@ -1635,7 +1635,7 @@
16351635
"quiche/quic/moqt/moqt_relay_publisher.cc",
16361636
"quiche/quic/moqt/moqt_relay_track_publisher.cc",
16371637
"quiche/quic/moqt/moqt_session.cc",
1638-
"quiche/quic/moqt/moqt_subscribe_windows.cc",
1638+
"quiche/quic/moqt/moqt_stream_map.cc",
16391639
"quiche/quic/moqt/moqt_trace_recorder.cc",
16401640
"quiche/quic/moqt/moqt_track.cc",
16411641
"quiche/quic/moqt/relay_namespace_tree.cc",
@@ -1666,7 +1666,7 @@
16661666
"quiche/quic/moqt/moqt_relay_publisher_test.cc",
16671667
"quiche/quic/moqt/moqt_relay_track_publisher_test.cc",
16681668
"quiche/quic/moqt/moqt_session_test.cc",
1669-
"quiche/quic/moqt/moqt_subscribe_windows_test.cc",
1669+
"quiche/quic/moqt/moqt_stream_map_test.cc",
16701670
"quiche/quic/moqt/moqt_track_test.cc",
16711671
"quiche/quic/moqt/relay_namespace_tree_test.cc",
16721672
"quiche/quic/moqt/session_namespace_tree_test.cc",

quiche/quic/moqt/moqt_outgoing_queue.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
#include "quiche/quic/moqt/moqt_object.h"
1818
#include "quiche/quic/moqt/moqt_priority.h"
1919
#include "quiche/quic/moqt/moqt_publisher.h"
20-
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
20+
#include "quiche/quic/moqt/moqt_stream_map.h"
2121
#include "quiche/quic/moqt/moqt_types.h"
2222
#include "quiche/common/platform/api/quiche_bug_tracker.h"
2323
#include "quiche/common/quiche_mem_slice.h"
@@ -108,10 +108,10 @@ std::optional<PublishedObject> MoqtOutgoingQueue::GetCachedObject(
108108
std::vector<Location> MoqtOutgoingQueue::GetCachedObjectsInRange(
109109
Location start, Location end) const {
110110
std::vector<Location> sequences;
111-
SubscribeWindow window(start, end);
112111
for (const Group& group : queue_) {
113112
for (const CachedObject& object : group) {
114-
if (window.InWindow(object.metadata.location)) {
113+
if (object.metadata.location >= start &&
114+
object.metadata.location <= end) {
115115
sequences.push_back(object.metadata.location);
116116
}
117117
}

quiche/quic/moqt/moqt_outgoing_queue_test.cc

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#include "quiche/quic/moqt/moqt_object.h"
2424
#include "quiche/quic/moqt/moqt_priority.h"
2525
#include "quiche/quic/moqt/moqt_publisher.h"
26-
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
2726
#include "quiche/quic/moqt/moqt_types.h"
2827
#include "quiche/quic/moqt/test_tools/moqt_mock_visitor.h"
2928
#include "quiche/common/platform/api/quiche_expect_bug.h"
@@ -72,14 +71,15 @@ class TestMoqtOutgoingQueue : public MoqtOutgoingQueue,
7271
}
7372
}
7473

75-
void GetObjectsFromPast(const SubscribeWindow& window) {
74+
void GetObjectsFromPast(Location start,
75+
std::optional<Location> end = std::nullopt) {
7676
if (!largest_location().has_value()) {
7777
return;
7878
}
7979
std::vector<Location> objects =
8080
GetCachedObjectsInRange(Location(0, 0), *largest_location());
8181
for (Location object : objects) {
82-
if (window.InWindow(object)) {
82+
if (object >= start && (!end.has_value() || object <= *end)) {
8383
OnNewObjectAvailable(object, 0, default_publisher_priority());
8484
}
8585
}
@@ -160,7 +160,7 @@ TEST(MoqtOutgoingQueue, SingleGroupPastSubscribeFromZero) {
160160
queue.AddObject(quiche::QuicheMemSlice::Copy("a"), true);
161161
queue.AddObject(quiche::QuicheMemSlice::Copy("b"), false);
162162
queue.AddObject(quiche::QuicheMemSlice::Copy("c"), false);
163-
queue.GetObjectsFromPast(SubscribeWindow(Location(0, 0)));
163+
queue.GetObjectsFromPast(Location(0, 0));
164164
}
165165

166166
TEST(MoqtOutgoingQueue, SingleGroupPastSubscribeFromMidGroup) {
@@ -177,7 +177,7 @@ TEST(MoqtOutgoingQueue, SingleGroupPastSubscribeFromMidGroup) {
177177
queue.AddObject(quiche::QuicheMemSlice::Copy("a"), true);
178178
queue.AddObject(quiche::QuicheMemSlice::Copy("b"), false);
179179
queue.AddObject(quiche::QuicheMemSlice::Copy("c"), false);
180-
queue.GetObjectsFromPast(SubscribeWindow(Location(0, 1)));
180+
queue.GetObjectsFromPast(Location(0, 1));
181181
}
182182

183183
TEST(MoqtOutgoingQueue, TwoGroups) {
@@ -225,7 +225,7 @@ TEST(MoqtOutgoingQueue, TwoGroupsPastSubscribe) {
225225
queue.AddObject(quiche::QuicheMemSlice::Copy("d"), true);
226226
queue.AddObject(quiche::QuicheMemSlice::Copy("e"), false);
227227
queue.AddObject(quiche::QuicheMemSlice::Copy("f"), false);
228-
queue.GetObjectsFromPast(SubscribeWindow(Location(0, 1)));
228+
queue.GetObjectsFromPast(Location(0, 1));
229229
}
230230

231231
TEST(MoqtOutgoingQueue, FiveGroups) {
@@ -298,7 +298,7 @@ TEST(MoqtOutgoingQueue, FiveGroupsPastSubscribe) {
298298
queue.AddObject(quiche::QuicheMemSlice::Copy("h"), false);
299299
queue.AddObject(quiche::QuicheMemSlice::Copy("i"), true);
300300
queue.AddObject(quiche::QuicheMemSlice::Copy("j"), false);
301-
queue.GetObjectsFromPast(SubscribeWindow(Location(0, 0)));
301+
queue.GetObjectsFromPast(Location(0, 0));
302302
}
303303

304304
TEST(MoqtOutgoingQueue, StandaloneFetch) {

quiche/quic/moqt/moqt_session.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#include "quiche/quic/moqt/moqt_publisher.h"
4444
#include "quiche/quic/moqt/moqt_session_callbacks.h"
4545
#include "quiche/quic/moqt/moqt_session_interface.h"
46-
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
46+
#include "quiche/quic/moqt/moqt_stream_map.h"
4747
#include "quiche/quic/moqt/moqt_track.h"
4848
#include "quiche/quic/moqt/moqt_types.h"
4949
#include "quiche/quic/platform/api/quic_logging.h"

quiche/quic/moqt/moqt_session.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
#include "quiche/quic/moqt/moqt_publisher.h"
3737
#include "quiche/quic/moqt/moqt_session_callbacks.h"
3838
#include "quiche/quic/moqt/moqt_session_interface.h"
39-
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
39+
#include "quiche/quic/moqt/moqt_stream_map.h"
4040
#include "quiche/quic/moqt/moqt_trace_recorder.h"
4141
#include "quiche/quic/moqt/moqt_track.h"
4242
#include "quiche/quic/moqt/moqt_types.h"

quiche/quic/moqt/moqt_session_test.cc

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2778,7 +2778,7 @@ TEST_F(MoqtSessionTest, SendJoiningFetchNoFlowControl) {
27782778
// Packet arrives on FETCH stream.
27792779
MoqtObject object = {
27802780
/*request_id=*/2,
2781-
/*group_id, object_id=*/0,
2781+
/*group_id, object_id=*/2,
27822782
0,
27832783
/*publisher_priority=*/128,
27842784
/*extension_headers=*/"",
@@ -2790,12 +2790,14 @@ TEST_F(MoqtSessionTest, SendJoiningFetchNoFlowControl) {
27902790
std::optional<PublishedObjectMetadata> metadata;
27912791
quiche::QuicheBuffer header = framer.SerializeObjectHeader(
27922792
object, MoqtDataStreamType::Fetch(), metadata);
2793-
// Open stream, deliver two objects before FETCH_OK. Neither should be read.
27942793
webtransport::test::InMemoryStream data_stream(kIncomingUniStreamId);
27952794
data_stream.SetVisitor(
27962795
MoqtSessionPeer::CreateIncomingStreamVisitor(&session_, &data_stream));
27972796
data_stream.Receive(header.AsStringView(), false);
27982797
EXPECT_CALL(remote_track_visitor_, OnObjectFragment).Times(1);
2798+
// Last object of the FETCH causes FETCH_CANCEL.
2799+
EXPECT_CALL(mock_stream_,
2800+
Writev(ControlMessageOfType(MoqtMessageType::kFetchCancel), _));
27992801
data_stream.Receive("foo", false);
28002802
}
28012803

quiche/quic/moqt/moqt_subscribe_windows.cc renamed to quiche/quic/moqt/moqt_stream_map.cc

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
#include "quiche/quic/moqt/moqt_subscribe_windows.h"
5+
#include "quiche/quic/moqt/moqt_stream_map.h"
66

77
#include <cstdint>
88
#include <limits>
@@ -29,37 +29,13 @@ std::optional<webtransport::StreamId> SendStreamMap::GetStreamFor(
2929
void SendStreamMap::AddStream(DataStreamIndex index,
3030
webtransport::StreamId stream_id) {
3131
auto [it, success] = send_streams_.emplace(index, stream_id);
32-
QUIC_BUG_IF(quic_bug_moqt_draft_03_02, !success) << "Stream already added";
32+
QUICHE_BUG_IF(quic_bug_moqt_draft_03_02, !success) << "Stream already added";
3333
}
3434

3535
void SendStreamMap::RemoveStream(DataStreamIndex index) {
3636
send_streams_.erase(index);
3737
}
3838

39-
bool SubscribeWindow::TruncateStart(Location start) {
40-
if (start < start_) {
41-
return false;
42-
}
43-
start_ = start;
44-
return true;
45-
}
46-
47-
bool SubscribeWindow::TruncateEnd(uint64_t end_group) {
48-
if (end_group > end_.group) {
49-
return false;
50-
}
51-
end_ = Location(end_group, UINT64_MAX);
52-
return true;
53-
}
54-
55-
bool SubscribeWindow::TruncateEnd(Location largest_id) {
56-
if (largest_id > end_) {
57-
return false;
58-
}
59-
end_ = largest_id;
60-
return true;
61-
}
62-
6339
std::vector<webtransport::StreamId> SendStreamMap::GetAllStreams() const {
6440
std::vector<webtransport::StreamId> ids;
6541
for (const auto& [index, stream_id] : send_streams_) {
@@ -80,12 +56,4 @@ std::vector<webtransport::StreamId> SendStreamMap::GetStreamsForGroup(
8056
return ids;
8157
}
8258

83-
bool SubscribeWindow::GroupInWindow(uint64_t group) const {
84-
const quic::QuicInterval<Location> group_window(
85-
Location(group, 0),
86-
Location(group, std::numeric_limits<uint64_t>::max()));
87-
const quic::QuicInterval<Location> subscription_window(start_, end_);
88-
return group_window.Intersects(subscription_window);
89-
}
90-
9159
} // namespace moqt

quiche/quic/moqt/moqt_stream_map.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright 2023 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#ifndef QUICHE_QUIC_MOQT_STREAM_MAP_H
6+
#define QUICHE_QUIC_MOQT_STREAM_MAP_H
7+
8+
#include <cstdint>
9+
#include <optional>
10+
#include <vector>
11+
12+
#include "absl/container/btree_map.h"
13+
#include "quiche/quic/moqt/moqt_messages.h"
14+
#include "quiche/common/platform/api/quiche_export.h"
15+
#include "quiche/web_transport/web_transport.h"
16+
17+
namespace moqt {
18+
19+
// A map of outgoing data streams indexed by object sequence numbers.
20+
class QUICHE_EXPORT SendStreamMap {
21+
public:
22+
SendStreamMap() = default;
23+
24+
std::optional<webtransport::StreamId> GetStreamFor(
25+
DataStreamIndex index) const;
26+
void AddStream(DataStreamIndex index, webtransport::StreamId stream_id);
27+
void RemoveStream(DataStreamIndex index);
28+
std::vector<webtransport::StreamId> GetAllStreams() const;
29+
std::vector<webtransport::StreamId> GetStreamsForGroup(
30+
uint64_t group_id) const;
31+
32+
private:
33+
absl::btree_map<DataStreamIndex, webtransport::StreamId> send_streams_;
34+
};
35+
36+
} // namespace moqt
37+
38+
#endif // QUICHE_QUIC_MOQT_STREAM_MAP_H

0 commit comments

Comments
 (0)