1 /*
2  * Copyright (c) 2013, 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 TestPrintRegionRememberedSetInfo
26  * @key gc
27  * @bug 8014240
28  * @summary Test output of G1PrintRegionRememberedSetInfo
29  * @library /testlibrary
30  * @run main TestPrintRegionRememberedSetInfo
31  * @author thomas.schatzl@oracle.com
32  */
33 
34 import com.oracle.java.testlibrary.*;
35 import java.lang.Thread;
36 import java.util.ArrayList;
37 import java.util.Arrays;
38 
39 class RunAndWaitForMarking {
main(String[] args)40     public static void main(String[] args) {
41         System.gc();
42         try {
43             Thread.sleep(200);
44         } catch (InterruptedException e) {
45         }
46     }
47 }
48 
49 public class TestPrintRegionRememberedSetInfo {
50 
runTest(String arg)51     public static String runTest(String arg) throws Exception {
52         ArrayList<String> finalargs = new ArrayList<String>();
53         String[] defaultArgs = new String[] {
54             "-XX:+UseG1GC",
55             "-Xmx10m",
56             "-XX:+ExplicitGCInvokesConcurrent",
57             "-XX:+UnlockDiagnosticVMOptions",
58             "-XX:+G1PrintRegionLivenessInfo",
59             "-XX:G1HeapRegionSize=1M",
60             "-XX:InitiatingHeapOccupancyPercent=0",
61         };
62 
63         finalargs.addAll(Arrays.asList(defaultArgs));
64         finalargs.add(arg);
65 
66         finalargs.add(RunAndWaitForMarking.class.getName());
67 
68         ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
69             finalargs.toArray(new String[0]));
70         OutputAnalyzer output = new OutputAnalyzer(pb.start());
71         output.shouldHaveExitValue(0);
72 
73         String result = output.getStdout();
74         return result;
75     }
76 
main(String[] args)77     public static void main(String[] args) throws Exception {
78         String result;
79 
80         result = runTest("-XX:+G1PrintRegionLivenessInfo");
81         // check that we got region statistics output
82         if (result.indexOf("PHASE") == -1) {
83             throw new RuntimeException("Unexpected output from -XX:+PrintRegionLivenessInfo found.");
84         }
85 
86         result = runTest("-XX:-G1PrintRegionLivenessInfo");
87         if (result.indexOf("remset") != -1) {
88             throw new RuntimeException("Should find remembered set information in output.");
89         }
90     }
91 }
92 
93