comparison test/gc/arguments/TestG1ConcRefinementThreads.java @ 20505:8ba0078861d4

8047976: Ergonomics for GC thread counts should update the flags Summary: Ergonomics updates flags for number of GC threads Reviewed-by: tschatzl, jwilhelm Contributed-by: sangheon.kim@oracle.com
author jwilhelm
date Sat, 27 Sep 2014 15:11:41 +0200
parents
children
comparison
equal deleted inserted replaced
20502:13dbe89e447c 20505:8ba0078861d4
1 /*
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
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
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24 /*
25 * @test TestG1ConcRefinementThreads
26 * @key gc
27 * @bug 8047976
28 * @summary Tests argument processing for G1ConcRefinementThreads
29 * @library /testlibrary
30 */
31
32 import com.oracle.java.testlibrary.*;
33 import java.util.*;
34 import java.util.regex.*;
35
36 public class TestG1ConcRefinementThreads {
37
38 static final int AUTO_SELECT_THREADS_COUNT = 0;
39 static final int PASSED_THREADS_COUNT = 11;
40
41 public static void main(String args[]) throws Exception {
42 // default case
43 runG1ConcRefinementThreadsTest(
44 new String[]{}, // automatically selected
45 AUTO_SELECT_THREADS_COUNT /* use default setting */);
46
47 // zero setting case
48 runG1ConcRefinementThreadsTest(
49 new String[]{"-XX:G1ConcRefinementThreads=0"}, // automatically selected
50 AUTO_SELECT_THREADS_COUNT /* set to zero */);
51
52 // non-zero sestting case
53 runG1ConcRefinementThreadsTest(
54 new String[]{"-XX:G1ConcRefinementThreads="+Integer.toString(PASSED_THREADS_COUNT)},
55 PASSED_THREADS_COUNT);
56 }
57
58 private static void runG1ConcRefinementThreadsTest(String[] passedOpts,
59 int expectedValue) throws Exception {
60 List<String> vmOpts = new ArrayList<>();
61 if (passedOpts.length > 0) {
62 Collections.addAll(vmOpts, passedOpts);
63 }
64 Collections.addAll(vmOpts, "-XX:+UseG1GC", "-XX:+PrintFlagsFinal", "-version");
65
66 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(vmOpts.toArray(new String[vmOpts.size()]));
67 OutputAnalyzer output = new OutputAnalyzer(pb.start());
68
69 output.shouldHaveExitValue(0);
70 String stdout = output.getStdout();
71 checkG1ConcRefinementThreadsConsistency(stdout, expectedValue);
72 }
73
74 private static void checkG1ConcRefinementThreadsConsistency(String output, int expectedValue) {
75 int actualValue = getIntValue("G1ConcRefinementThreads", output);
76
77 if (expectedValue == 0) {
78 // If expectedValue is automatically selected, set it same as ParallelGCThreads.
79 expectedValue = getIntValue("ParallelGCThreads", output);
80 }
81
82 if (expectedValue != actualValue) {
83 throw new RuntimeException(
84 "Actual G1ConcRefinementThreads(" + Integer.toString(actualValue)
85 + ") is not equal to expected value(" + Integer.toString(expectedValue) + ")");
86 }
87 }
88
89 public static int getIntValue(String flag, String where) {
90 Matcher m = Pattern.compile(flag + "\\s+:?=\\s+\\d+").matcher(where);
91 if (!m.find()) {
92 throw new RuntimeException("Could not find value for flag " + flag + " in output string");
93 }
94 String match = m.group();
95 return Integer.parseInt(match.substring(match.lastIndexOf(" ") + 1, match.length()));
96 }
97 }