Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
value_channel_telemetry.hpp
Go to the documentation of this file.
1#pragma once
2
6
7#include <cstddef>
8#include <cstdint>
9#include <memory>
10#include <span>
11#include <string>
12#include <string_view>
13#include <variant>
14#include <vector>
15
17
18namespace pulp::dataplane {
19
27
30 std::string name;
31 std::string unit;
36 float neutral = 0.0f;
37};
38
39using ValueChannelContinuousPayload = std::variant<float, MeterFrame, VectorFrame>;
40
52
58
61 std::size_t size_approx = 0;
62 std::size_t capacity = 0;
63 std::uint64_t overflow_count = 0;
64};
65
73
74namespace detail {
75class ValueChannelTelemetryControl;
76class ValueChannelTelemetryState;
77class ScalarTelemetryState;
78class MeterTelemetryState;
79class VectorTelemetryState;
80class EventTelemetryState;
81} // namespace detail
82
89 public:
96
97 bool valid() const noexcept;
98 std::span<const ValueChannelTelemetryDescriptor> channels() const noexcept;
99
103 bool read_continuous(std::size_t index, ValueChannelTelemetrySnapshot& snapshot) noexcept;
104
107 bool try_pop_events(std::size_t index, ValueChannelTelemetryEventBatch& batch) noexcept;
108 ValueChannelTelemetryEventStats event_stats(std::size_t index) const noexcept;
109 bool source_alive(std::size_t index) const noexcept;
110
111 private:
112 friend class ValueChannelSet;
113 struct Impl;
115 std::shared_ptr<detail::ValueChannelTelemetryControl> control,
116 std::vector<std::shared_ptr<detail::ValueChannelTelemetryState>> states,
117 std::vector<ValueChannelInfo> infos);
118 std::unique_ptr<Impl> impl_;
119};
120
121namespace detail {
122
123std::shared_ptr<ValueChannelTelemetryControl> make_value_channel_telemetry_control();
124std::uint64_t
125value_channel_telemetry_control_identity(const ValueChannelTelemetryControl*) noexcept;
126void value_channel_telemetry_index_add(ValueChannelTelemetryControl*, std::string_view name,
127 ValueChannelShape shape, std::size_t index);
128std::ptrdiff_t value_channel_telemetry_index_lookup(const ValueChannelTelemetryControl*,
129 std::string_view name,
130 ValueChannelShape shape) noexcept;
131std::shared_ptr<ValueChannelTelemetryState> make_scalar_telemetry_state();
132std::shared_ptr<ValueChannelTelemetryState> make_meter_telemetry_state();
133std::shared_ptr<ValueChannelTelemetryState> make_vector_telemetry_state();
134std::shared_ptr<ValueChannelTelemetryState> make_event_telemetry_state();
135
136ScalarTelemetryState* scalar_telemetry_writer(ValueChannelTelemetryState*) noexcept;
137MeterTelemetryState* meter_telemetry_writer(ValueChannelTelemetryState*) noexcept;
138VectorTelemetryState* vector_telemetry_writer(ValueChannelTelemetryState*) noexcept;
139EventTelemetryState* event_telemetry_writer(ValueChannelTelemetryState*) noexcept;
140
141void record_scalar_snapshot(ScalarTelemetryState*, float, std::uint64_t) noexcept;
142void record_meter_snapshot(MeterTelemetryState*, const MeterFrame&, std::uint64_t) noexcept;
143void record_vector_snapshot(VectorTelemetryState*, const VectorFrame&, std::uint64_t) noexcept;
144void push_event_telemetry(EventTelemetryState*, const EventFrame&, std::uint64_t) noexcept;
145void mark_scalar_source_dead(ScalarTelemetryState*) noexcept;
146void mark_meter_source_dead(MeterTelemetryState*) noexcept;
147void mark_vector_source_dead(VectorTelemetryState*) noexcept;
148void mark_event_source_dead(EventTelemetryState*) noexcept;
149
150} // namespace detail
151
152} // namespace pulp::dataplane
bool read_continuous(std::size_t index, ValueChannelTelemetrySnapshot &snapshot) noexcept
Read the latest UI-consumed snapshot.
friend class ValueChannelSet
Definition value_channel_telemetry.hpp:112
std::span< const ValueChannelTelemetryDescriptor > channels() const noexcept
ValueChannelTelemetryEventStats event_stats(std::size_t index) const noexcept
bool source_alive(std::size_t index) const noexcept
ValueChannelTelemetryAttachment(ValueChannelTelemetryAttachment &&) noexcept
bool try_pop_events(std::size_t index, ValueChannelTelemetryEventBatch &batch) noexcept
Pop the next producer event batch.
Paint-safe host→view value channels.
Definition value_channel_telemetry.hpp:74
std::shared_ptr< ValueChannelTelemetryState > make_meter_telemetry_state()
void mark_scalar_source_dead(ScalarTelemetryState *) noexcept
void record_meter_snapshot(MeterTelemetryState *, const MeterFrame &, std::uint64_t) noexcept
std::shared_ptr< ValueChannelTelemetryState > make_vector_telemetry_state()
std::shared_ptr< ValueChannelTelemetryState > make_event_telemetry_state()
void mark_meter_source_dead(MeterTelemetryState *) noexcept
std::shared_ptr< ValueChannelTelemetryControl > make_value_channel_telemetry_control()
std::shared_ptr< ValueChannelTelemetryState > make_scalar_telemetry_state()
void mark_vector_source_dead(VectorTelemetryState *) noexcept
void record_vector_snapshot(VectorTelemetryState *, const VectorFrame &, std::uint64_t) noexcept
void mark_event_source_dead(EventTelemetryState *) noexcept
MeterTelemetryState * meter_telemetry_writer(ValueChannelTelemetryState *) noexcept
void push_event_telemetry(EventTelemetryState *, const EventFrame &, std::uint64_t) noexcept
void record_scalar_snapshot(ScalarTelemetryState *, float, std::uint64_t) noexcept
VectorTelemetryState * vector_telemetry_writer(ValueChannelTelemetryState *) noexcept
std::ptrdiff_t value_channel_telemetry_index_lookup(const ValueChannelTelemetryControl *, std::string_view name, ValueChannelShape shape) noexcept
void value_channel_telemetry_index_add(ValueChannelTelemetryControl *, std::string_view name, ValueChannelShape shape, std::size_t index)
ScalarTelemetryState * scalar_telemetry_writer(ValueChannelTelemetryState *) noexcept
EventTelemetryState * event_telemetry_writer(ValueChannelTelemetryState *) noexcept
std::uint64_t value_channel_telemetry_control_identity(const ValueChannelTelemetryControl *) noexcept
Definition audio_bridge.hpp:9
std::variant< float, MeterFrame, VectorFrame > ValueChannelContinuousPayload
Definition value_channel_telemetry.hpp:39
ValueChannelShape
The shape of a channel's payload.
Definition value_channel_telemetry.hpp:21
@ meter
a multi-channel MeterFrame (peak/RMS per channel)
Definition value_channel_telemetry.hpp:23
@ vector
a block of samples for a scope-style display
Definition value_channel_telemetry.hpp:24
@ scalar
one number per publish (gain reduction, envelope level)
Definition value_channel_telemetry.hpp:22
Definition child_process_manager.hpp:18
STL namespace.
A bounded list of occurrences from one audio block.
Definition value_source.hpp:135
A single multi-channel meter reading.
Definition value_source.hpp:39
What a channel is, for discovery and for a UI lint to check names against.
Definition value_channel_telemetry.hpp:29
std::string unit
display only ("dB", "Hz"); may be empty
Definition value_channel_telemetry.hpp:31
std::string name
verbatim lookup key
Definition value_channel_telemetry.hpp:30
float neutral
The value a bound view falls back to when the channel goes stale.
Definition value_channel_telemetry.hpp:36
ValueChannelShape shape
Definition value_channel_telemetry.hpp:32
Stable metadata for a channel held by a telemetry attachment.
Definition value_channel_telemetry.hpp:67
bool has_source_timestamp
Definition value_channel_telemetry.hpp:70
bool has_ui_snapshot_timestamp
Definition value_channel_telemetry.hpp:71
ValueChannelInfo info
Definition value_channel_telemetry.hpp:69
std::size_t index
Definition value_channel_telemetry.hpp:68
One producer event batch retained by the ordered telemetry tap.
Definition value_channel_telemetry.hpp:54
EventFrame frame
Definition value_channel_telemetry.hpp:55
std::uint64_t source_publication
Definition value_channel_telemetry.hpp:56
Current producer-tap state. Overflow is cumulative for the source lifetime.
Definition value_channel_telemetry.hpp:60
std::size_t capacity
Definition value_channel_telemetry.hpp:62
std::uint64_t overflow_count
Definition value_channel_telemetry.hpp:63
std::size_t size_approx
Definition value_channel_telemetry.hpp:61
A coherent continuous payload copied by the existing UI reader path.
Definition value_channel_telemetry.hpp:42
std::int64_t ui_snapshot_time_ns
Steady-clock nanoseconds captured by the UI reader.
Definition value_channel_telemetry.hpp:49
std::uint64_t source_publication
Definition value_channel_telemetry.hpp:45
bool available
Definition value_channel_telemetry.hpp:50
ValueChannelContinuousPayload payload
Definition value_channel_telemetry.hpp:44
std::uint64_t ui_snapshot_sequence
Definition value_channel_telemetry.hpp:46
ValueChannelShape shape
Definition value_channel_telemetry.hpp:43
A block of samples for a scope-style display — an envelope curve, a detector's output,...
Definition value_source.hpp:108