Don't split sent messages on MemSlice boundaries.

NOTE: Merging this change to chromium will require updating the implementation
of QuicMemSliceStorage.  The required changes are fairly trivial.

Instead of enqueueing a QueuedMessage with a single MemSlice for each slice in
the span representing an outgoing message, QuartcSession should enqueue a single
message containing all MemSlices that are part of that message, so that they are
all sent together, as part of a single datagram frame.

This requires a way to build a QuicMemSliceSpan from multiple QuicMemSlices,
since QuartcSession must construct a QuicMemSliceSpan from its queued message to
pass the message to SendMessage.

QuicMemSliceStorage can do this, but currently requires copies to get MemSlices
into the MemSliceStorage.  This change adds an Append() function to
QuicMemSliceStorage, which allows callers to move MemSlices into storage without
copies.

QuartcSession now consumes all the MemSlices for a single message into a single
QuicMemSliceStorage.  When the message is sent, that storage is converted to a
span and passed to QuicSession::SendMessage as a single unit.

gfe-relnote: n/a (Quartc only)
PiperOrigin-RevId: 258468175
Change-Id: I4bab1e8da1db77a5ba1068cc8fe6303032ad81c7
5 files changed
tree: 668ca8baae21c5bfc2aece0f50868913d17fe07e
  1. common/
  2. epoll_server/
  3. http2/
  4. quic/
  5. spdy/
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
README.md

QUICHE

QUICHE (QUIC, Http/2, Etc) is Google‘s implementation of QUIC and related protocols. It powers Chromium as well as Google’s QUIC servers and some other projects.

The code is currently in process of being moved from https://cs.chromium.org/chromium/src/net/third_party/ into this repository. Please excuse our appearance while we're under construction.