8153394: Add Unified Logging to make it easy to trace time taken in initPhase2
authorrprotacio
Fri, 17 Jun 2016 10:46:55 -0400
changeset 39292 8ef14e411eed
parent 39288 5cb282fdf788
child 39293 25532d6696be
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
hotspot/src/share/vm/runtime/thread.cpp
hotspot/test/runtime/logging/StartupTimeTest.java
--- 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 {