test/gc/arguments/TestG1ConcRefinementThreads.java

Mon, 06 Nov 2017 16:51:47 +0800

author
aoqi
date
Mon, 06 Nov 2017 16:51:47 +0800
changeset 7997
6cbff0651f1a
parent 7219
8ba0078861d4
permissions
-rw-r--r--

[Code Reorganization] remove trailing whitespace to pass jcheck test

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

mercurial