hotspot/test/serviceability/dcmd/CompilerQueueTest.java
changeset 26587 e8b28fa936af
equal deleted inserted replaced
26585:2048b8d90c91 26587:e8b28fa936af
       
     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 CompilerQueueTest
       
    26  * @bug 8054889
       
    27  * @build DcmdUtil CompilerQueueTest
       
    28  * @run main CompilerQueueTest
       
    29  * @summary Test of diagnostic command Compiler.queue
       
    30  */
       
    31 
       
    32 import java.io.BufferedReader;
       
    33 import java.io.StringReader;
       
    34 
       
    35 public class CompilerQueueTest {
       
    36 
       
    37     /**
       
    38      * This test calls Jcmd (diagnostic command tool) Compiler.queue and
       
    39      * then parses the output, making sure that the output look ok.
       
    40      *
       
    41      *
       
    42      * Output example:
       
    43      *
       
    44      * Contents of C1 compile queue
       
    45      * ----------------------------
       
    46      * 73       3       java.lang.AbstractStringBuilder::append (50 bytes)
       
    47      * 74       1       java.util.TreeMap::size (5 bytes)
       
    48      * 75       3       java.lang.StringBuilder::append (8 bytes)
       
    49      * 83       3       java.util.TreeMap$ValueIterator::next (8 bytes)
       
    50      * 84       1       javax.management.MBeanFeatureInfo::getName (5 bytes)
       
    51      * ----------------------------
       
    52      * Contents of C2 compile queue
       
    53      * ----------------------------
       
    54      * Empty
       
    55      * ----------------------------
       
    56      *
       
    57      **/
       
    58 
       
    59     public static void main(String arg[]) throws Exception {
       
    60 
       
    61         // Get output from dcmd (diagnostic command)
       
    62         String result = DcmdUtil.executeDcmd("Compiler.queue");
       
    63         BufferedReader r = new BufferedReader(new StringReader(result));
       
    64 
       
    65         String line;
       
    66         match(r.readLine(), "Contents of C1 compile queue");
       
    67         match(r.readLine(), "----------------------------");
       
    68         String str = r.readLine();
       
    69         if (!str.equals("Empty")) {
       
    70             while (str.charAt(0) != '-') {
       
    71                 validateMethodLine(str);
       
    72                 str = r.readLine();
       
    73             }
       
    74         } else {
       
    75             str = r.readLine();
       
    76         }
       
    77 
       
    78         match(str,          "----------------------------");
       
    79         match(r.readLine(), "Contents of C2 compile queue");
       
    80         match(r.readLine(), "----------------------------");
       
    81         str = r.readLine();
       
    82         if (!str.equals("Empty")) {
       
    83             while (str.charAt(0) != '-') {
       
    84                 validateMethodLine(str);
       
    85                 str = r.readLine();
       
    86             }
       
    87         } else {
       
    88             str = r.readLine();
       
    89         }
       
    90         match(str, "----------------------------");
       
    91     }
       
    92 
       
    93     private static void validateMethodLine(String str)  throws Exception {
       
    94         String name = str.substring(19);
       
    95         int sep = name.indexOf("::");
       
    96         try {
       
    97             Class.forName(name.substring(0, sep));
       
    98         } catch (ClassNotFoundException e) {
       
    99             throw new Exception("Failed parsing dcmd queue");
       
   100         }
       
   101     }
       
   102 
       
   103     public static void match(String line, String str) throws Exception {
       
   104         if (!line.equals(str)) {
       
   105             throw new Exception("String equals: " + line + ", " + str);
       
   106         }
       
   107     }
       
   108 }