Drop use of def files for x86, x64 mono-2.0-sgen|boehm.dll Windows build.
[mono.git] / mono / utils / mono-time.h
index dced878d9ee1acf6a13bfad5bfae791ad63ed78e..2dc35dbe2a94aef8a4792005517239fe3c81c879 100644 (file)
@@ -1,17 +1,64 @@
+/**
+ * \file
+ */
+
 #ifndef __UTILS_MONO_TIME_H__
 #define __UTILS_MONO_TIME_H__
 
 #include <mono/utils/mono-compiler.h>
 #include <glib.h>
 
-/* Returns the number of milliseconds from boot time: this should be monotonic */
-guint32 mono_msec_ticks      (void) MONO_INTERNAL;
+#ifdef HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+/* Returns the number of milliseconds from boot time: this should be monotonic
+ *
+ * Prefer to use mono_msec_ticks for elapsed time calculation. */
+gint64 mono_msec_boottime (void);
+
+/* Returns the number of milliseconds ticks from unspecified time: this should be monotonic */
+gint64 mono_msec_ticks (void);
 
 /* Returns the number of 100ns ticks from unspecified time: this should be monotonic */
-gint64  mono_100ns_ticks     (void) MONO_INTERNAL;
+gint64 mono_100ns_ticks (void);
+
+/* Returns the number of 100ns ticks since 1/1/1601, UTC timezone */
+gint64 mono_100ns_datetime (void);
+
+#ifndef HOST_WIN32
+gint64 mono_100ns_datetime_from_timeval (struct timeval tv);
+#endif
+
+/* Stopwatch class for internal runtime use */
+typedef struct {
+       gint64 start, stop;
+} MonoStopwatch;
+
+static inline void
+mono_stopwatch_start (MonoStopwatch *w)
+{
+       w->start = mono_100ns_ticks ();
+       w->stop = 0;
+}
+
+static inline void
+mono_stopwatch_stop (MonoStopwatch *w)
+{
+       w->stop = mono_100ns_ticks ();
+}
+
+static inline guint64
+mono_stopwatch_elapsed (MonoStopwatch *w)
+{
+       return (w->stop - w->start) / 10;
+}
 
-/* Returns the number of 100ns ticks since 1/1/1, UTC timezone */
-gint64  mono_100ns_datetime  (void) MONO_INTERNAL;
+static inline guint64
+mono_stopwatch_elapsed_ms (MonoStopwatch *w)
+{
+       return (mono_stopwatch_elapsed (w) + 500) / 1000;
+}
 
 #endif /* __UTILS_MONO_TIME_H__ */