Sen API
Sen Libraries
Loading...
Searching...
No Matches
component_api.h
Go to the documentation of this file.
1// === component_api.h =================================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_KERNEL_COMPONENT_API_H
9#define SEN_KERNEL_COMPONENT_API_H
10
11// sen
17#include "sen/core/base/span.h"
20#include "sen/core/meta/var.h"
23#include "sen/core/obj/object.h"
27
28// kernel
29#include "sen/kernel/kernel.h"
31#include "sen/kernel/tracer.h"
33
34// generated code
35#include "stl/sen/kernel/basic_types.stl.h"
36#include "stl/sen/kernel/network_footprint.stl.h"
37
38// spdlog
39#include <spdlog/logger.h>
40#include <spdlog/sinks/sink.h>
41
42// std
43#include <atomic>
44#include <cstddef>
45#include <cstdint>
46#include <cstring>
47#include <filesystem>
48#include <functional>
49#include <memory>
50#include <optional>
51#include <string>
52#include <string_view>
53#include <type_traits>
54#include <utility>
55#include <vector>
56
57namespace sen::kernel
58{
59
62
65
67using NetworkFootprintReporter = NetworkFootprint(Span<const BusAddress>) const;
68
70class RunApi;
71class KernelApi;
72
88
95{
96 bool added = false;
98 bool ownsTerminal = false;
100 std::size_t registeredSinks = 0;
101};
102
103namespace impl
104{
105
106class Runner;
107class KernelImpl;
108
109[[nodiscard]] FuncResult execLoop(Runner* runner,
110 Duration cycleTime,
111 std::function<void()>&& workFunction,
112 bool logOverruns);
113
114void installTransportFactory(KernelImpl* kernel, TransportFactory&& factory, uint32_t transportVersion);
115
116void remoteProcessDetected(RunApi& api, const ProcessInfo& processInfo);
117
118void remoteProcessLost(RunApi& api, const ProcessInfo& processInfo);
119
120[[nodiscard]] std::shared_ptr<ObjectSource> getSource(Runner* runner, const BusAddress& address);
121
122[[nodiscard]] SessionsDiscoverer& getSessionsDiscoverer(Runner* runner);
123
124[[nodiscard]] const ProcessInfo* fetchOwnerInfo(const Object* object);
125
126[[nodiscard]] ::sen::impl::WorkQueue* getWorkQueue(Runner* runner);
127
128[[nodiscard]] std::shared_ptr<spdlog::logger> getOrCreateLogger(const std::string& loggerName);
129
130void applyToAllLoggers(std::function<void(std::shared_ptr<spdlog::logger>)>&& func);
131
132[[nodiscard]] Result<LoggerSinkRegistration, ExecError> addLoggerSink(std::shared_ptr<spdlog::sinks::sink> sink,
133 TerminalOwnership terminal);
134
135[[nodiscard]] FuncResult removeLoggerSink(const std::shared_ptr<spdlog::sinks::sink>& sink);
136
137[[nodiscard]] FuncResult setAllLoggersLevel(spdlog::level::level_enum level);
138
139[[nodiscard]] spdlog::level::level_enum getAllLoggersLevel();
140
141void setCrashBannerDescriptor(int descriptor) noexcept;
142
143void prepareCurrentThreadForCrashReports() noexcept;
144
145} // namespace impl
146
149{
150 std::string name;
151 uint32_t group = 0;
152 bool requiresRealTime = false;
153 std::optional<Duration> cycleTime;
154 std::size_t objectCount = 0;
158 std::optional<Duration> lastCycleExecutionCpuTime;
159
163 std::optional<Duration> lastCycleComponentCpuTime;
164
168 std::optional<Duration> lastCycleQueuedWorkCpuTime;
169
173 std::optional<Duration> worstCycleExecutionCpuTime;
174
176 std::optional<Duration> worstCycleComponentCpuTime;
177
181 std::optional<Duration> lastCycleStartDelay;
182
185 std::optional<Duration> worstStartDelay;
186
191 std::optional<uint64_t> overrunCount;
192
198 std::optional<uint64_t> missedFrameCount;
199
204 std::optional<uint64_t> oversleptCount;
205};
206
209{
210 RunMode runMode = RunMode::realTime;
212 std::vector<ComponentMonitoringInfo> components;
213};
214
217{
218public:
219 KernelApi(Kernel& kernel, impl::Runner* runner) noexcept;
220
221public:
223 [[nodiscard]] CustomTypeRegistry& getTypes() noexcept;
224
227 void requestKernelStop(int exitCode = 0);
228
230 [[nodiscard]] std::shared_ptr<ObjectSource> getSource(const BusAddress& address);
231
234 [[nodiscard]] std::shared_ptr<ObjectSource> getSource(const std::string& address);
235
237 [[nodiscard]] SessionsDiscoverer& getSessionsDiscoverer() noexcept;
238
241 [[nodiscard]] const ProcessInfo* fetchOwnerInfo(const Object* object) const noexcept;
242
244 [[nodiscard]] const std::string& getAppName() const noexcept;
245
247 [[nodiscard]] std::vector<BusAddress> getConfiguredBusAddresses() const;
248
250 [[nodiscard]] ::sen::impl::WorkQueue* getWorkQueue() const noexcept;
251
259 template <typename T, typename Bus>
260 [[nodiscard]] std::shared_ptr<Subscription<T>> selectAllFrom(const Bus& bus);
261
264 template <typename T, typename Bus>
265 [[nodiscard]] std::shared_ptr<Subscription<T>> selectAllFrom(
266 const Bus& bus,
267 typename sen::ObjectList<T>::Callback onAdded,
268 typename sen::ObjectList<T>::Callback onRemoved = nullptr);
269
273 template <typename T, typename Bus>
274 [[nodiscard]] std::shared_ptr<Subscription<T>> selectFrom(const Bus& bus,
275 const std::string& query,
276 typename sen::ObjectList<T>::Callback onAdded = nullptr,
277 typename sen::ObjectList<T>::Callback onRemoved = nullptr);
278
281 [[nodiscard]] std::filesystem::path getConfigFilePath() const noexcept { return kernel_.getConfigPath(); }
282
285 [[nodiscard]] static std::shared_ptr<spdlog::logger> getOrCreateLogger(const std::string& loggerName);
286
294 static void applyToAllLoggers(std::function<void(std::shared_ptr<spdlog::logger>)>&& func);
295
309
334 std::shared_ptr<spdlog::sinks::sink> sink,
336
341 [[nodiscard]] static FuncResult removeLoggerSink(const std::shared_ptr<spdlog::sinks::sink>& sink);
342
353 [[nodiscard]] static FuncResult setAllLoggersLevel(spdlog::level::level_enum level);
354
363 static void setCrashBannerDescriptor(int descriptor) noexcept;
364
372
377 [[nodiscard]] static spdlog::level::level_enum getAllLoggersLevel();
378
379private:
380 template <typename T>
381 [[nodiscard]] std::string buildQuery(const BusAddress& address) const;
382
383 template <typename T>
384 [[nodiscard]] std::string buildQuery(std::string_view bus) const;
385
386private:
387 Kernel& kernel_;
388 impl::Runner* runner_;
389};
390
393{
394public:
395 explicit ConfigGetter(const VarMap& config) noexcept;
396
397public:
399 [[nodiscard]] const VarMap& getConfig() const noexcept;
400
401private:
402 const VarMap& config_;
403};
404
407{
408public:
409 SEN_NOCOPY_NOMOVE(RegistrationApi)
410
411public:
412 RegistrationApi(Kernel& kernel, impl::Runner* runner, const VarMap& config) noexcept;
413 ~RegistrationApi() noexcept = default;
414};
415
417class PreloadApi: public ConfigGetter, public KernelApi
418{
419 SEN_NOCOPY_NOMOVE(PreloadApi)
420
421public:
422 PreloadApi(Kernel& kernel, impl::Runner* runner, const VarMap& config) noexcept;
423
424 ~PreloadApi() noexcept = default;
425
426public:
428 void installTransportFactory(TransportFactory&& factory, uint32_t transportVersion) const;
429
431 void installTracerFactory(TracerFactory&& factory) const;
432
435 void installFootprintReporter(sen::std_util::move_only_function<NetworkFootprintReporter>&& reporter);
436
438 void installFootprintReporter(sen::std_util::move_only_function<NetworkFootprintReporter>&& offlineReporter,
439 sen::std_util::move_only_function<NetworkFootprint() const>&& runtimeReporter);
440
441private:
442 Kernel& kernel_;
443};
444
446class LoadApi: public ConfigGetter, public KernelApi
447{
448 SEN_NOCOPY_NOMOVE(LoadApi)
449
450public:
451 LoadApi(Kernel& kernel, impl::Runner* runner, const VarMap& config) noexcept;
452
453 ~LoadApi() noexcept = default;
454};
455
457class InitApi: public ConfigGetter, public KernelApi
458{
459 SEN_NOCOPY_NOMOVE(InitApi)
460
461public:
462 InitApi(Kernel& kernel, impl::Runner* runner, const VarMap& config) noexcept;
463
464 ~InitApi() noexcept = default;
465};
466
468class RunApi: public ConfigGetter, public KernelApi
469{
470public:
471 SEN_NOCOPY_NOMOVE(RunApi)
472
473public:
475 impl::KernelImpl& kernelImpl,
476 impl::Runner* runner,
477 std::atomic_bool& stopRequested,
478 const VarMap& config,
479 Guarded<TimeStamp>& timePoint) noexcept;
480
481 ~RunApi() noexcept = default;
482
483public:
485 [[nodiscard]] const std::atomic_bool& stopRequested() const noexcept;
486
491
493 void update();
494
499 void commit();
500
505 [[nodiscard]] FuncResult execLoop(Duration cycleTime,
506 std::function<void()>&& func = nullptr,
507 bool logOverruns = true);
508
510 [[nodiscard]] TimeStamp getStartTime() const noexcept;
511
513 [[nodiscard]] TimeStamp getTime() const noexcept;
514
516 [[nodiscard]] std::optional<Duration> getTargetCycleTime() const noexcept;
517
520
523
527 [[nodiscard]] Span<const ComponentInfo> getImportedPackages() const noexcept;
528
534 [[nodiscard]] Span<const ComponentInfo> getLoadedComponents() const noexcept;
535
538 [[nodiscard]] std::optional<uint32_t> getTransportProtocolVersion() const noexcept;
539
541 [[nodiscard]] Tracer& getTracer() const noexcept;
542
543private:
544 friend void impl::remoteProcessDetected(RunApi& api, const ProcessInfo& processInfo);
545
546 friend void impl::remoteProcessLost(RunApi& api, const ProcessInfo& processInfo);
547
548private:
549 impl::KernelImpl& kernelImpl_;
550 impl::Runner* runner_;
551 std::atomic_bool& stopRequested_;
552 Guarded<TimeStamp>& timePoint_;
553};
554
556class UnloadApi: public ConfigGetter, public KernelApi
557{
558 SEN_NOCOPY_NOMOVE(UnloadApi)
559
560public:
561 UnloadApi(Kernel& kernel, const VarMap& config, impl::Runner* runner) noexcept;
562 ~UnloadApi() noexcept = default;
563};
564
565//----------------------------------------------------------------------------------------------------------------------
566// Inline implementation
567//----------------------------------------------------------------------------------------------------------------------
568
569template <typename T, typename Bus>
570inline std::shared_ptr<Subscription<T>> KernelApi::selectAllFrom(const Bus& bus)
571{
572 auto sub = std::make_shared<Subscription<T>>();
573 sub->attachTo(getSource(bus), Interest::make(buildQuery<T>(bus), getTypes()), true);
574 return sub;
575}
576
577template <typename T, typename Bus>
578inline std::shared_ptr<Subscription<T>> KernelApi::selectAllFrom(const Bus& bus,
579 typename ObjectList<T>::Callback onAdded,
580 typename ObjectList<T>::Callback onRemoved)
581{
582 auto sub = std::make_shared<Subscription<T>>();
583 // Install callbacks before subscribing so they fire for objects already present.
584 if (onAdded)
585 {
586 std::ignore = sub->list.onAdded(std::move(onAdded));
587 }
588 if (onRemoved)
589 {
590 std::ignore = sub->list.onRemoved(std::move(onRemoved));
591 }
592 sub->attachTo(getSource(bus), Interest::make(buildQuery<T>(bus), getTypes()), true);
593 return sub;
594}
595
596template <typename T, typename Bus>
597inline std::shared_ptr<Subscription<T>> KernelApi::selectFrom(const Bus& bus,
598 const std::string& query,
599 typename sen::ObjectList<T>::Callback onAdded,
600 typename sen::ObjectList<T>::Callback onRemoved)
601{
602 auto sub = std::make_shared<Subscription<T>>();
603
604 // Install callbacks before subscribing so they fire for objects already present.
605 if (onAdded)
606 {
607 std::ignore = sub->list.onAdded(std::move(onAdded));
608 }
609 if (onRemoved)
610 {
611 std::ignore = sub->list.onRemoved(std::move(onRemoved));
612 }
613 sub->attachTo(getSource(bus), Interest::make(query, getTypes()), true);
614 return sub;
615}
616
617namespace impl
618{
619
623template <typename T>
624[[nodiscard]] inline std::string_view queryTypeName()
625{
626 if constexpr (std::is_same_v<T, Object>)
627 {
628 return "*";
629 }
630 else
631 {
632 static_assert(std::is_same_v<decltype(T::meta()), ::sen::ConstTypeHandle<::sen::ClassType>>,
633 "a subscription type must be a Sen object class");
634 return T::meta()->getQualifiedName();
635 }
636}
637
638} // namespace impl
639
640template <typename T>
641inline std::string KernelApi::buildQuery(const BusAddress& address) const
642{
643 std::string query = "SELECT ";
644 query.append(impl::queryTypeName<T>());
645 query.append(" FROM ");
646 query.append(address.sessionName);
647 query.append(".");
648 query.append(address.busName);
649
650 return query;
651}
652
653template <typename T>
654inline std::string KernelApi::buildQuery(std::string_view bus) const
655{
656 std::string query = "SELECT ";
657 query.append(impl::queryTypeName<T>());
658 query.append(" FROM ");
659 query.append(bus);
660
661 return query;
662}
663
664} // namespace sen::kernel
665
666#endif // SEN_KERNEL_COMPONENT_API_H
Base class for event or method callbacks. It stores the queue where to push the response....
Definition callback.h:146
A registry of custom types.
Definition type_registry.h:36
A time duration.
Definition duration.h:25
static std::shared_ptr< Interest > make(std::string_view query, const CustomTypeRegistry &typeRegistry)
Make an interest from a query. Throws std::exception if not well formed.
A sen object.
Definition object.h:76
A list of objects that is managed by some source based on user-expressed interests.
Definition object_list.h:30
std::function< void(const Iterators &iterators)> Callback
Definition object_list.h:70
Allows adding and receiving objects.
Definition object_source.h:35
Result<T, E> is a template type that can be used to return and propagate errors. The intent is to rep...
Definition result.h:135
Contiguous view of elements of type T. Inspired by http://www.open-std.org/jtc1/sc22/wg21/docs/papers...
Definition span.h:34
A point in time.
Definition timestamp.h:26
ConfigGetter(const VarMap &config) noexcept
const VarMap & getConfig() const noexcept
Gets the configuration associated with this component.
~InitApi() noexcept=default
InitApi(Kernel &kernel, impl::Runner *runner, const VarMap &config) noexcept
User-facing kernel functions.
Definition component_api.h:217
::sen::impl::WorkQueue * getWorkQueue() const noexcept
The work queue of this runner.
KernelApi(Kernel &kernel, impl::Runner *runner) noexcept
std::shared_ptr< Subscription< T > > selectFrom(const Bus &bus, const std::string &query, typename sen::ObjectList< T >::Callback onAdded=nullptr, typename sen::ObjectList< T >::Callback onRemoved=nullptr)
Subscription against an arbitrary Sen query (with WHERE conditions). Example: selectFrom<Shape>(bus,...
Definition component_api.h:597
std::shared_ptr< ObjectSource > getSource(const BusAddress &address)
Gets an object source, where objects can be found and published.
static FuncResult setAllLoggersLevel(spdlog::level::level_enum level)
Sets the level on every logger the kernel knows and on every logger made afterwards.
static Result< LoggerSinkRegistration, ExecError > addLoggerSink(std::shared_ptr< spdlog::sinks::sink > sink, TerminalOwnership terminal=TerminalOwnership::shared)
Sends every logger's output to sink, including loggers made afterwards.
static void prepareCurrentThreadForCrashReports() noexcept
Give the calling thread the alternate signal stack the crash handler needs.
static void setCrashBannerDescriptor(int descriptor) noexcept
Where the kernel writes the crash banner, the few lines naming what died and where the report went,...
std::filesystem::path getConfigFilePath() const noexcept
Gets the path to the configuration file used to construct the kernel. It might be empty if the kernel...
Definition component_api.h:281
CustomTypeRegistry & getTypes() noexcept
The types registered into the kernel.
static std::shared_ptr< spdlog::logger > getOrCreateLogger(const std::string &loggerName)
Registers a new logger in the kernel if it does not exist, or returns the existing one by name....
SessionsDiscoverer & getSessionsDiscoverer() noexcept
Object that allows discovering sessions and buses.
const ProcessInfo * fetchOwnerInfo(const Object *object) const noexcept
Gets information about the process where an object is. Returns nullptr if the object resides in the c...
const std::string & getAppName() const noexcept
Gets the (optional) application name passed to the kernel as a configuration parameter.
static FuncResult removeLoggerSink(const std::shared_ptr< spdlog::sinks::sink > &sink)
Stops sending output to sink. Restores the console sinks if this was the last registered sink claimin...
static spdlog::level::level_enum getAllLoggersLevel()
The level setAllLoggersLevel last set, which is also the level a new logger starts from.
::sen::kernel::TerminalOwnership TerminalOwnership
The logger state below is per process, not per kernel. The relay sink and the record of what the cons...
Definition component_api.h:308
static void applyToAllLoggers(std::function< void(std::shared_ptr< spdlog::logger >)> &&func)
Applies the input function to all loggers kept in the logger registry. Used by the logmaster componen...
std::vector< BusAddress > getConfiguredBusAddresses() const
Gets configured non-local bus addresses.
void requestKernelStop(int exitCode=0)
Issues an asynchronous request to stop the kernel. The request is ignored if a previous stop request ...
std::shared_ptr< Subscription< T > > selectAllFrom(const Bus &bus)
Subscribe to every object of type T on bus. The returned Subscription owns the kernel-side wiring; de...
Definition component_api.h:570
Main entry point of a sen microkernel.
Definition kernel.h:43
~LoadApi() noexcept=default
LoadApi(Kernel &kernel, impl::Runner *runner, const VarMap &config) noexcept
PreloadApi(Kernel &kernel, impl::Runner *runner, const VarMap &config) noexcept
void installFootprintReporter(sen::std_util::move_only_function< NetworkFootprintReporter > &&reporter)
Installs a footprint reporter. The kernel stores a single reporter, installing another replaces the e...
~PreloadApi() noexcept=default
void installTracerFactory(TracerFactory &&factory) const
Installs a tracer factory.
void installTransportFactory(TransportFactory &&factory, uint32_t transportVersion) const
Installs a transport factory for the kernel to use for sessions.
RegistrationApi(Kernel &kernel, impl::Runner *runner, const VarMap &config) noexcept
~RegistrationApi() noexcept=default
What can be done while a component is running.
Definition component_api.h:469
Span< const ComponentInfo > getLoadedComponents() const noexcept
Build information for every component loaded into the kernel, excluding pipeline components (which ar...
TimeStamp getStartTime() const noexcept
The initial simulation time for the objects in the component.
Span< const ComponentInfo > getImportedPackages() const noexcept
Build information for all imported packages (from pipeline components). The returned span references ...
void commit()
Send changes, so that they become visible to other participants. This includes object additions and r...
Tracer & getTracer() const noexcept
Create a scoped zone used for tracing runtime performance.
void drainInputs()
Perform any request coming from the outside and drainInputs all the local data structures with their ...
ComponentMonitoringInfo fetchComponentMonitoringInfo() const
Monitoring information of the calling component.
~RunApi() noexcept=default
std::optional< Duration > getTargetCycleTime() const noexcept
If present, it returns the configured cycle time for iterations.
std::optional< uint32_t > getTransportProtocolVersion() const noexcept
Version of the currently installed transport protocol. Empty when no transport is installed....
FuncResult execLoop(Duration cycleTime, std::function< void()> &&func=nullptr, bool logOverruns=true)
A basic execution loop. Func is an optional callback that will be invoked on each cycle....
RunApi(Kernel &kernel, impl::KernelImpl &kernelImpl, impl::Runner *runner, std::atomic_bool &stopRequested, const VarMap &config, Guarded< TimeStamp > &timePoint) noexcept
KernelMonitoringInfo fetchMonitoringInfo() const
Monitoring information of all components loaded by the kernel.
friend void impl::remoteProcessLost(RunApi &api, const ProcessInfo &processInfo)
const std::atomic_bool & stopRequested() const noexcept
True if stop has been requested by the runtime.
void update()
This calls update() on all the objects registered by the component.
friend void impl::remoteProcessDetected(RunApi &api, const ProcessInfo &processInfo)
TimeStamp getTime() const noexcept
The (potentially virtualized) time.
Definition source_info.h:99
Interface implemented by tracers. You can use it to trace the behavior of your code....
Definition tracer.h:28
UnloadApi(Kernel &kernel, const VarMap &config, impl::Runner *runner) noexcept
~UnloadApi() noexcept=default
std::function< std::unique_ptr< Transport >(const std::string &, std::unique_ptr< Tracer > tracer)> TransportFactory
A function that creates a transport given a session name.
Definition include/sen/kernel/transport.h:203
Global transport statistics.
Definition include/sen/kernel/transport.h:146
std::map< std::string, Var, std::less<> > VarMap
A map of vars to represent structures.
Definition var.h:107
TypeHandle< const T > ConstTypeHandle
Definition type.h:319
Strong type for the unique identifier for a transport timer.
Definition native_object_impl.h:39
bool terminalOwnedElsewhere
whether a different registered sink holds the claim
Definition component_api.h:99
std::optional< Duration > lastCycleExecutionCpuTime
Thread CPU time, user and system, consumed by the last completed execution cycle. On Windows every CP...
Definition component_api.h:158
std::size_t registeredSinks
sinks registered behind the relay, this one included
Definition component_api.h:100
std::optional< Duration > lastCycleStartDelay
How late the thread woke for the cycle it was waiting for. The scheduler's contribution,...
Definition component_api.h:181
std::optional< Duration > lastCycleQueuedWorkCpuTime
The part of that spent on work queued on the component: the callbacks it registered,...
Definition component_api.h:168
uint32_t group
Definition component_api.h:151
TerminalOwnership
Whether the component registering a log sink owns the terminal.
Definition component_api.h:84
@ owned
Definition component_api.h:86
@ shared
Definition component_api.h:85
Result< OpState, ExecError > PassResult
The result of operations that may be called multiple times.
Definition component_api.h:64
std::optional< Duration > worstStartDelay
The latest the thread has ever woken. A machine that is late once in a thousand cycles rarely has it ...
Definition component_api.h:185
std::function< std::unique_ptr< Tracer >(std::string_view)> TracerFactory
A factory function for tracers.
Definition tracer.h:119
std::optional< uint64_t > overrunCount
Cycles whose execution used more CPU time than the period. A cycle that blocked rather than computed ...
Definition component_api.h:191
Result< void, ExecError > FuncResult
The result of operations that are called once.
Definition component_api.h:61
bool ownsTerminal
whether this sink now holds the terminal claim
Definition component_api.h:98
std::optional< Duration > cycleTime
Definition component_api.h:153
std::vector< ComponentMonitoringInfo > components
Definition component_api.h:212
std::optional< uint64_t > oversleptCount
Cycles lost because the sleep returned late, so the component was not running when it should have bee...
Definition component_api.h:204
std::size_t objectCount
Definition component_api.h:154
std::string name
Definition component_api.h:150
std::optional< Duration > lastCycleComponentCpuTime
The part of that spent in the component's own code: its objects' update() and its work function....
Definition component_api.h:163
std::optional< Duration > worstCycleComponentCpuTime
The component's share of that same worst cycle, so the two can be compared.
Definition component_api.h:176
RunMode runMode
Definition component_api.h:210
std::optional< uint64_t > missedFrameCount
Cycles lost because the work finished after the cycle it belonged to. Every lost cycle is counted,...
Definition component_api.h:198
NetworkFootprint(Span< const BusAddress >) const NetworkFootprintReporter
Callable that builds a network footprint from bus addresses.
Definition component_api.h:67
bool requiresRealTime
Definition component_api.h:152
std::optional< Duration > worstCycleExecutionCpuTime
The most CPU time any one cycle has used since the component started running, leaving out its first c...
Definition component_api.h:173
TransportStats transportStats
Definition component_api.h:211
bool added
false when this sink was already registered, so the call only changed its terminal ownership
Definition component_api.h:96
Runtime monitoring information about a single component runner.
Definition component_api.h:149
Kernel runtime monitoring information.
Definition component_api.h:209
What registering a logger sink did.
Definition component_api.h:95
Definition bits.h:26
Definition assert.h:17
STL namespace.
Guarded is a lightweight wrapper class that can be used to protect an objet of type T from concurrent...
Definition mutex_utils.h:49
A list of objects and a reference to its source (to keep it alive).
Definition subscription.h:29