< prev index next >

test/gc/ergonomics/TestDynamicNumberOfGCThreads.java

Print this page

        

@@ -30,30 +30,46 @@
  * @library /testlibrary
  */
 
 import com.oracle.java.testlibrary.ProcessTools;
 import com.oracle.java.testlibrary.OutputAnalyzer;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 
 public class TestDynamicNumberOfGCThreads {
   public static void main(String[] args) throws Exception {
 
-    testDynamicNumberOfGCThreads("UseConcMarkSweepGC");
+    testDynamicNumberOfGCThreads("UseConcMarkSweepGC", true);
+    testDynamicNumberOfGCThreads("UseConcMarkSweepGC", false);
 
-    testDynamicNumberOfGCThreads("UseG1GC");
+    testDynamicNumberOfGCThreads("UseG1GC", true);
+    testDynamicNumberOfGCThreads("UseG1GC", false);
 
-    testDynamicNumberOfGCThreads("UseParallelGC");
+    testDynamicNumberOfGCThreads("UseParallelGC", true);
+    testDynamicNumberOfGCThreads("UseParallelGC", false);
   }
 
   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 {
+  private static void testDynamicNumberOfGCThreads(String gcFlag, boolean emulate_uniprocessor) throws Exception {
     // UseDynamicNumberOfGCThreads and TraceDynamicGCThreads enabled
-    ProcessBuilder pb_enabled =
-      ProcessTools.createJavaProcessBuilder("-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails",  "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName());
+    String[] defaults = {"-XX:+" + gcFlag, "-Xmx10M", "-XX:+PrintGCDetails",  "-XX:+UseDynamicNumberOfGCThreads", "-XX:+TraceDynamicGCThreads", GCTest.class.getName()};
+    ArrayList<String> args = new ArrayList();
+    Collections.addAll(args, defaults);
+    Arrays.asList(defaults);
+    // Ensure it works on uniprocessors or if user specifies -XX:ParallelGCThread=1.
+    if (emulate_uniprocessor) {
+        args.add(0, "-XX:+ForceDynamicNumberOfGCThreads");
+        args.add(0, "-XX:ParallelGCThreads=1");
+    }
+    String[] finalArgs = new String[args.size()];
+    finalArgs = args.toArray(finalArgs);
+    ProcessBuilder pb_enabled = ProcessTools.createJavaProcessBuilder(finalArgs);
     verifyDynamicNumberOfGCThreads(new OutputAnalyzer(pb_enabled.start()));
   }
 
   static class GCTest {
     private static byte[] garbage;
< prev index next >