]> git.kaiwu.me - njs.git/commitdiff
Added nxt_time().
authorArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Wed, 28 Nov 2018 18:50:28 +0000 (21:50 +0300)
committerArtem S. Povalyukhin <artem.povaluhin@gmail.com>
Wed, 28 Nov 2018 18:50:28 +0000 (21:50 +0300)
Returns the current high-resolution real time.

Makefile
nxt/Makefile
nxt/auto/time
nxt/nxt_time.c [new file with mode: 0644]
nxt/nxt_time.h

index 476fbcd771e0e982fbc7242ef9e609ff31ddf4b6..abe0a31b0765ad2b4cfd955275f4703c5940e0c7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -48,6 +48,7 @@ $(NXT_BUILDDIR)/libnjs.a: \
        $(NXT_BUILDDIR)/nxt_sha1.o \
        $(NXT_BUILDDIR)/nxt_sha2.o \
        $(NXT_BUILDDIR)/nxt_pcre.o \
+       $(NXT_BUILDDIR)/nxt_time.o \
        $(NXT_BUILDDIR)/nxt_malloc.o \
        $(NXT_BUILDDIR)/nxt_mem_cache_pool.o \
 
@@ -93,6 +94,7 @@ $(NXT_BUILDDIR)/libnjs.a: \
                $(NXT_BUILDDIR)/nxt_sha1.o \
                $(NXT_BUILDDIR)/nxt_sha2.o \
                $(NXT_BUILDDIR)/nxt_pcre.o \
+               $(NXT_BUILDDIR)/nxt_time.o \
                $(NXT_BUILDDIR)/nxt_malloc.o \
                $(NXT_BUILDDIR)/nxt_mem_cache_pool.o \
 
@@ -535,7 +537,7 @@ $(NXT_BUILDDIR)/njs: \
                -I$(NXT_LIB) $(NXT_EDITLINE_CFLAGS) -Injs \
                njs/njs_shell.c \
                $(NXT_BUILDDIR)/libnjs.a \
-               -lm $(NXT_PCRE_LIB) $(NXT_EDITLINE_LIB)
+               -lm $(NXT_PCRE_LIB) $(NXT_LIBRT) $(NXT_EDITLINE_LIB)
 
 $(NXT_BUILDDIR)/njs_unit_test: \
        $(NXT_BUILDDIR)/libnxt.a \
@@ -546,7 +548,7 @@ $(NXT_BUILDDIR)/njs_unit_test: \
                -I$(NXT_LIB) -Injs \
                njs/test/njs_unit_test.c \
                $(NXT_BUILDDIR)/libnjs.a \
-               -lm $(NXT_PCRE_LIB)
+               -lm $(NXT_PCRE_LIB) $(NXT_LIBRT)
 
 $(NXT_BUILDDIR)/njs_interactive_test: \
        $(NXT_BUILDDIR)/libnxt.a \
@@ -557,7 +559,7 @@ $(NXT_BUILDDIR)/njs_interactive_test: \
                -I$(NXT_LIB) -Injs \
                njs/test/njs_interactive_test.c \
                $(NXT_BUILDDIR)/libnjs.a \
-               -lm $(NXT_PCRE_LIB)
+               -lm $(NXT_PCRE_LIB) $(NXT_LIBRT)
 
 $(NXT_BUILDDIR)/njs_benchmark: \
        $(NXT_BUILDDIR)/libnxt.a \
@@ -568,6 +570,6 @@ $(NXT_BUILDDIR)/njs_benchmark: \
                -I$(NXT_LIB) -Injs \
                njs/test/njs_benchmark.c \
                $(NXT_BUILDDIR)/libnjs.a \
-               -lm $(NXT_PCRE_LIB)
+               -lm $(NXT_PCRE_LIB) $(NXT_LIBRT)
 
 include $(NXT_LIB)/Makefile
index 00dc9053bc9900daf02e264d24dfa34b1183648a..426c45d69a08b770b7dcc00fa495bcd34a4e17ff 100644 (file)
@@ -20,6 +20,7 @@ $(NXT_BUILDDIR)/libnxt.a: \
        $(NXT_BUILDDIR)/nxt_pcre.o \
        $(NXT_BUILDDIR)/nxt_malloc.o \
        $(NXT_BUILDDIR)/nxt_trace.o \
+       $(NXT_BUILDDIR)/nxt_time.o \
        $(NXT_BUILDDIR)/nxt_mem_cache_pool.o \
 
        ar -r -c $(NXT_BUILDDIR)/libnxt.a \
@@ -37,6 +38,7 @@ $(NXT_BUILDDIR)/libnxt.a: \
                $(NXT_BUILDDIR)/nxt_sha2.o \
                $(NXT_BUILDDIR)/nxt_pcre.o \
                $(NXT_BUILDDIR)/nxt_malloc.o \
+               $(NXT_BUILDDIR)/nxt_time.o \
                $(NXT_BUILDDIR)/nxt_trace.o \
                $(NXT_BUILDDIR)/nxt_mem_cache_pool.o \
 
@@ -206,6 +208,17 @@ $(NXT_BUILDDIR)/nxt_malloc.o: \
                -I$(NXT_LIB) \
                $(NXT_LIB)/nxt_malloc.c
 
+$(NXT_BUILDDIR)/nxt_time.o: \
+       $(NXT_LIB)/nxt_auto_config.h \
+       $(NXT_LIB)/nxt_types.h \
+       $(NXT_LIB)/nxt_clang.h \
+       $(NXT_LIB)/nxt_time.h \
+       $(NXT_LIB)/nxt_time.c \
+
+       $(NXT_CC) -c -o $(NXT_BUILDDIR)/nxt_time.o $(NXT_CFLAGS) \
+               -I$(NXT_LIB) \
+               $(NXT_LIB)/nxt_time.c
+
 $(NXT_BUILDDIR)/nxt_trace.o: \
        $(NXT_LIB)/nxt_auto_config.h \
        $(NXT_LIB)/nxt_types.h \
index 4894b63781a8a04a36826fc5a8b7cac7d1d90d20..fc0bc98470e7e62dfcac3986259f951640b15b13 100644 (file)
@@ -3,6 +3,46 @@
 # Copyright (C) NGINX, Inc.
 
 
+nxt_feature="clock_gettime(CLOCK_MONOTONIC)"
+nxt_feature_name=NXT_HAVE_CLOCK_MONOTONIC
+nxt_feature_run=yes
+nxt_feature_incs=
+nxt_feature_libs=
+nxt_feature_test="#include <time.h>
+
+                  int main() {
+                      struct timespec  ts;
+
+                      if (clock_gettime(CLOCK_MONOTONIC, &ts) == -1)
+                          return 1;
+                      return 0;
+                  }"
+. ${NXT_AUTO}feature
+
+
+if [ $nxt_found = no ]; then
+
+    # Linux and Solaris 10 clock_gettime() are in librt.
+
+    nxt_feature="clock_gettime(CLOCK_MONOTONIC) in librt"
+    nxt_feature_libs="-lrt"
+    . ${NXT_AUTO}feature
+fi
+
+if [ $nxt_found = yes ]; then
+    cat << END >> $NXT_MAKEFILE_CONF
+
+NXT_LIBRT = -lrt
+END
+
+else
+    cat << END >> $NXT_MAKEFILE_CONF
+
+NXT_LIBRT =
+END
+
+fi
+
 # Linux, FreeBSD, MacOSX.
 
 nxt_feature="struct tm.tm_gmtoff"
diff --git a/nxt/nxt_time.c b/nxt/nxt_time.c
new file mode 100644 (file)
index 0000000..787430f
--- /dev/null
@@ -0,0 +1,30 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) NGINX, Inc.
+ */
+
+#include <nxt_auto_config.h>
+#include <nxt_types.h>
+#include <nxt_clang.h>
+#include <nxt_time.h>
+
+#include <time.h>
+
+uint64_t
+nxt_time(void)
+{
+#if (NXT_HAVE_CLOCK_MONOTONIC)
+    struct timespec ts;
+
+    clock_gettime(CLOCK_MONOTONIC, &ts);
+
+    return (uint64_t) ts.tv_sec * 1000000000 + ts.tv_nsec;
+#else
+    struct timeval tv;
+
+    gettimeofday(&tv, NULL);
+
+    return (uint64_t) tv.tv_sec * 1000000000 + tv.tv_usec * 1000;
+#endif
+}
index 590c32825eb2a0c5be6a870c65ab5c3b0358a9a4..3d849639b9a2f1a55a138dca8efef2a27a08221e 100644 (file)
@@ -21,4 +21,7 @@
 #endif
 
 
+uint64_t nxt_time(void);
+
+
 #endif /* _NXT_TIME_H_INCLUDED_ */