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. |
| void | end(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_t | trackId() const |
| TimelineTrackBase & | operator=(const TimelineTrackBase & ) =delete |
| const std::string & | name() const |
| bool | isRegistered() 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 | |
|---|---|
| void | stampCycle_() Stamps the owner's cycle into the context (same as ObservableUnit::trace). |
Protected Attributes inherited from chronon::observe::TimelineTrackBase
| Name | |
|---|---|
| std::string | unit_ |
| uint32_t | track_id_ |
| bool | registered_ |
| ObservableUnit * | owner_ |
| std::string | name_ |
| uint16_t | lanes_ |
| TimelineTrackInfo::Kind | kind_ |
| ObservationContext * | ctx_ |
Friends inherited from chronon::observe::TimelineTrackBase
| Name | |
|---|---|
| class | ObservableUnit |
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