package tracing

  1. Overview
  2. Docs

Abstraction for a source of buffers to write trace data to.

At the moment this is used for the ability to both write to a file and to an in-memory buffer for tests.

However I also tried to anticipate some of the structure of how the API would work which would be required to write to a shared-memory transport involving a ring or double-buffering system.

val next_buf : ensure_capacity:int -> (Core.read_write, Iobuf.seek) Iobuf.t

Called before writing up to ensure_capacity bytes of data to the destination. Any older buffers will no longer be used after calling this function, so it's legal for a Destination to re-use Iobuf.ts to avoid allocating.

All writers are expected to update the Iobuf's lo, either manually or using Iobuf.Fill. Data will only be consumed up to the new lo.

val close : unit -> unit

We will no longer be writing anything. Resources should be flushed and freed.