dual_timestamp* dual_timestamp_from_boottime_or_monotonic(dual_timestamp *ts, usec_t u) { int64_t delta; if (u == USEC_INFINITY) { ts->realtime = ts->monotonic = USEC_INFINITY; return ts; } dual_timestamp_get(ts); delta = (int64_t) now(clock_boottime_or_monotonic()) - (int64_t) u; ts->realtime = usec_sub(ts->realtime, delta); ts->monotonic = usec_sub(ts->monotonic, delta); return ts; }
triple_timestamp* triple_timestamp_from_realtime(triple_timestamp *ts, usec_t u) { int64_t delta; assert(ts); if (u == USEC_INFINITY || u <= 0) { ts->realtime = ts->monotonic = ts->boottime = u; return ts; } ts->realtime = u; delta = (int64_t) now(CLOCK_REALTIME) - (int64_t) u; ts->monotonic = usec_sub(now(CLOCK_MONOTONIC), delta); ts->boottime = clock_boottime_supported() ? usec_sub(now(CLOCK_BOOTTIME), delta) : USEC_INFINITY; return ts; }
dual_timestamp* dual_timestamp_from_monotonic(dual_timestamp *ts, usec_t u) { int64_t delta; assert(ts); if (u == USEC_INFINITY) { ts->realtime = ts->monotonic = USEC_INFINITY; return ts; } ts->monotonic = u; delta = (int64_t) now(CLOCK_MONOTONIC) - (int64_t) u; ts->realtime = usec_sub(now(CLOCK_REALTIME), delta); return ts; }