systemclock: reorg real and mono time functions for macOS and win32
authortyler-aicradle <tyler@safex.ai>
Thu, 27 May 2021 14:44:29 +0000 (09:44 -0500)
committertyler-aicradle <tyler@safex.ai>
Thu, 27 May 2021 14:44:29 +0000 (09:44 -0500)
This simplifies the pre-processor checks a little to make it easier to
follow the code.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/829>

gst/gstsystemclock.c

index 3331fe3..31a2a26 100644 (file)
@@ -386,6 +386,10 @@ static void gst_system_clock_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec);
 
 static GstClockTime gst_system_clock_get_internal_time (GstClock * clock);
+#if defined __APPLE__ || defined G_OS_WIN32
+static GstClockTime gst_system_clock_get_mono_time (GstSystemClock * clock);
+static GstClockTime gst_system_clock_get_real_time ();
+#endif
 static guint64 gst_system_clock_get_resolution (GstClock * clock);
 static GstClockReturn gst_system_clock_id_wait_jitter (GstClock * clock,
     GstClockEntry * entry, GstClockTimeDiff * jitter);
@@ -828,37 +832,14 @@ gst_system_clock_get_internal_time (GstClock * clock)
   GstSystemClock *sysclock = GST_SYSTEM_CLOCK_CAST (clock);
 #if defined __APPLE__ || defined G_OS_WIN32
   if (sysclock->priv->clock_type == GST_CLOCK_TYPE_REALTIME) {
-    gint64 rt_micros = g_get_real_time ();
-    // g_get_real_time returns microseconds but we need nanos, so we'll multiply by 1000
-    return ((guint64) rt_micros) * 1000;
-  } else
-#endif
-#if defined __APPLE__
-  {
-    uint64_t mach_t = mach_absolute_time ();
-    return gst_util_uint64_scale (mach_t, sysclock->priv->mach_timebase.numer,
-        sysclock->priv->mach_timebase.denom);
-  }
-#elif defined G_OS_WIN32
-  {
-    if (sysclock->priv->frequency.QuadPart != 0) {
-      LARGE_INTEGER now;
-
-      /* we prefer the highly accurate performance counters on windows */
-      QueryPerformanceCounter (&now);
-
-      return gst_util_uint64_scale (now.QuadPart,
-          GST_SECOND, sysclock->priv->frequency.QuadPart);
-    } else {
-      gint64 monotime;
-
-      monotime = g_get_monotonic_time ();
-
-      return monotime * 1000;
-    }
+    return gst_system_clock_get_real_time ();
+  } else {
+    return gst_system_clock_get_mono_time (sysclock);
   }
 #elif defined HAVE_POSIX_TIMERS && defined HAVE_CLOCK_GETTIME
-    clockid_t ptype;
+  // BSD and Linux' Posix timers and clock_gettime cover all of the different clock types
+  // without need for special handling so we'll use those.
+  clockid_t ptype;
   struct timespec ts;
 
   ptype = clock_type_to_posix_id (sysclock->priv->clock_type);
@@ -867,8 +848,44 @@ gst_system_clock_get_internal_time (GstClock * clock)
     return GST_CLOCK_TIME_NONE;
 
   return GST_TIMESPEC_TO_TIME (ts);
-#endif /* __APPLE__ */
+#endif /* __APPLE__ || G_OS_WIN32 */
+}
+
+#if defined __APPLE__ || defined G_OS_WIN32
+static GstClockTime
+gst_system_clock_get_real_time ()
+{
+  gint64 rt_micros = g_get_real_time ();
+  // g_get_real_time returns microseconds but we need nanos, so we'll multiply by 1000
+  return ((guint64) rt_micros) * 1000;
+}
+
+static GstClockTime
+gst_system_clock_get_mono_time (GstSystemClock * sysclock)
+{
+#if defined __APPLE__
+  uint64_t mach_t = mach_absolute_time ();
+  return gst_util_uint64_scale (mach_t, sysclock->priv->mach_timebase.numer,
+      sysclock->priv->mach_timebase.denom);
+#else
+  if (sysclock->priv->frequency.QuadPart != 0) {
+    LARGE_INTEGER now;
+
+    /* we prefer the highly accurate performance counters on windows */
+    QueryPerformanceCounter (&now);
+
+    return gst_util_uint64_scale (now.QuadPart,
+        GST_SECOND, sysclock->priv->frequency.QuadPart);
+  } else {
+    gint64 monotime;
+
+    monotime = g_get_monotonic_time ();
+
+    return monotime * 1000;
+  }
+#endif
 }
+#endif /* __APPLE__ || G_OS_WIN32 */
 
 static guint64
 gst_system_clock_get_resolution (GstClock * clock)