Skip to main content

chronon::TimelineLane

Occupancy lane group: hardware-shaped span and instant events. More...

#include <TimelineTrack.hpp>

Inherits from chronon::observe::TimelineTrackBase

Public Functions

Name
template <typename Cat ,typename... Items>
void
instant(uint16_t slot, Cat category, EventNameRef name, Items... items)
Point event on the (this lane, slot) track.
voidend(uint16_t slot)
Close the (this lane, slot) span at the current cycle.
template <typename Cat ,typename... Items>
void
begin(uint16_t slot, Cat category, EventNameRef name, Items... items)
TimelineLane(ObservableUnit * owner, std::string_view name, uint16_t lanes =1)

Additional inherited members

Public Functions inherited from chronon::observe::TimelineTrackBase

Name
uint32_ttrackId() const
TimelineTrackBase &operator=(const TimelineTrackBase & ) =delete
const std::string &name() const
boolisRegistered() const
TimelineTrackBase(ObservableUnit * owner, std::string_view name, std::string_view unit, uint16_t lanes, TimelineTrackInfo::Kind kind)
TimelineTrackBase(const TimelineTrackBase & ) =delete

Protected Functions inherited from chronon::observe::TimelineTrackBase

Name
voidstampCycle_()
Stamps the owner's cycle into the context (same as ObservableUnit::trace).

Protected Attributes inherited from chronon::observe::TimelineTrackBase

Name
std::stringunit_
uint32_ttrack_id_
boolregistered_
ObservableUnit *owner_
std::stringname_
uint16_tlanes_
TimelineTrackInfo::Kindkind_
ObservationContext *ctx_

Friends inherited from chronon::observe::TimelineTrackBase

Name
classObservableUnit

Detailed Description

class chronon::TimelineLane;

Occupancy lane group: hardware-shaped span and instant events.

Spans are addressed by (lane, slot) tokens — begin and end are separate calls that may land in different tick() invocations and epochs (no RAII). Event names must be low-cardinality compile-time literals ("miss"_ev); per-event details go into typed args (arg<"addr">(paddr)) so the data stays SQL-aggregatable. An instruction/transaction uid passed as flow(uid) links this slice to the same uid's slices on other lanes.

class LSU : public Unit, public ObservableUnit {
TimelineLane mshr_{this, "mshr", 8}; // one sub-lane per slot

inline static const auto MISS = Category<"dcache_miss">{};

void tick() override {
mshr_.begin(slot, MISS, "miss"_ev, flow(instr.uid), arg<"addr">(paddr));
...
mshr_.end(slot); // possibly many cycles later
}
};

Filter semantics: begin/instant pass the standard trace-channel category and temporal filters. end() is only gated on the trace channel itself — a span begun inside an observation window still closes when its end falls outside; ends whose begin was suppressed are dropped by the backend's open-span table. Speculative (lookahead) events buffer locally and vanish on epoch rollback like any other observation.

Public Functions Documentation

function instant

template <typename Cat ,
typename... Items>
inline void instant(
uint16_t slot,
Cat category,
EventNameRef name,
Items... items
)

Point event on the (this lane, slot) track.

function end

inline void end(
uint16_t slot
)

Close the (this lane, slot) span at the current cycle.

function begin

template <typename Cat ,
typename... Items>
inline void begin(
uint16_t slot,
Cat category,
EventNameRef name,
Items... items
)

Open the (this lane, slot) span. Items: at most one flow() plus up to MAX_TIMELINE_ARGS typed args, in any order.

function TimelineLane

inline TimelineLane(
ObservableUnit * owner,
std::string_view name,
uint16_t lanes =1
)

Parameters:

  • lanes Number of sub-lanes (slots); 1 renders as a single track, N > 1 as a group with one child track per slot.

Updated on 2026-06-12 at 09:16:39 +0000