Respect incremental parameter in QuicWriteBlockedList.

As a reminder, HTTP/3 streams have two priority-related parameters received from
the clien in PRIORITY_UPDATE frames: urgency (int) and incremental (bool).

Before this CL, the incremental parameter is ignored.  Writes within an urgency
bucket are batched: if the last stream with data written has more data to write,
it will be written unless more than 16 kB has been written so far.

After this CL, writes on non-incremental stream are are batched with no limit.
This is because partial responses on incremental streams are not useful for the
client, so if there is more data available, it should be sent before other
streams of equal urgency.

Buffering behavior of incremental streams is not changed.

Protected by FLAGS_quic_reloadable_flag_quic_priority_respect_incremental.

PiperOrigin-RevId: 511587715
6 files changed
tree: e2177ddf8c50b297a366bfe5d941e2a0b5816c3d
  1. build/
  2. depstool/
  3. quiche/
  4. .bazelrc
  5. BUILD.bazel
  6. CONTRIBUTING.md
  7. LICENSE
  8. README.md
  9. WHITESPACE
  10. WORKSPACE.bazel
README.md

QUICHE

QUICHE stands for QUIC, Http, Etc. It is Google‘s production-ready implementation of QUIC, HTTP/2, HTTP/3, and related protocols and tools. It powers Google’s servers, Chromium, Envoy, and other projects. It is actively developed and maintained.

There are two public QUICHE repositories. Either one may be used by embedders, as they are automatically kept in sync:

To embed QUICHE in your project, platform APIs need to be implemented and build files need to be created. Note that it is on the QUICHE team's roadmap to include default implementation for all platform APIs and to open-source build files. In the meanwhile, take a look at open source embedders like Chromium and Envoy to get started:

To contribute to QUICHE, follow instructions at CONTRIBUTING.md.

QUICHE is only supported on little-endian platforms.