Create a QuicAlarm-based source for random test data for Quartc.

This is the first element required to reimplement quic_quality_test.  By basing
it on the QuicAlarm, we can use it in either a controlled environment (such as
the one provided by quic::simulator::Simulator) or with a real thread (eg. by
using QuartcAlarmFactory).  Use in a controlled environment will make it easier
to write tests that reproduce specific corner cases in congestion control.

A quality test will likely use two of these in each direction, configured to
simulate an audio source and a video source.  Note that audio and video
each have different bitrate constraints (min/max) and frame intervals.

The QuartcDataSource generates a frame of random data every frame_interval.  The
frame's size depends on a bitrate allocation, which can be updated dynamically.
The bitrate can be configured with a min and max (to emulate streams of
different sizes, such as audio/video).

Each frame includes a 20-byte header which includes:
 - A source id (to distinguish between sources when multiple are in use)
 - A sequence number (incremented for every frame, useful for telling the
   difference between 'source was disabled' and 'frames were lost')
 - A send timestamp (when the data was generated, to compute end-to-end delay)

The remainder of each frame is randomly-generated payload data.

The utility also comes with a struct and parse function which may be used to
deserialize its output.  This is useful for its own unit test, but is included
in the library so that other tests may use it to read data from the header.

gfe-relnote: n/a (Quartc/test only)
PiperOrigin-RevId: 242693623
Change-Id: Ia496667bedcb518232c92c4b73c41813cd20b9cb
3 files changed
tree: 27daed74c731ee90ddccb09294266c372fd32359
  1. http2/
  2. quic/
  3. spdy/
  4. CONTRIBUTING.md
  5. LICENSE
  6. 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.