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>
bool
instant(uint16_t slot, Cat category, EventNameRef name, Items... items)
Point event on the (this lane, slot) track.
boolend(uint16_t slot)
Close the (this lane, slot) span at the current cycle.
template <typename Cat ,typename... Items>
bool
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
ObservationContext *observationContext() const
const std::string &name() const
boolisRegistered() const
TimelineTrackBase(ObservableUnit * owner, std::string_view name, uint16_t lanes)
TimelineTrackBase(const TimelineTrackBase & ) =delete

Protected Functions inherited from chronon::observe::TimelineTrackBase

Name
voidstampCycle_()
Stamps the owner's cycle into the context.

Protected Attributes inherited from chronon::observe::TimelineTrackBase

Name
uint32_ttrack_id_
boolregistered_
ObservableUnit *owner_
std::stringname_
uint16_tlanes_
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() only requires observation to be enabled because the category from begin() is not stored on the lane; 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 bool instant(
uint16_t slot,
Cat category,
EventNameRef name,
Items... items
)

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

function end

inline bool end(
uint16_t slot
)

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

function begin

template <typename Cat ,
typename... Items>
inline bool 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-07-23 at 16:24:33 +0000