17#define TRACE_NAME "TimestampEstimator"
28 : m_current_timestamp_estimate(
29 TimeSyncPoint{
std::numeric_limits<uint64_t>::max(),
std::chrono::time_point<
std::chrono::steady_clock>() })
30 , m_clock_frequency_hz(clock_frequency_hz)
31 , m_most_recent_daq_time(0)
32 , m_most_recent_system_time(0)
34 , m_received_timesync_count(0)
49 using namespace std::chrono;
54 if (estimate.
daq_time == std::numeric_limits<uint64_t>::max()) {
return estimate.
daq_time;}
56 auto delta_time_us = duration_cast<microseconds>(steady_clock::now() - estimate.
system_time).count();
63std::chrono::microseconds
68 return std::chrono::microseconds(0);
76 using namespace std::chrono;
82 int64_t diff = estimate.
daq_time - daq_time;
84 <<
", system time = " << system_time <<
" when current timestamp estimate was "
85 << estimate.
daq_time <<
". diff=" << diff;
94 using namespace std::chrono;
97 static_cast<uint64_t
>(duration_cast<microseconds>(system_clock::now().time_since_epoch()).count());
98 auto steady_time_now = steady_clock::now();
116 <<
"Time diff between current system and latest TimeSync system time [us]: " << delta_time;
120 if (delta_time > 1e6)
127 if (estimate.
daq_time == std::numeric_limits<uint64_t>::max() || new_timestamp >= estimate.
daq_time) {
129 <<
"Storing new timestamp estimate of " << new_timestamp <<
" ticks (..." << std::fixed
130 << std::setprecision(8)
136 <<
" sec), delta_time is " << delta_time <<
" usec, clock_freq is " <<
m_clock_frequency_hz <<
" Hz";
TimestampEstimator is an implementation of TimestampEstimatorBase that uses TimeSync messages from an...
std::atomic< TimeSyncPoint > m_current_timestamp_estimate
uint64_t m_most_recent_system_time
virtual ~TimestampEstimator()
uint64_t get_timestamp_estimate() const override
Returns the current timestamp estimate or a special value if no valid timestamp is available.
uint64_t m_most_recent_daq_time
std::chrono::microseconds get_wait_estimate(uint64_t ts) const override
void add_timestamp_datapoint(uint64_t daq_time, uint64_t system_time)
uint32_t m_current_process_id
TimestampEstimator(uint32_t run_number, uint64_t clock_frequency_hz)
uint64_t m_clock_frequency_hz
std::mutex m_datapoint_mutex
#define TLOG_DEBUG(lvl,...)
PDS Frame with unphysical timestamp detected with ts
void warning(const Issue &issue)
std::chrono::time_point< std::chrono::steady_clock > system_time
#define TLVL_TIME_SYNC_PROPERTIES
#define TLVL_TIME_SYNC_NEW_ESTIMATE
#define TLVL_TIME_SYNC_NOTES