# HG changeset patch # User drwhite # Date 1430294391 -7200 # Node ID a0bd2a51cdb3e0f5ec3fa3d03e1931ec4f977ba5 # Parent 3d36f972d68bab7691b87b4176e0f7c446c740ab 8076995: gc/ergonomics/TestDynamicNumberOfGCThreads.java failed with java.lang.RuntimeException: 'new_active_workers' missing from stdout/stderr Reviewed-by: brutisso, jmasa, jwilhelm diff -r 3d36f972d68b -r a0bd2a51cdb3 hotspot/src/share/vm/gc_implementation/shared/adaptiveSizePolicy.cpp --- 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); } diff -r 3d36f972d68b -r a0bd2a51cdb3 hotspot/test/TEST.groups --- 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 diff -r 3d36f972d68b -r a0bd2a51cdb3 hotspot/test/gc/ergonomics/TestDynamicNumberOfGCThreads.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())); }