8153394: Add Unified Logging to make it easy to trace time taken in initPhase2
Summary: Added modules+startuptime logging for initPhase2 via TraceTime class
Reviewed-by: rehn, hseigel, mockner
--- a/hotspot/src/share/vm/runtime/thread.cpp Wed Jun 15 12:44:20 2016 +0200
+++ b/hotspot/src/share/vm/runtime/thread.cpp Fri Jun 17 10:46:55 2016 -0400
@@ -3405,6 +3405,8 @@
//
// After phase 2, The VM will begin search classes from -Xbootclasspath/a.
static void call_initPhase2(TRAPS) {
+ TraceTime timer("Phase2 initialization", TRACETIME_LOG(Info, modules, startuptime));
+
Klass* k = SystemDictionary::resolve_or_fail(vmSymbols::java_lang_System(), true, CHECK);
instanceKlassHandle klass (THREAD, k);
--- a/hotspot/test/runtime/logging/StartupTimeTest.java Wed Jun 15 12:44:20 2016 +0200
+++ b/hotspot/test/runtime/logging/StartupTimeTest.java Fri Jun 17 10:46:55 2016 -0400
@@ -50,6 +50,18 @@
output.shouldHaveExitValue(0);
}
+ static void analyzeModulesOutputOn(ProcessBuilder pb) throws Exception {
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldMatch("(Phase2 initialization, [0-9]+.[0-9]+ secs)");
+ output.shouldHaveExitValue(0);
+ }
+
+ static void analyzeModulesOutputOff(ProcessBuilder pb) throws Exception {
+ OutputAnalyzer output = new OutputAnalyzer(pb.start());
+ output.shouldNotContain("[modules,startuptime]");
+ output.shouldHaveExitValue(0);
+ }
+
public static void main(String[] args) throws Exception {
ProcessBuilder pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime",
InnerClass.class.getName());
@@ -58,6 +70,14 @@
pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime=off",
InnerClass.class.getName());
analyzeOutputOff(pb);
+
+ pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime+modules",
+ InnerClass.class.getName());
+ analyzeModulesOutputOn(pb);
+
+ pb = ProcessTools.createJavaProcessBuilder("-Xlog:startuptime+modules=off",
+ InnerClass.class.getName());
+ analyzeModulesOutputOff(pb);
}
public static class InnerClass {