Fix: pass private data to context callbacks
[lttng-ust.git] / liblttng-ust / clock.h
CommitLineData
8d8a24c8 1/*
c0c0989a 2 * SPDX-License-Identifier: LGPL-2.1-only
518d7abb 3 *
c0c0989a
MJ
4 * Copyright (C) 2010 Pierre-Marc Fournier
5 * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
518d7abb
PMF
6 */
7
9c6bb081
JD
8#ifndef _UST_CLOCK_H
9#define _UST_CLOCK_H
518d7abb 10
ca4525b5 11#include <time.h>
518d7abb 12#include <sys/time.h>
9edd34bd
MD
13#include <stdint.h>
14#include <stddef.h>
939950af 15#include <stdio.h>
f9364363
MD
16#include <urcu/system.h>
17#include <urcu/arch.h>
18#include <lttng/ust-clock.h>
19
eda498b8 20#include "lttng-ust-uuid.h"
518d7abb 21
33b563d6 22struct lttng_ust_trace_clock {
f9364363
MD
23 uint64_t (*read64)(void);
24 uint64_t (*freq)(void);
25 int (*uuid)(char *uuid);
26 const char *(*name)(void);
27 const char *(*description)(void);
28};
518d7abb 29
1d18d519
MJ
30extern struct lttng_ust_trace_clock *lttng_ust_trace_clock
31 __attribute__((visibility("hidden")));
518d7abb 32
f9364363
MD
33void lttng_ust_clock_init(void);
34
35/* Use the kernel MONOTONIC clock. */
518d7abb 36
28b12049 37static __inline__
f9364363 38uint64_t trace_clock_read64_monotonic(void)
9c6bb081
JD
39{
40 struct timespec ts;
9c6bb081 41
77686037
MD
42 if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) {
43 ts.tv_sec = 0;
44 ts.tv_nsec = 0;
45 }
dc190cc1 46 return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec;
9c6bb081
JD
47}
48
f9364363
MD
49static __inline__
50uint64_t trace_clock_read64(void)
51{
33b563d6 52 struct lttng_ust_trace_clock *ltc = CMM_LOAD_SHARED(lttng_ust_trace_clock);
f9364363
MD
53
54 if (caa_likely(!ltc)) {
55 return trace_clock_read64_monotonic();
56 } else {
57 cmm_read_barrier_depends(); /* load ltc before content */
58 return ltc->read64();
59 }
60}
61
9c6bb081 62#endif /* _UST_CLOCK_H */
This page took 0.037083 seconds and 4 git commands to generate.