Mercurial > hg > truffle
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/DebugValuesPrinter.java @ 21543:93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 25 May 2015 23:30:34 +0200 |
parents | 33b1be0d91fc |
children | b1530a6cce8c |
rev | line source |
---|---|
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
1 /* |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
4 * |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
8 * |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
14 * |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
18 * |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
21 * questions. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
22 */ |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
23 package com.oracle.graal.hotspot; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
24 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
25 import static com.oracle.graal.compiler.GraalDebugConfig.*; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
26 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
27 import java.io.*; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
28 import java.util.*; |
20030
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
29 import java.util.regex.*; |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
30 import java.util.stream.*; |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
31 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
32 import com.oracle.graal.debug.*; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
33 import com.oracle.graal.debug.internal.*; |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20030
diff
changeset
|
34 import com.oracle.jvmci.common.*; |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
35 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
36 /** |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
37 * Facility for printing the {@linkplain KeyRegistry#getDebugValues() values} collected across all |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
38 * {@link DebugValueMap#getTopLevelMaps() threads}. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
39 */ |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
40 public class DebugValuesPrinter { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
41 |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20030
diff
changeset
|
42 public void printDebugValues() throws JVMCIError { |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
43 TTY.println(); |
17302
7c58f75be8d6
fixed regression in debug value printing and removed unused support for printing per VM phase
Doug Simon <doug.simon@oracle.com>
parents:
17288
diff
changeset
|
44 TTY.println("<DebugValues>"); |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
45 List<DebugValueMap> topLevelMaps = DebugValueMap.getTopLevelMaps(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
46 List<DebugValue> debugValues = KeyRegistry.getDebugValues(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
47 if (debugValues.size() > 0) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
48 try { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
49 ArrayList<DebugValue> sortedValues = new ArrayList<>(debugValues); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
50 Collections.sort(sortedValues); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
51 |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
52 String summary = DebugValueSummary.getValue(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
53 if (summary == null) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
54 summary = "Complete"; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
55 } |
20030
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
56 if (DebugValueThreadFilter.getValue() != null && topLevelMaps.size() != 0) { |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
57 topLevelMaps = topLevelMaps.stream().filter(map -> Pattern.compile(DebugValueThreadFilter.getValue()).matcher(map.getName()).find()).collect(Collectors.toList()); |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
58 if (topLevelMaps.size() == 0) { |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
59 TTY.println("Warning: DebugValueThreadFilter=%s eliminated all maps so nothing will be printed", DebugValueThreadFilter.getValue()); |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
60 } |
33b1be0d91fc
Add option to filter DebugValueSummary by map name
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17302
diff
changeset
|
61 } |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
62 switch (summary) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
63 case "Name": |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
64 printSummary(topLevelMaps, sortedValues); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
65 break; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
66 case "Partial": { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
67 DebugValueMap globalMap = new DebugValueMap("Global"); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
68 for (DebugValueMap map : topLevelMaps) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
69 flattenChildren(map, globalMap); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
70 } |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
71 globalMap.normalize(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
72 printMap(new DebugValueScope(null, globalMap), sortedValues); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
73 break; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
74 } |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
75 case "Complete": { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
76 DebugValueMap globalMap = new DebugValueMap("Global"); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
77 for (DebugValueMap map : topLevelMaps) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
78 globalMap.addChild(map); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
79 } |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
80 globalMap.group(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
81 globalMap.normalize(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
82 printMap(new DebugValueScope(null, globalMap), sortedValues); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
83 break; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
84 } |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
85 case "Thread": |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
86 for (DebugValueMap map : topLevelMaps) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
87 TTY.println("Showing the results for thread: " + map.getName()); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
88 map.group(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
89 map.normalize(); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
90 printMap(new DebugValueScope(null, map), sortedValues); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
91 } |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
92 break; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
93 default: |
21543
93c50cefb9e8
moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
20030
diff
changeset
|
94 throw new JVMCIError("Unknown summary type: %s", summary); |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
95 } |
17302
7c58f75be8d6
fixed regression in debug value printing and removed unused support for printing per VM phase
Doug Simon <doug.simon@oracle.com>
parents:
17288
diff
changeset
|
96 for (DebugValueMap topLevelMap : topLevelMaps) { |
7c58f75be8d6
fixed regression in debug value printing and removed unused support for printing per VM phase
Doug Simon <doug.simon@oracle.com>
parents:
17288
diff
changeset
|
97 topLevelMap.reset(); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
98 } |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
99 } catch (Throwable e) { |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
100 // Don't want this to change the exit status of the VM |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
101 PrintStream err = System.err; |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
102 err.println("Error while printing debug values:"); |
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
103 e.printStackTrace(); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
104 } |
17288
db0ee78b1ad5
prevent deadlock in HotSpotGraalRuntime.shutdown() by loading DebugValuesPrinter class eagerly
Doug Simon <doug.simon@oracle.com>
parents:
16900
diff
changeset
|
105 } |
17302
7c58f75be8d6
fixed regression in debug value printing and removed unused support for printing per VM phase
Doug Simon <doug.simon@oracle.com>
parents:
17288
diff
changeset
|
106 TTY.println("</DebugValues>"); |
16006
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
107 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
108 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
109 private void flattenChildren(DebugValueMap map, DebugValueMap globalMap) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
110 globalMap.addChild(map); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
111 for (DebugValueMap child : map.getChildren()) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
112 flattenChildren(child, globalMap); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
113 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
114 map.clearChildren(); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
115 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
116 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
117 private void printSummary(List<DebugValueMap> topLevelMaps, List<DebugValue> debugValues) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
118 DebugValueMap result = new DebugValueMap("Summary"); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
119 for (int i = debugValues.size() - 1; i >= 0; i--) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
120 DebugValue debugValue = debugValues.get(i); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
121 int index = debugValue.getIndex(); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
122 long total = collectTotal(topLevelMaps, index); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
123 result.setCurrentValue(index, total); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
124 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
125 printMap(new DebugValueScope(null, result), debugValues); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
126 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
127 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
128 private long collectTotal(List<DebugValueMap> maps, int index) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
129 long total = 0; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
130 for (int i = 0; i < maps.size(); i++) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
131 DebugValueMap map = maps.get(i); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
132 total += map.getCurrentValue(index); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
133 total += collectTotal(map.getChildren(), index); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
134 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
135 return total; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
136 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
137 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
138 /** |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
139 * Tracks the scope when printing a {@link DebugValueMap}, allowing "empty" scopes to be |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
140 * omitted. An empty scope is one in which there are no (nested) non-zero debug values. |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
141 */ |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
142 static class DebugValueScope { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
143 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
144 final DebugValueScope parent; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
145 final int level; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
146 final DebugValueMap map; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
147 private boolean printed; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
148 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
149 public DebugValueScope(DebugValueScope parent, DebugValueMap map) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
150 this.parent = parent; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
151 this.map = map; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
152 this.level = parent == null ? 0 : parent.level + 1; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
153 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
154 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
155 public void print() { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
156 if (!printed) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
157 printed = true; |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
158 if (parent != null) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
159 parent.print(); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
160 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
161 printIndent(level); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
162 TTY.println("%s", map.getName()); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
163 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
164 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
165 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
166 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
167 private void printMap(DebugValueScope scope, List<DebugValue> debugValues) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
168 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
169 for (DebugValue value : debugValues) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
170 long l = scope.map.getCurrentValue(value.getIndex()); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
171 if (l != 0 || !SuppressZeroDebugValues.getValue()) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
172 scope.print(); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
173 printIndent(scope.level + 1); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
174 TTY.println(value.getName() + "=" + value.toString(l)); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
175 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
176 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
177 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
178 for (DebugValueMap child : scope.map.getChildren()) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
179 printMap(new DebugValueScope(scope, child), debugValues); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
180 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
181 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
182 |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
183 private static void printIndent(int level) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
184 for (int i = 0; i < level; ++i) { |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
185 TTY.print(" "); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
186 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
187 TTY.print("|-> "); |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
188 } |
66a9286203a2
decoupled Graal runtime initialization and Graal compilation queue initialization
Doug Simon <doug.simon@oracle.com>
parents:
diff
changeset
|
189 } |