Created and integrated QuicIntervalDeque class for index management. Improves code readability.
gfe-relnote: Integrated QuicIntervalDeque class into QuicStreamSendBuffer affecting the QUIC GFE path. Protected by --gfe2_reloadable_flag_quic_interval_deque
PiperOrigin-RevId: 286471930
Change-Id: Ida91b6c7d066d9710d06932c9f4726946bfbd430
diff --git a/quic/test_tools/quic_interval_deque_peer.h b/quic/test_tools/quic_interval_deque_peer.h
new file mode 100644
index 0000000..e9a99ba
--- /dev/null
+++ b/quic/test_tools/quic_interval_deque_peer.h
@@ -0,0 +1,35 @@
+// Copyright 2019 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.
+
+#ifndef QUICHE_QUIC_TEST_TOOLS_QUIC_INTERVAL_DEQUE_PEER_H_
+#define QUICHE_QUIC_TEST_TOOLS_QUIC_INTERVAL_DEQUE_PEER_H_
+
+#include "net/third_party/quiche/src/quic/core/quic_interval_deque.h"
+
+namespace quic {
+
+namespace test {
+
+class QuicIntervalDequePeer {
+ public:
+ template <class T, class C>
+ static int32_t GetCachedIndex(QuicIntervalDeque<T, C>* interval_deque) {
+ if (!interval_deque->cached_index_.has_value()) {
+ return -1;
+ }
+ return interval_deque->cached_index_.value();
+ }
+
+ template <class T, class C>
+ static T* GetItem(QuicIntervalDeque<T, C>* interval_deque,
+ const std::size_t index) {
+ return &interval_deque->container_[index];
+ }
+};
+
+} // namespace test
+
+} // namespace quic
+
+#endif // QUICHE_QUIC_TEST_TOOLS_QUIC_INTERVAL_DEQUE_PEER_H_
diff --git a/quic/test_tools/quic_stream_send_buffer_peer.cc b/quic/test_tools/quic_stream_send_buffer_peer.cc
index 22e5e56..2135d3f 100644
--- a/quic/test_tools/quic_stream_send_buffer_peer.cc
+++ b/quic/test_tools/quic_stream_send_buffer_peer.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "net/third_party/quiche/src/quic/test_tools/quic_stream_send_buffer_peer.h"
+#include "net/third_party/quiche/src/quic/test_tools/quic_interval_deque_peer.h"
namespace quic {
@@ -15,25 +16,58 @@
send_buffer->stream_offset_ = stream_offset;
}
+// TODO(b/144690240): Remove CurrentWriteSlice when deprecating
+// --quic_interval_deque
// static
const BufferedSlice* QuicStreamSendBufferPeer::CurrentWriteSlice(
QuicStreamSendBuffer* send_buffer) {
- if (send_buffer->write_index_ == -1) {
+ auto wi = write_index(send_buffer);
+
+ if (wi == -1) {
return nullptr;
}
- return &send_buffer->buffered_slices_[send_buffer->write_index_];
+ if (GetQuicReloadableFlag(quic_interval_deque)) {
+ return QuicIntervalDequePeer::GetItem(&send_buffer->interval_deque_, wi);
+ } else {
+ return &send_buffer->buffered_slices_[wi];
+ }
+}
+
+QuicStreamOffset QuicStreamSendBufferPeer::EndOffset(
+ QuicStreamSendBuffer* send_buffer) {
+ if (GetQuicReloadableFlag(quic_interval_deque)) {
+ return send_buffer->current_end_offset_;
+ }
+ return 0;
}
// static
QuicByteCount QuicStreamSendBufferPeer::TotalLength(
QuicStreamSendBuffer* send_buffer) {
QuicByteCount length = 0;
- for (const auto& slice : send_buffer->buffered_slices_) {
- length += slice.slice.length();
+ if (GetQuicReloadableFlag(quic_interval_deque)) {
+ for (auto slice = send_buffer->interval_deque_.DataBegin();
+ slice != send_buffer->interval_deque_.DataEnd(); ++slice) {
+ length += slice->slice.length();
+ }
+ } else {
+ for (const auto& slice : send_buffer->buffered_slices_) {
+ length += slice.slice.length();
+ }
}
return length;
}
+// static
+int32_t QuicStreamSendBufferPeer::write_index(
+ QuicStreamSendBuffer* send_buffer) {
+ if (send_buffer->interval_deque_active_) {
+ return QuicIntervalDequePeer::GetCachedIndex(&send_buffer->interval_deque_);
+ } else {
+ return send_buffer->write_index_;
+ }
+}
+
} // namespace test
} // namespace quic
diff --git a/quic/test_tools/quic_stream_send_buffer_peer.h b/quic/test_tools/quic_stream_send_buffer_peer.h
index 3adb173..310cda9 100644
--- a/quic/test_tools/quic_stream_send_buffer_peer.h
+++ b/quic/test_tools/quic_stream_send_buffer_peer.h
@@ -19,11 +19,11 @@
static const BufferedSlice* CurrentWriteSlice(
QuicStreamSendBuffer* send_buffer);
+ static QuicStreamOffset EndOffset(QuicStreamSendBuffer* send_buffer);
+
static QuicByteCount TotalLength(QuicStreamSendBuffer* send_buffer);
- static int32_t write_index(QuicStreamSendBuffer* send_buffer) {
- return send_buffer->write_index_;
- }
+ static int32_t write_index(QuicStreamSendBuffer* send_buffer);
};
} // namespace test