From: Artem S. Povalyukhin Date: Wed, 28 Nov 2018 18:50:28 +0000 (+0300) Subject: Added nxt_time(). X-Git-Tag: 0.2.7~16 X-Git-Url: http://git.kaiwu.me/sitemap.xml?a=commitdiff_plain;h=b3b0cb747c45ce78fdd5db6077bb6bd2d7ec69b6;p=njs.git Added nxt_time(). Returns the current high-resolution real time. --- diff --git a/Makefile b/Makefile index 476fbcd7..abe0a31b 100644 --- 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 diff --git a/nxt/Makefile b/nxt/Makefile index 00dc9053..426c45d6 100644 --- a/nxt/Makefile +++ b/nxt/Makefile @@ -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 \ diff --git a/nxt/auto/time b/nxt/auto/time index 4894b637..fc0bc984 100644 --- a/nxt/auto/time +++ b/nxt/auto/time @@ -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 + + 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 index 00000000..787430fe --- /dev/null +++ b/nxt/nxt_time.c @@ -0,0 +1,30 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#include +#include +#include +#include + +#include + +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 +} diff --git a/nxt/nxt_time.h b/nxt/nxt_time.h index 590c3282..3d849639 100644 --- a/nxt/nxt_time.h +++ b/nxt/nxt_time.h @@ -21,4 +21,7 @@ #endif +uint64_t nxt_time(void); + + #endif /* _NXT_TIME_H_INCLUDED_ */