68 std::array<GeneratedEventDegradation, maximum_steps>
steps{
75 std::span<const GeneratedEventDegradation>
active() const noexcept {
77 return {
steps.data(), active_count};
111 constexpr explicit operator bool() const noexcept {
131 constexpr explicit operator bool() const noexcept {
216 std::array<std::uint64_t, GeneratedEventDegradationLadder::maximum_steps>
228 std::size_t event_count = 0;
231 struct ElapsedFrontierSnapshot {
232 std::uint64_t epoch = 0;
233 std::int64_t tick = 0;
234 bool present =
false;
237 bool valid_span(
const GeneratedEventSpan& span)
const noexcept;
239 bool valid_events(
const GeneratedEventSpan& span,
240 std::span<const GeneratedEvent>
events)
const noexcept;
241 void publish_elapsed(
const GeneratedEventSpan& span)
noexcept;
242 bool elapsed_frontier(std::uint64_t& epoch, std::int64_t& tick)
const noexcept;
243 GeneratedEvent* staged_event_storage(std::size_t index)
noexcept;
244 GeneratedEvent* committed_event_storage(std::size_t index)
noexcept;
246 GeneratedEventSourceConfig config_{};
247 std::vector<BatchSlot> staged_{};
248 std::vector<GeneratedEvent> staged_events_{};
249 std::size_t staged_count_ = 0;
250 std::vector<BatchSlot> committed_{};
251 std::vector<GeneratedEvent> committed_events_{};
252 std::unique_ptr<runtime::SpscRingIndex> committed_ring_{};
254 std::uint64_t committed_epoch_ = 0;
255 timebase::MonotonicBeat committed_through_{};
257 std::uint64_t active_epoch_ = 0;
258 bool has_committed_frontier_ =
false;
259 bool has_active_epoch_ =
false;
260 bool prepared_ =
false;
261 std::atomic<std::uint8_t> consecutive_deadline_misses_{0};
265 std::uint64_t consumer_elapsed_epoch_ = 0;
266 std::int64_t consumer_elapsed_tick_ = 0;
267 bool has_consumer_elapsed_frontier_ =
false;
271 runtime::SeqLock<ElapsedFrontierSnapshot> elapsed_frontier_{};
272 std::atomic<std::uint8_t> current_degradation_index_{
274 std::atomic<std::uint64_t> committed_batches_{0};
275 std::atomic<std::uint64_t> consumed_batches_{0};
276 std::atomic<std::uint64_t> starvation_events_{0};
277 std::atomic<std::uint64_t> lagged_ticks_{0};
278 std::atomic<std::uint64_t> late_batches_{0};
279 std::atomic<std::uint64_t> output_overflows_{0};
280 std::atomic<std::uint64_t> deadline_misses_{0};
bool prepare(const GeneratedEventSourceConfig &config)
Quiescent control thread.
GeneratedEventSource(const GeneratedEventSource &)=delete
GeneratedEventDegradation record_deadline_miss() noexcept
Select or reset producer-declared fallback policy.
void record_deadline_met() noexcept
GeneratedEventPullResult pull(GeneratedEventSpan requested, std::span< GeneratedEvent > output) noexcept
Audio thread.
GeneratedEventSource & operator=(const GeneratedEventSource &)=delete
Stats stats() const noexcept
void release() noexcept
Quiescent control thread. No producer or consumer may be active.
GeneratedEventStageResult stage(GeneratedEventSpan span, GeneratedEventRevision revision, std::span< const GeneratedEvent > events) noexcept
Producer thread.
static constexpr audio::RtSafetyClass pull_rt_safety_class
Definition generated_event_source.hpp:156
bool prepared() const noexcept
Definition generated_event_source.hpp:204
GeneratedEventDegradation current_degradation() const noexcept
bool begin_playback_epoch(std::uint64_t playback_epoch) noexcept
Quiescent control thread.
GeneratedEventCommitResult commit_through(std::uint64_t playback_epoch, timebase::MonotonicBeat boundary, GeneratedEventCommitGeneration generation) noexcept
Producer thread.
Definition spsc_ring_index.hpp:42
RtSafetyClass
Definition rt_safety_contract.hpp:11
@ AudioCallbackSafeAfterPrepare
Definition rt_safety_contract.hpp:13
Definition child_process_manager.hpp:18
Definition audio_renderer.hpp:20
GeneratedEventCommitCode
Definition generated_event_source.hpp:116
@ InvalidBoundary
Definition generated_event_source.hpp:121
@ StaleGeneration
Definition generated_event_source.hpp:123
@ NotPrepared
Definition generated_event_source.hpp:118
@ CommitRingFull
Definition generated_event_source.hpp:124
@ Committed
Definition generated_event_source.hpp:117
@ InvalidGeneration
Definition automation_program.hpp:27
std::uint64_t GeneratedEventRevision
Definition generated_event_source.hpp:40
std::uint64_t GeneratedEventCommitGeneration
Definition generated_event_source.hpp:39
@ NotPrepared
Definition automation_recording.hpp:30
@ None
Definition automation_recording.hpp:29
GeneratedEventPullCode
Definition generated_event_source.hpp:136
@ Starved
Definition generated_event_source.hpp:138
@ InvalidRequest
Definition generated_event_source.hpp:140
@ Ready
Definition generated_event_source.hpp:137
GeneratedEventStageCode
Definition generated_event_source.hpp:90
@ NotQuantized
Definition generated_event_source.hpp:97
@ OutOfOrder
Definition generated_event_source.hpp:101
@ InvalidSpan
Definition generated_event_source.hpp:96
@ StagingCapacityExceeded
Definition generated_event_source.hpp:105
@ NotPrepared
Definition generated_event_source.hpp:93
@ InvalidEvent
Definition generated_event_source.hpp:103
@ Staged
Definition generated_event_source.hpp:91
@ OverlappingSpan
Definition generated_event_source.hpp:102
@ WrongEpoch
Definition generated_event_source.hpp:95
@ FrozenSpan
Definition generated_event_source.hpp:100
@ EventCapacityExceeded
Definition generated_event_source.hpp:104
@ StaleRevision
Definition generated_event_source.hpp:99
@ Revised
Definition generated_event_source.hpp:92
@ InvalidRevision
Definition generated_event_source.hpp:98
@ EpochNotStarted
Definition generated_event_source.hpp:94
@ OutputOverflow
Definition external_sync.hpp:99
GeneratedEventDegradation
Definition generated_event_source.hpp:59
@ None
Definition generated_event_source.hpp:60
@ UseSkeleton
Definition generated_event_source.hpp:62
@ Silence
Definition generated_event_source.hpp:63
@ RepeatLastCommitted
Definition generated_event_source.hpp:61
Definition generated_event_source.hpp:33
Definition beat_division.hpp:11
Lock-free sequence-lock for coherent multi-field snapshots.
Definition generated_event_source.hpp:127
GeneratedEventCommitCode code
Definition generated_event_source.hpp:128
std::size_t committed_batches
Definition generated_event_source.hpp:129
Definition generated_event_source.hpp:66
std::span< const GeneratedEventDegradation > active() const noexcept
Definition generated_event_source.hpp:75
std::array< GeneratedEventDegradation, maximum_steps > steps
Definition generated_event_source.hpp:68
static constexpr std::size_t maximum_steps
Definition generated_event_source.hpp:67
std::uint8_t count
Definition generated_event_source.hpp:73
Definition generated_event_source.hpp:143
std::size_t event_count
Definition generated_event_source.hpp:145
std::uint64_t lagged_ticks
Definition generated_event_source.hpp:147
GeneratedEventDegradation degradation
Producer-selected fallback policy, or None before any declared miss.
Definition generated_event_source.hpp:149
GeneratedEventPullCode code
Definition generated_event_source.hpp:144
bool flush_active_notes
The downstream renderer must emit its bounded all-notes-off/reset path.
Definition generated_event_source.hpp:151
GeneratedEventCommitGeneration commit_generation
Definition generated_event_source.hpp:146
Definition generated_event_source.hpp:81
GeneratedEventDegradationLadder degradation
Definition generated_event_source.hpp:87
timeline::LaunchQuantize commit_quantize
Non-immediate grid whose exact boundaries may freeze staged batches.
Definition generated_event_source.hpp:86
std::size_t committed_batch_capacity
Definition generated_event_source.hpp:82
std::size_t staged_batch_capacity
Definition generated_event_source.hpp:83
std::size_t maximum_events_per_batch
Definition generated_event_source.hpp:84
Definition generated_event_source.hpp:208
std::uint64_t output_overflows
Definition generated_event_source.hpp:214
std::size_t committed_batches_ready
Definition generated_event_source.hpp:218
std::uint64_t committed_batches
Definition generated_event_source.hpp:209
std::uint64_t lagged_ticks
Definition generated_event_source.hpp:212
std::uint64_t consumed_batches
Definition generated_event_source.hpp:210
std::array< std::uint64_t, GeneratedEventDegradationLadder::maximum_steps > degradation_uses
Definition generated_event_source.hpp:217
std::uint64_t deadline_misses
Definition generated_event_source.hpp:215
std::uint64_t starvation_events
Definition generated_event_source.hpp:211
std::uint64_t late_batches
Definition generated_event_source.hpp:213
A half-open span on the transport's non-looping clock.
Definition generated_event_source.hpp:44
constexpr bool operator==(const GeneratedEventSpan &) const =default
timebase::MonotonicBeat end
Definition generated_event_source.hpp:47
timebase::MonotonicBeat start
Definition generated_event_source.hpp:46
std::uint64_t playback_epoch
Definition generated_event_source.hpp:45
Definition generated_event_source.hpp:108
GeneratedEventStageCode code
Definition generated_event_source.hpp:109
One value-owned generated event.
Definition generated_event_source.hpp:54
timebase::TickDuration offset
Definition generated_event_source.hpp:55
midi::UmpPacket packet
Definition generated_event_source.hpp:56
Musical-boundary quantization for one launch.
Definition clip_launch.hpp:40