From: Alexandros Frantzis Date: Wed, 13 Dec 2017 11:27:53 +0000 (+0200) Subject: shared: Add timespec_from_proto helper function X-Git-Tag: upstream/5.0.0~356 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=787fa611de1b7c4144b7491260c513a5ec0a4728;p=platform%2Fupstream%2Fweston.git shared: Add timespec_from_proto helper function Add helper function to convert tv_sec_hi, tv_sec_lo, tv_nsec triplets, used for sending high-resolution timestamp data over the wayland protocol, to struct timespec values. Replace existing conversion code with the helper function. Signed-off-by: Alexandros Frantzis Reviewed-by: Pekka Paalanen --- diff --git a/clients/presentation-shm.c b/clients/presentation-shm.c index c9fb66c..d6a939e 100644 --- a/clients/presentation-shm.c +++ b/clients/presentation-shm.c @@ -39,6 +39,7 @@ #include #include "shared/helpers.h" #include "shared/zalloc.h" +#include "shared/timespec-util.h" #include "shared/os-compatibility.h" #include "presentation-time-client-protocol.h" @@ -383,14 +384,6 @@ timespec_to_ms(const struct timespec *ts) return (uint32_t)ts->tv_sec * 1000 + ts->tv_nsec / 1000000; } -static void -timespec_from_proto(struct timespec *tm, uint32_t tv_sec_hi, - uint32_t tv_sec_lo, uint32_t tv_nsec) -{ - tm->tv_sec = ((uint64_t)tv_sec_hi << 32) + tv_sec_lo; - tm->tv_nsec = tv_nsec; -} - static int timespec_diff_to_usec(const struct timespec *a, const struct timespec *b) { diff --git a/shared/timespec-util.h b/shared/timespec-util.h index f9736c2..5184d28 100644 --- a/shared/timespec-util.h +++ b/shared/timespec-util.h @@ -181,6 +181,21 @@ timespec_from_msec(struct timespec *a, int64_t b) timespec_from_nsec(a, b * 1000000); } +/* Convert protocol data to timespec + * + * \param a[out] timespec + * \param tv_sec_hi the high bytes of seconds part + * \param tv_sec_lo the low bytes of seconds part + * \param tv_nsec the nanoseconds part + */ +static inline void +timespec_from_proto(struct timespec *a, uint32_t tv_sec_hi, + uint32_t tv_sec_lo, uint32_t tv_nsec) +{ + a->tv_sec = ((uint64_t)tv_sec_hi << 32) + tv_sec_lo; + a->tv_nsec = tv_nsec; +} + /* Check if a timespec is zero * * \param a timespec diff --git a/tests/presentation-test.c b/tests/presentation-test.c index f12f8ee..f6ffe48 100644 --- a/tests/presentation-test.c +++ b/tests/presentation-test.c @@ -34,6 +34,7 @@ #include "shared/helpers.h" #include "shared/xalloc.h" +#include "shared/timespec-util.h" #include "weston-test-client-helper.h" #include "presentation-time-client-protocol.h" @@ -86,14 +87,6 @@ struct feedback { }; static void -timespec_from_proto(struct timespec *tm, uint32_t tv_sec_hi, - uint32_t tv_sec_lo, uint32_t tv_nsec) -{ - tm->tv_sec = ((uint64_t)tv_sec_hi << 32) + tv_sec_lo; - tm->tv_nsec = tv_nsec; -} - -static void feedback_sync_output(void *data, struct wp_presentation_feedback *presentation_feedback, struct wl_output *output) diff --git a/tests/timespec-test.c b/tests/timespec-test.c index f10ed76..a4d8dcf 100644 --- a/tests/timespec-test.c +++ b/tests/timespec-test.c @@ -238,6 +238,23 @@ ZUC_TEST(timespec_test, timespec_from_msec) ZUC_ASSERT_EQ(1000000, a.tv_nsec); } +ZUC_TEST(timespec_test, timespec_from_proto) +{ + struct timespec a; + + timespec_from_proto(&a, 0, 0, 0); + ZUC_ASSERT_EQ(0, a.tv_sec); + ZUC_ASSERT_EQ(0, a.tv_nsec); + + timespec_from_proto(&a, 0, 1234, 9999); + ZUC_ASSERT_EQ(1234, a.tv_sec); + ZUC_ASSERT_EQ(9999, a.tv_nsec); + + timespec_from_proto(&a, 0x1234, 0x5678, 1); + ZUC_ASSERT_EQ((time_t)0x0000123400005678LL, a.tv_sec); + ZUC_ASSERT_EQ(1, a.tv_nsec); +} + ZUC_TEST(timespec_test, timespec_is_zero) { struct timespec zero = { 0 };