Add new balsa_frame microbenchmark This microbenchmark is very simple and tests the performance of parsing a chunked request with extensions with the strictest HttpValidationPolicy options available since they all add a bit of extra overhead. It also defines a nearly no-op visitor which should mimic the overhead required to invoke an integrators visitor implementation. A nearly identical test is added to balsa_frame_test.cc to test the correctness of the logic. All `_benchmark.cc` are already excluded by copybara rules. ``` Benchmarking blaze-out/k8-opt/bin/third_party/quiche/balsa/balsa_frame_benchmark Run on reubent3.cam (128 X 2695 MHz CPUs); 2026-02-11T17:21:00.272874364-05:00 CPU: AMD Rome (64 cores) dL1:32KB dL2:512KB dL3:256MB ***WARNING*** CPU scaling is enabled, the benchmark timings may be noisy, see http://go/benchmark#cpu-scaling Benchmark Time(ns) CPU(ns) Iterations ---------------------------------------------------------------------- BM_ProcessInputChunked 1703 1762 36579 5.334kB/s BM_ProcessInputChunked 1741 1629 31899 6.615kB/s BM_ProcessInputChunked 1721 1719 39511 5.061kB/s BM_ProcessInputChunked 1731 1718 39599 5.053kB/s BM_ProcessInputChunked 1689 1712 39726 5.053kB/s BM_ProcessInputChunked 1699 1642 31726 6.599kB/s BM_ProcessInputChunked 1686 1719 39580 5.053kB/s BM_ProcessInputChunked 1685 1711 39837 5.044kB/s BM_ProcessInputChunked 1693 1716 39636 5.053kB/s BM_ProcessInputChunked 1693 1710 39783 5.053kB/s BM_ProcessInputChunked 1711 1702 39922 5.060kB/s BM_ProcessInputChunked_mean 1704 1706 417798 5.315kB/s BM_ProcessInputChunked_stddev 17.9 33.2 417798 566.449B/s ``` Protected by adding google3 only performance test. PiperOrigin-RevId: 869351347
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.
QUICHE has binaries that can run on Linux platforms.
Follow the instructions to install Bazel.
sudo apt install libicu-dev clang lld cd <directory that will be the root of your quiche implmentation> git clone https://github.com/google/quiche.git cd quiche CC=clang bazel build -c opt //... ./bazel-bin/quiche/<target_name> <arguments>
There are several targets that can be built and then run. Full usage instructions are available using the --helpfull flag on any binary.
Usage: quic_packet_printer server|client <hex dump of packet>
Usage: crypto_message_printer_bin <hex of message>
Usage: quic_client <URL>
quic_server: listens forever on --port (default 6121) until halted via ctrl-c.
masque_client: tunnels to a URL via an identified proxy (See RFC 9298).
Usage: masque_client [options] <proxy-url> <urls>
Usage: masque_server
web_transport_test_server: a server that clients can connect to via WebTransport.
moqt_relay: a relay for the Media Over QUIC transport for publishers and subscribers can connect to.
Usage: moqt_relay