Change to platform-specific typedef approach
authorfanyang-mono <yangfan@microsoft.com>
Thu, 23 Apr 2020 14:39:52 +0000 (10:39 -0400)
committerfanyang-mono <yangfan@microsoft.com>
Thu, 23 Apr 2020 14:39:52 +0000 (10:39 -0400)
src/mono/mono/mini/mini-posix.c
src/mono/mono/mini/mini-runtime.c
src/mono/mono/utils/mono-time.c
src/mono/mono/utils/mono-time.h

index f2428e3..52550c0 100644 (file)
@@ -623,7 +623,7 @@ clock_sleep_ns_abs (guint64 ns_abs)
         * nanoseconds).
         */
        do {
-               diff = (gint64) ns_abs - (gint64) clock_get_time_ns ();
+               diff = (gint64) ns_abs - (gint64) mono_clock_get_time_ns (sampling_clock);
 
                if (diff <= 0)
                        break;
@@ -691,17 +691,17 @@ init:
                goto init;
        }
 
-       mono_clock_init (&sampling_clock);
+       mono_clock_init (sampling_clock);
        clock_init_for_profiler (mode);
 
-       for (guint64 sleep = mono_clock_get_time_ns (&sampling_clock); mono_atomic_load_i32 (&sampling_thread_running); clock_sleep_ns_abs (sleep)) {
+       for (guint64 sleep = mono_clock_get_time_ns (sampling_clock); mono_atomic_load_i32 (&sampling_thread_running); clock_sleep_ns_abs (sleep)) {
                uint32_t freq;
                MonoProfilerSampleMode new_mode;
 
                mono_profiler_get_sample_mode (NULL, &new_mode, &freq);
 
                if (new_mode != mode) {
-                       mono_clock_cleanup (&sampling_clock);
+                       mono_clock_cleanup (sampling_clock);
                        goto init;
                }
 
@@ -723,7 +723,7 @@ init:
                } FOREACH_THREAD_SAFE_END
        }
 
-       mono_clock_cleanup (&sampling_clock);
+       mono_clock_cleanup (sampling_clock);
 
 done:
        mono_atomic_store_i32 (&sampling_thread_exiting, 1);
index b2ddbd6..6f0cd19 100644 (file)
@@ -2022,7 +2022,7 @@ add_file_header_info (FileHeader *header)
        header->elf_mach = ELF_MACHINE;
        header->pad1 = 0;
        header->pid = perf_dump_pid;
-       header->timestamp = mono_clock_get_time_ns (&clock_id);
+       header->timestamp = mono_clock_get_time_ns (clock_id);
        header->flags = 0;
 }
 
@@ -2048,7 +2048,7 @@ mono_emit_jit_dump (MonoJitInfo *jinfo, gpointer code)
                
                // TODO: write debugInfo and unwindInfo immediately before the JitCodeLoadRecord (while lock is held).
                
-               record.header.timestamp = mono_clock_get_time_ns (&clock_id);
+               record.header.timestamp = mono_clock_get_time_ns (clock_id);
                
                fwrite (&record, sizeof (record), 1, perf_dump_file);
                fwrite (jinfo->d.method->name, nameLen + 1, 1, perf_dump_file);
@@ -2062,7 +2062,7 @@ static void
 add_basic_JitCodeLoadRecord_info (JitCodeLoadRecord *record)
 {
        record->header.id = JIT_CODE_LOAD;
-       record->header.timestamp = mono_clock_get_time_ns (&clock_id);
+       record->header.timestamp = mono_clock_get_time_ns (clock_id);
        record->pid = perf_dump_pid;
        record->tid = syscall (SYS_gettid);
 }
index 4aa9679..c21b9fd 100644 (file)
@@ -235,81 +235,91 @@ mono_100ns_datetime_from_timeval (struct timeval tv)
 
 #endif
 
-#if defined(HOST_DARWIN) || defined(HOST_LINUX)
+#if defined(HOST_DARWIN)
 
 void
-mono_clock_init (void *clk_id)
+mono_clock_init (mono_clock_id_t clk_id)
 {
-#ifdef HOST_DARWIN
        kern_return_t ret;
 
        do {
-               ret = host_get_clock_service (mach_host_self (), SYSTEM_CLOCK, (clock_serv_t *)clk_id);
+               ret = host_get_clock_service (mach_host_self (), SYSTEM_CLOCK, &clk_id);
        } while (ret == KERN_ABORTED);
 
        if (ret != KERN_SUCCESS)
                g_error ("%s: host_get_clock_service () returned %d", __func__, ret);
-#endif 
 }
 
 void
-mono_clock_cleanup (void *clk_id)
+mono_clock_cleanup (mono_clock_id_t clk_id)
 {
-#ifdef HOST_DARWIN
        kern_return_t ret;
 
        do {
-               ret = mach_port_deallocate (mach_task_self (), *(clock_serv_t *)clk_id);
+               ret = mach_port_deallocate (mach_task_self (), clk_id);
        } while (ret == KERN_ABORTED);
 
        if (ret != KERN_SUCCESS)
                g_error ("%s: mach_port_deallocate () returned %d", __func__, ret);
-#endif
 }
 
 guint64
-mono_clock_get_time_ns (void *clk_id)
+mono_clock_get_time_ns (mono_clock_id_t clk_id)
 {
-#ifdef HOST_DARWIN
-       
        kern_return_t ret;
        mach_timespec_t mach_ts;
 
        do {
-               ret = clock_get_time (*(clock_serv_t *)clk_id, &mach_ts);
+               ret = clock_get_time (clk_id, &mach_ts);
        } while (ret == KERN_ABORTED);
 
        if (ret != KERN_SUCCESS)
                g_error ("%s: clock_get_time () returned %d", __func__, ret);
 
        return ((guint64) mach_ts.tv_sec * 1000000000) + (guint64) mach_ts.tv_nsec;
-       
-#else
-       
+}
+
+#elif defined(__linux__)
+
+void
+mono_clock_init (mono_clock_id_t clk_id)
+{      
+}
+
+void
+mono_clock_cleanup (mono_clock_id_t clk_id)
+{
+}
+
+guint64
+mono_clock_get_time_ns (mono_clock_id_t clk_id)
+{      
        struct timespec ts;
 
-       if (clock_gettime (*(clockid_t *)clk_id, &ts) == -1)
+       if (clock_gettime (clk_id, &ts) == -1)
                g_error ("%s: clock_gettime () returned -1, errno = %d", __func__, errno);
 
        return ((guint64) ts.tv_sec * 1000000000) + (guint64) ts.tv_nsec;
-
-#endif
 }
 
 #else
 
 void
-mono_clock_init (void *clk_id)
+mono_clock_init (mono_clock_id_t clk_id)
 {
+       // TODO: need to implement this function for PC
+       g_assert_not_reached ();
 }
 
 void
-mono_clock_cleanup (void *clk_id)
+mono_clock_cleanup (mono_clock_id_t clk_id)
 {
+       // TODO: need to implement this function for PC
+       g_assert_not_reached ();
 }
 
 guint64
-mono_clock_get_time_ns (void *clk_id)
+mono_clock_get_time_ns (mono_clock_id_t clk_id)
 {
        // TODO: need to implement time stamp function for PC
        g_assert_not_reached ();
index 65ea0f2..67e8647 100644 (file)
@@ -29,9 +29,17 @@ gint64 mono_100ns_datetime (void);
 gint64 mono_100ns_datetime_from_timeval (struct timeval tv);
 #endif
 
-void mono_clock_init (void *clk_id);
-void mono_clock_cleanup (void *clk_id);
-guint64 mono_clock_get_time_ns (void *clk_id);
+#if defined(HOST_DARWIN)
+typedef clock_serv_t mono_clock_id_t;
+#elif defined(__linux__)
+typedef clockid_t mono_clock_id_t;
+#else
+typedef void* mono_clock_id_t;
+#endif
+
+void mono_clock_init (mono_clock_id_t clk_id);
+void mono_clock_cleanup (mono_clock_id_t clk_id);
+guint64 mono_clock_get_time_ns (mono_clock_id_t clk_id);
 
 /* Stopwatch class for internal runtime use */
 typedef struct {