OpenJDK / jdk / jdk
changeset 58698:3f8d03880bf5
8241638: launcher time metrics always report 1 on Linux when _JAVA_LAUNCHER_DEBUG set
Reviewed-by: alanb, dholmes
Contributed-by: linzang@tencent.com
author | henryjen |
---|---|
date | Tue, 07 Apr 2020 03:25:11 +0000 |
parents | f810ecf73455 |
children | 6d2586f260a0 |
files | make/launcher/LauncherCommon.gmk src/java.base/macosx/native/libjli/java_md_macosx.m src/java.base/share/native/libjli/java.c src/java.base/unix/native/libjli/java_md_solinux.c src/java.base/unix/native/libjli/java_md_solinux.h |
diffstat | 5 files changed, 35 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/make/launcher/LauncherCommon.gmk Mon Apr 06 12:51:40 2020 -0700 +++ b/make/launcher/LauncherCommon.gmk Tue Apr 07 03:25:11 2020 +0000 @@ -144,7 +144,7 @@ -DPROGNAME='"$1"' \ $$($1_CFLAGS), \ CFLAGS_linux := -fPIC, \ - CFLAGS_solaris := -KPIC -DHAVE_GETHRTIME, \ + CFLAGS_solaris := -KPIC, \ CFLAGS_windows := $$($1_CFLAGS_windows), \ DISABLED_WARNINGS_gcc := unused-function, \ LDFLAGS := $$(LDFLAGS_JDKEXE) \
--- a/src/java.base/macosx/native/libjli/java_md_macosx.m Mon Apr 06 12:51:40 2020 -0700 +++ b/src/java.base/macosx/native/libjli/java_md_macosx.m Tue Apr 07 03:25:11 2020 +0000 @@ -641,7 +641,7 @@ { struct timeval tv; gettimeofday(&tv, NULL); - return (tv.tv_sec * 1000) + tv.tv_usec; + return (tv.tv_sec * 1000000) + tv.tv_usec; }
--- a/src/java.base/share/native/libjli/java.c Mon Apr 06 12:51:40 2020 -0700 +++ b/src/java.base/share/native/libjli/java.c Tue Apr 07 03:25:11 2020 +0000 @@ -241,7 +241,7 @@ char *main_class = NULL; int ret; InvocationFunctions ifn; - jlong start, end; + jlong start = 0, end = 0; char jvmpath[MAXPATHLEN]; char jrepath[MAXPATHLEN]; char jvmcfg[MAXPATHLEN]; @@ -408,7 +408,7 @@ jmethodID mainID; jobjectArray mainArgs; int ret = 0; - jlong start, end; + jlong start = 0, end = 0; RegisterThread(); @@ -1618,7 +1618,7 @@ jmethodID mid; jstring str; jobject result; - jlong start, end; + jlong start = 0, end = 0; jclass cls = GetLauncherHelperClass(env); NULL_CHECK0(cls); if (JLI_IsTraceLauncher()) { @@ -1633,7 +1633,7 @@ USE_STDERR, mode, str)); if (JLI_IsTraceLauncher()) { - end = CounterGet(); + end = CounterGet(); printf("%ld micro seconds to load main class\n", (long)(jint)Counter2Micros(end-start)); printf("----%s----\n", JLDEBUG_ENV_ENTRY); @@ -2080,7 +2080,7 @@ char line[MAXPATHLEN+20]; int cnt = 0; int lineno = 0; - jlong start, end; + jlong start = 0, end = 0; int vmType; char *tmpPtr; char *altVMName = NULL; @@ -2172,7 +2172,7 @@ knownVMsCount = cnt; if (JLI_IsTraceLauncher()) { - end = CounterGet(); + end = CounterGet(); printf("%ld micro seconds to parse jvm.cfg\n", (long)(jint)Counter2Micros(end-start)); }
--- a/src/java.base/unix/native/libjli/java_md_solinux.c Mon Apr 06 12:51:40 2020 -0700 +++ b/src/java.base/unix/native/libjli/java_md_solinux.c Tue Apr 07 03:25:11 2020 +0000 @@ -813,3 +813,24 @@ { return JNI_FALSE; } + +#ifndef __solaris__ + +/* + * Provide a CounterGet() implementation based on gettimeofday() which + * is universally available, even though it may not be 'high resolution' + * compared to platforms that provide gethrtime() (like Solaris). It is + * also subject to time-of-day changes, but alternatives may not be + * known to be available at either build time or run time. + */ +uint64_t CounterGet() { + uint64_t result = 0; + struct timeval tv; + if (gettimeofday(&tv, NULL) != -1) { + result = 1000000LL * (uint64_t)tv.tv_sec; + result += (uint64_t)tv.tv_usec; + } + return result; +} + +#endif // !__solaris__
--- a/src/java.base/unix/native/libjli/java_md_solinux.h Mon Apr 06 12:51:40 2020 -0700 +++ b/src/java.base/unix/native/libjli/java_md_solinux.h Tue Apr 07 03:25:11 2020 +0000 @@ -26,17 +26,17 @@ #ifndef JAVA_MD_SOLINUX_H #define JAVA_MD_SOLINUX_H -#ifdef HAVE_GETHRTIME +#include <sys/time.h> +#ifdef __solaris__ /* * Support for doing cheap, accurate interval timing. */ -#include <sys/time.h> #define CounterGet() (gethrtime()/1000) #define Counter2Micros(counts) (counts) -#else /* ! HAVE_GETHRTIME */ -#define CounterGet() (0) -#define Counter2Micros(counts) (1) -#endif /* HAVE_GETHRTIME */ +#else /* ! __solaris__ */ +uint64_t CounterGet(void); +#define Counter2Micros(counts) (counts) +#endif /* __solaris__ */ /* pointer to environment */ extern char **environ;