changeset 59245:78fa29ad0b02

8147018: CompilerControl: Improve handling of timeouts and failures for tests Summary: Dump expected method states, improve compile commands dumping in CompilerControl tests Reviewed-by: iignatyev, rbackman
author enikitin
date Thu, 23 Apr 2020 16:20:17 +0200
parents e8cebbd8dfac
children bbdcc6741915
files test/hotspot/jtreg/compiler/compilercontrol/jcmd/AddAndRemoveTest.java test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesFileStackTest.java test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesStackTest.java test/hotspot/jtreg/compiler/compilercontrol/jcmd/PrintDirectivesTest.java test/hotspot/jtreg/compiler/compilercontrol/share/MultiCommand.java test/hotspot/jtreg/compiler/compilercontrol/share/SingleCommand.java test/hotspot/jtreg/compiler/compilercontrol/share/actions/CompileAction.java test/hotspot/jtreg/compiler/compilercontrol/share/scenario/CompileCommand.java test/hotspot/jtreg/compiler/compilercontrol/share/scenario/JcmdCommand.java test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Scenario.java
diffstat 10 files changed, 42 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/test/hotspot/jtreg/compiler/compilercontrol/jcmd/AddAndRemoveTest.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/jcmd/AddAndRemoveTest.java	Thu Apr 23 16:20:17 2020 +0200
@@ -63,7 +63,6 @@
             MethodDescriptor md = getValidMethodDescriptor(exec);
             CompileCommand compileCommand = new JcmdCommand(Command.COMPILEONLY,
                     md, null, Scenario.Type.JCMD, Scenario.JcmdType.ADD);
-            compileCommand.print();
             builder.add(compileCommand);
         }
         // Remove half of them
--- a/test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesFileStackTest.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesFileStackTest.java	Thu Apr 23 16:20:17 2020 +0200
@@ -76,7 +76,6 @@
             CompileCommand compileCommand = new CompileCommand(command,
                     methodDescriptor, cmdGen.generateCompiler(),
                     Scenario.Type.DIRECTIVE);
-            compileCommand.print();
             builder.add(compileCommand);
         }
         // clear the stack
--- a/test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesStackTest.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/jcmd/ClearDirectivesStackTest.java	Thu Apr 23 16:20:17 2020 +0200
@@ -66,7 +66,6 @@
                     cmdGen.generateCommand(), methodDescriptor,
                     cmdGen.generateCompiler(), Scenario.Type.JCMD,
                     Scenario.JcmdType.ADD);
-            compileCommand.print();
             builder.add(compileCommand);
         }
         // clear the stack
--- a/test/hotspot/jtreg/compiler/compilercontrol/jcmd/PrintDirectivesTest.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/jcmd/PrintDirectivesTest.java	Thu Apr 23 16:20:17 2020 +0200
@@ -73,7 +73,6 @@
             CompileCommand compileCommand = new CompileCommand(command,
                     methodDescriptor, cmdGen.generateCompiler(),
                     Scenario.Type.DIRECTIVE);
-            compileCommand.print();
             builder.add(compileCommand);
         }
         // print all directives
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/MultiCommand.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/MultiCommand.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -76,7 +76,6 @@
         builder.addFlag("-XX:+UnlockDiagnosticVMOptions");
         builder.addFlag("-XX:CompilerDirectivesLimit=101");
         for (CompileCommand cc : testCases) {
-            cc.print();
             builder.add(cc);
         }
         Scenario scenario = builder.build();
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/SingleCommand.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/SingleCommand.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,6 @@
         CommandGenerator cmdGen = new CommandGenerator();
         CompileCommand compileCommand = cmdGen.generateCompileCommand(command,
                 md, type);
-        compileCommand.print();
         builder.add(compileCommand);
         Scenario scenario = builder.build();
         scenario.execute();
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/actions/CompileAction.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/actions/CompileAction.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,6 +58,13 @@
      */
     public static void checkCompiled(Executable executable,
                                      State state) {
+        { // Dumping the state being checked
+            System.out.println("Checking expected compilation state: {");
+            System.out.println("  method: " + executable);
+            state.toString().lines()
+                    .map(line -> "  " + line).forEach(System.out::println);
+            System.out.println("}");
+        }
         int first = COMP_LEVELS[0];
         if (first < 4) {
             checkCompilation(executable, first, state.isC1Compilable());
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/CompileCommand.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/CompileCommand.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,10 +57,25 @@
     }
 
     /**
-     * Prints compile command to the system output
+     * Formats the command according to the following pattern:
+     * {@code <command_name> Type: <type> Compiler: <compiler> MethodDescriptor: <method_descriptor> IsValid: <true/false>}
+     * Sample output:
+     * COMPILEONLY Type: OPTION Compiler: C1 MethodDescriptor: *Klass.method* IsValid: true
      */
-    public void print() {
-        System.out.printf("%s (type: %s): %s (valid: %b)%n", command.name(),
-                type.name(), methodDescriptor.getString(), isValid());
+    protected String formatFields() {
+        return command.name() +
+               " Type: " + type +
+               " Compiler: " + compiler +
+               " MethodDescriptor: " + (methodDescriptor == null ? "null" : methodDescriptor.getString()) +
+               " IsValid: " + isValid();
+    }
+
+    /**
+     * Returns formatted string representation in the form
+     * {@code "(CompileCommand Field1: <field1> Field2: <field2> ...)}
+     * The fields are formatted by {@link #formatFields()}.
+     */
+    public String toString() {
+        return "(CompileCommand " + formatFields() + ")";
     }
 }
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/JcmdCommand.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/JcmdCommand.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,4 +36,13 @@
         super(command, methodDescriptor, compiler, type);
         this.jcmdType = jcmdType;
     }
+
+    /**
+     * Enchances parent's class method with the the JCMDtype printing:
+     * {@code ... JCMDType: <jcmd_type>}
+     */
+    protected String formatFields() {
+        return super.formatFields() + " JCMDType: " + jcmdType;
+    }
+
 }
--- a/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Scenario.java	Mon May 11 21:43:57 2020 +0200
+++ b/test/hotspot/jtreg/compiler/compilercontrol/share/scenario/Scenario.java	Thu Apr 23 16:20:17 2020 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -214,6 +214,7 @@
         }
 
         public void add(CompileCommand compileCommand) {
+            System.out.println(compileCommand);
             String[] vmOptions = compileCommand.command.vmOpts;
             Collections.addAll(vmopts, vmOptions);
             if (compileCommand.command == Command.LOG) {