1 /* |
1 /* |
2 * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. |
2 * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
27 * @summary Check trace logging of initial GC threads. |
27 * @summary Check trace logging of initial GC threads. |
28 * @requires vm.gc=="null" |
28 * @requires vm.gc=="null" |
29 * @key gc |
29 * @key gc |
30 * @modules java.base/jdk.internal.misc |
30 * @modules java.base/jdk.internal.misc |
31 * @library /test/lib |
31 * @library /test/lib |
|
32 * @build sun.hotspot.WhiteBox |
|
33 * @run driver ClassFileInstaller sun.hotspot.WhiteBox sun.hotspot.WhiteBox$WhiteBoxPermission |
|
34 * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI TestInitialGCThreadLogging |
32 */ |
35 */ |
33 |
36 |
34 import jdk.test.lib.process.ProcessTools; |
37 import jdk.test.lib.process.ProcessTools; |
35 import jdk.test.lib.process.OutputAnalyzer; |
38 import jdk.test.lib.process.OutputAnalyzer; |
|
39 import sun.hotspot.gc.GC; |
36 |
40 |
37 public class TestInitialGCThreadLogging { |
41 public class TestInitialGCThreadLogging { |
38 public static void main(String[] args) throws Exception { |
42 public static void main(String[] args) throws Exception { |
39 |
43 |
40 testInitialGCThreadLogging("UseConcMarkSweepGC", "GC Thread"); |
44 testInitialGCThreadLogging("UseConcMarkSweepGC", "GC Thread"); |
41 |
45 |
42 testInitialGCThreadLogging("UseG1GC", "GC Thread"); |
46 testInitialGCThreadLogging("UseG1GC", "GC Thread"); |
43 |
47 |
44 testInitialGCThreadLogging("UseParallelGC", "ParGC Thread"); |
48 testInitialGCThreadLogging("UseParallelGC", "ParGC Thread"); |
|
49 |
|
50 if (GC.Shenandoah.isSupported()) { |
|
51 testInitialGCThreadLogging("UseShenandoahGC", "Shenandoah GC Thread"); |
|
52 } |
45 } |
53 } |
46 |
54 |
47 private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output, String threadName) { |
55 private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output, String threadName) { |
48 output.shouldHaveExitValue(0); // test should run succesfully |
56 output.shouldHaveExitValue(0); // test should run succesfully |
49 output.shouldContain(threadName); |
57 output.shouldContain(threadName); |
50 } |
58 } |
51 |
59 |
52 private static void testInitialGCThreadLogging(String gcFlag, String threadName) throws Exception { |
60 private static void testInitialGCThreadLogging(String gcFlag, String threadName) throws Exception { |
53 // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled |
61 // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled |
54 String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+UseDynamicNumberOfGCThreads", "-Xlog:gc+task=trace", "-version"}; |
62 String[] baseArgs = {"-XX:+UnlockExperimentalVMOptions", "-XX:+" + gcFlag, "-Xmx10M", "-XX:+UseDynamicNumberOfGCThreads", "-Xlog:gc+task=trace", "-version"}; |
55 |
63 |
56 // Base test with gc and +UseDynamicNumberOfGCThreads: |
64 // Base test with gc and +UseDynamicNumberOfGCThreads: |
57 ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs); |
65 ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs); |
58 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()), threadName); |
66 verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()), threadName); |
59 } |
67 } |