gfe-relnote: Construct QuicMemSliceSpans from a QuicMemSlices without copies.
QuartcSession uses this functionality to send queued message frames without
copying the data backed by QuicMemSlices in its queue.
Note that this extends the platform/api by adding a new constructor to
QuicMemSliceSpan. It adds a corresponding constructor to QuicMemSliceSpanImpl,
so this will need to be merged into chromium manually. The changes required
should be minimal (<10 lines of code).
Not flag-protected, since the only changes are (a) platform/ code that is not
called anywhere except quartc/ and (b) quartc/ code that is not called in GFE.
PiperOrigin-RevId: 247689071
Change-Id: Ifbfbb52294b41da45a230ab63f8f199754b68211
diff --git a/quic/platform/api/quic_mem_slice.h b/quic/platform/api/quic_mem_slice.h
index bcc7123..a40d638 100644
--- a/quic/platform/api/quic_mem_slice.h
+++ b/quic/platform/api/quic_mem_slice.h
@@ -60,6 +60,8 @@
bool empty() const { return impl_.empty(); }
+ QuicMemSliceImpl* impl() { return &impl_; }
+
private:
QuicMemSliceImpl impl_;
};
diff --git a/quic/platform/api/quic_mem_slice_span.h b/quic/platform/api/quic_mem_slice_span.h
index 4fdf059..62cec48 100644
--- a/quic/platform/api/quic_mem_slice_span.h
+++ b/quic/platform/api/quic_mem_slice_span.h
@@ -22,6 +22,9 @@
public:
explicit QuicMemSliceSpan(QuicMemSliceSpanImpl impl) : impl_(impl) {}
+ // Constructs a span with a single QuicMemSlice.
+ explicit QuicMemSliceSpan(QuicMemSlice* slice) : impl_(slice->impl()) {}
+
QuicMemSliceSpan(const QuicMemSliceSpan& other) = default;
QuicMemSliceSpan& operator=(const QuicMemSliceSpan& other) = default;
QuicMemSliceSpan(QuicMemSliceSpan&& other) = default;