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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }