diff --git a/Makefile.am b/Makefile.am index a0d0c196..eb3e8673 100644 --- a/Makefile.am +++ b/Makefile.am @@ -90,6 +90,7 @@ weston_SOURCES = \ shared/helpers.h \ shared/matrix.c \ shared/matrix.h \ + shared/timespec-util.h \ shared/zalloc.h \ shared/platform.h \ src/weston-egl-ext.h diff --git a/shared/timespec-util.h b/shared/timespec-util.h new file mode 100644 index 00000000..0e05efc7 --- /dev/null +++ b/shared/timespec-util.h @@ -0,0 +1,61 @@ +/* + * Copyright © 2014 - 2015 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial + * portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef TIMESPEC_UTIL_H +#define TIMESPEC_UTIL_H + +#define NSEC_PER_SEC 1000000000 + +/* Subtract timespecs + * + * \param r[out] result: a - b + * \param a[in] operand + * \param b[in] operand + */ +static inline void +timespec_sub(struct timespec *r, + const struct timespec *a, const struct timespec *b) +{ + r->tv_sec = a->tv_sec - b->tv_sec; + r->tv_nsec = a->tv_nsec - b->tv_nsec; + if (r->tv_nsec < 0) { + r->tv_sec--; + r->tv_nsec += NSEC_PER_SEC; + } +} + +/* Convert timespec to nanoseconds + * + * \param a timespec + * \return nanoseconds + */ +static inline int64_t +timespec_to_nsec(const struct timespec *a) +{ + return (int64_t)a->tv_sec * NSEC_PER_SEC + a->tv_nsec; +} + + +#endif /* TIMESPEC_UTIL_H */ diff --git a/src/compositor.c b/src/compositor.c index 2a117d80..cafac296 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -58,31 +58,12 @@ #include "presentation_timing-server-protocol.h" #include "shared/helpers.h" #include "shared/os-compatibility.h" +#include "shared/timespec-util.h" #include "git-version.h" #include "version.h" #define DEFAULT_REPAINT_WINDOW 7 /* milliseconds */ -#define NSEC_PER_SEC 1000000000 - -static void -timespec_sub(struct timespec *r, - const struct timespec *a, const struct timespec *b) -{ - r->tv_sec = a->tv_sec - b->tv_sec; - r->tv_nsec = a->tv_nsec - b->tv_nsec; - if (r->tv_nsec < 0) { - r->tv_sec--; - r->tv_nsec += NSEC_PER_SEC; - } -} - -static int64_t -timespec_to_nsec(const struct timespec *a) -{ - return (int64_t)a->tv_sec * NSEC_PER_SEC + a->tv_nsec; -} - static void weston_output_transform_scale_init(struct weston_output *output, uint32_t transform, uint32_t scale);