Otherwise OK, but I'd highlight that ability to *share* time stamps is the main difference of global vs. local. See below.
> -----Original Message----- > From: EXT Ivan Khoronzhuk [mailto:[email protected]] > Sent: Friday, December 18, 2015 2:14 PM > To: [email protected] > Cc: Savolainen, Petri (Nokia - FI/Espoo); Ivan Khoronzhuk > Subject: [lng-odp] [API-NEXT PATCH 1/2] api: time: add global time API > > This patch add global time API and implements it in linux-generic. > > Signed-off-by: Ivan Khoronzhuk <[email protected]> > --- > include/odp/api/time.h | 28 ++++++++++++++++++++++++++++ > platform/linux-generic/odp_time.c | 34 +++++++++++++++++++++++++++------- > 2 files changed, 55 insertions(+), 7 deletions(-) > > diff --git a/include/odp/api/time.h b/include/odp/api/time.h > index 1f94710..895af75 100644 > --- a/include/odp/api/time.h > +++ b/include/odp/api/time.h > @@ -53,6 +53,18 @@ extern "C" { > odp_time_t odp_time_local(void); > > /** > + * Current global time > + * > + * Returns current global time stamp value. The global time source > provides high > + * resolution time, it is initialized to zero during ODP startup and will > not > + * wrap around in at least 10 years. The time is global that means it can > be > + * used between threads. This last sentence could be on its own line an simply state: "Global time stamps can be shared between threads" This patch could also add the same definition to odp_time_local() documentation: /** * Current local time * * Returns current local time stamp value. The local time source provides high * resolution time, it is initialized to zero during ODP startup and will not * wrap around in at least 10 years. * + * Local time stamps are local to the calling thread and must not be shared + * with other threads. * * @return Local time stamp. */ odp_time_t odp_time_local(void); odp_time_t typedef documents this already, but better to highlight it also on the time stamp calls. -Petri > + * > + * @return Global time stamp. > + */ > +odp_time_t odp_time_global(void); > + > +/** > * Time difference > * > * @param t2 Second time stamp > @@ -91,6 +103,15 @@ uint64_t odp_time_to_ns(odp_time_t time); > odp_time_t odp_time_local_from_ns(uint64_t ns); > > /** > + * Convert nanoseconds to global time > + * > + * @param ns Time in nanoseconds > + * > + * @return Global time stamp > + */ > +odp_time_t odp_time_global_from_ns(uint64_t ns); > + > +/** > * Compare two times > * > * @param t2 Second time > @@ -108,6 +129,13 @@ int odp_time_cmp(odp_time_t t2, odp_time_t t1); > uint64_t odp_time_local_res(void); > > /** > + * Global time resolution in hertz > + * > + * @return Global time resolution in hertz > + */ > +uint64_t odp_time_global_res(void); > + > +/** > * Wait until the specified (wall clock) time has been reached > * > * The thread potentially busy loop the entire wait time. > diff --git a/platform/linux-generic/odp_time.c b/platform/linux- > generic/odp_time.c > index a3ab2e3..2cb84f2 100644 > --- a/platform/linux-generic/odp_time.c > +++ b/platform/linux-generic/odp_time.c > @@ -101,11 +101,28 @@ static inline void time_wait_until(odp_time_t time) > } while (time_cmp(time, cur) > 0); > } > > +static inline uint64_t time_local_res(void) > +{ > + int ret; > + struct timespec tres; > + > + ret = clock_getres(CLOCK_MONOTONIC_RAW, &tres); > + if (odp_unlikely(ret != 0)) > + ODP_ABORT("clock_getres failed\n"); > + > + return ODP_TIME_SEC_IN_NS / (uint64_t)tres.tv_nsec; > +} > + > odp_time_t odp_time_local(void) > { > return time_local(); > } > > +odp_time_t odp_time_global(void) > +{ > + return time_local(); > +} > + > odp_time_t odp_time_diff(odp_time_t t2, odp_time_t t1) > { > return time_diff(t2, t1); > @@ -121,6 +138,11 @@ odp_time_t odp_time_local_from_ns(uint64_t ns) > return time_local_from_ns(ns); > } > > +odp_time_t odp_time_global_from_ns(uint64_t ns) > +{ > + return time_local_from_ns(ns); > +} > + > int odp_time_cmp(odp_time_t t2, odp_time_t t1) > { > return time_cmp(t2, t1); > @@ -133,14 +155,12 @@ odp_time_t odp_time_sum(odp_time_t t1, odp_time_t > t2) > > uint64_t odp_time_local_res(void) > { > - int ret; > - struct timespec tres; > - > - ret = clock_getres(CLOCK_MONOTONIC_RAW, &tres); > - if (odp_unlikely(ret != 0)) > - ODP_ABORT("clock_getres failed\n"); > + return time_local_res(); > +} > > - return ODP_TIME_SEC_IN_NS / (uint64_t)tres.tv_nsec; > +uint64_t odp_time_global_res(void) > +{ > + return time_local_res(); > } > > void odp_time_wait_ns(uint64_t ns) > -- > 1.9.1 _______________________________________________ lng-odp mailing list [email protected] https://lists.linaro.org/mailman/listinfo/lng-odp
