11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
19PROMEKI_NAMESPACE_BEGIN
59class SyntheticClock :
public Clock {
65 explicit SyntheticClock(
const ClockDomain &domain = ClockDomain(ClockDomain::Synthetic));
72 explicit SyntheticClock(
const FrameRate &frameRate,
73 const ClockDomain &domain = ClockDomain(ClockDomain::Synthetic));
83 void setFrameRate(
const FrameRate &frameRate);
86 const FrameRate &frameRate()
const {
return _frameRate; }
92 void setCurrentFrame(
const FrameNumber &frame);
95 FrameNumber currentFrame()
const {
return FrameNumber(_currentFrame.value()); }
101 void advance(int64_t frames = 1);
107 void reset(
const FrameNumber &frame = FrameNumber(0));
109 int64_t resolutionNs()
const override;
110 ClockJitter jitter()
const override;
113 Result<int64_t> raw()
const override;
114 Error sleepUntilNs(int64_t targetNs)
const override;
117 void recomputePeriod();
119 FrameRate _frameRate;
120 Atomic<int64_t> _framePeriodNs{0};
121 Atomic<int64_t> _currentFrame{0};