8076995: gc/ergonomics/TestDynamicNumberOfGCThreads.java failed with java.lang.RuntimeException: 'new_active_workers' missing from stdout/stderr
Reviewed-by: brutisso, jmasa, jwilhelm
--- a/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp Tue Apr 28 23:37:11 2015 +0200
+++ b/hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp Wed Apr 29 09:59:51 2015 +0200
@@ -193,8 +193,9 @@
(!FLAG_IS_DEFAULT(ParallelGCThreads) && !ForceDynamicNumberOfGCThreads)) {
new_active_workers = total_workers;
} else {
+ uintx min_workers = (total_workers == 1) ? 1 : 2;
new_active_workers = calc_default_active_workers(total_workers,
- 2, /* Minimum number of workers */
+ min_workers,
active_workers,
application_workers);
}
--- a/hotspot/test/TEST.groups Tue Apr 28 23:37:11 2015 +0200
+++ b/hotspot/test/TEST.groups Wed Apr 29 09:59:51 2015 +0200
@@ -233,6 +233,7 @@
gc/arguments/TestParallelGCThreads.java \
gc/arguments/TestUseCompressedOopsErgo.java \
gc/class_unloading/TestG1ClassUnloadingHWM.java \
+ gc/ergonomics/TestDynamicNumberOfGCThreads.java
gc/g1/ \
gc/metaspace/G1AddMetaspaceDependency.java \
gc/metaspace/TestMetaspacePerfCounters.java \
@@ -262,6 +263,7 @@
gc/arguments/TestMinInitialErgonomics.java \
gc/arguments/TestParallelGCThreads.java \
gc/arguments/TestUseCompressedOopsErgo.java \
+ gc/ergonomics/TestDynamicNumberOfGCThreads.java
gc/metaspace/TestMetaspacePerfCounters.java \
gc/parallelScavenge/ \
gc/startup_warnings/TestParallelGC.java \
@@ -279,6 +281,7 @@
gc/arguments/TestUseCompressedOopsErgo.java \
gc/class_unloading/TestCMSClassUnloadingEnabledHWM.java \
gc/concurrentMarkSweep/ \
+ gc/ergonomics/TestDynamicNumberOfGCThreads.java
gc/startup_warnings/TestCMS.java \
gc/startup_warnings/TestDefNewCMS.java \
gc/startup_warnings/TestParNewCMS.java
--- a/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java Tue Apr 28 23:37:11 2015 +0200
+++ b/hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.java Wed Apr 29 09:59:51 2015 +0200
@@ -44,14 +44,24 @@
}
private static void verifyDynamicNumberOfGCThreads(OutputAnalyzer output) {
+ output.shouldHaveExitValue(0); // test should run succesfully
output.shouldContain("new_active_workers");
- output.shouldHaveExitValue(0);
}
private static void testDynamicNumberOfGCThreads(String gcFlag) throws Exception {
// UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
- ProcessBuilder pb_enabled =
- ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName());
+ String[] baseArgs = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails", "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()};
+
+ // Base test with gc and +UseDynamicNumberOfGCThreads:
+ ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(baseArgs);
+ verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
+
+ // Ensure it also works on uniprocessors or if user specifies -XX:ParallelGCThreads=1:
+ String[] extraArgs = {"-XX:+UnlockDiagnosticVMOptions", "-XX:+ForceDynamicNumberOfGCThreads", "-XX:ParallelGCThreads=1"};
+ String[] finalArgs = new String[baseArgs.length + extraArgs.length];
+ System.arraycopy(extraArgs, 0, finalArgs, 0, extraArgs.length);
+ System.arraycopy(baseArgs, 0, finalArgs, extraArgs.length, baseArgs.length);
+ pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
}