Skip to content

Commit 5f6b482

Browse files
committed
GH-382 adapted for new version of com.oracle.truffle.tools.profiler.CPUSampler - setDelaySamplingUntilNonInternalLangInit() removed; test for availability of CPUSampler added
1 parent bbd81fa commit 5f6b482

File tree

7 files changed

+45
-10
lines changed

7 files changed

+45
-10
lines changed

visualvm/sampler.truffle/libsrc/com/oracle/truffle/tools/profiler/CPUSampler.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@ public static CPUSampler find(Engine engine) {
4444
return null;
4545
}
4646

47-
public void setDelaySamplingUntilNonInternalLangInit(boolean b) {
48-
}
49-
5047
public Map<Thread, List<StackTraceEntry>> takeSample() {
5148
return null;
5249
}

visualvm/sampler.truffle/libsrc/org/graalvm/visualvm/sampler/truffle/stagent/Truffle.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ public Truffle(Unsafe u) {
7272
}
7373
try {
7474
for (CPUSampler stacks : getAllStackTracesInstances()) {
75-
stacks.setDelaySamplingUntilNonInternalLangInit(false);
7675
if (TruffleJMX.DEBUG) {
7776
System.out.println("Stacks " + stacks + " " + Integer.toHexString(System.identityHashCode(stacks)));
7877
System.out.println(threadDump(stacks));
@@ -331,6 +330,16 @@ public void setMode(String modeStr) {
331330
}
332331
}
333332

333+
@Override
334+
public boolean isModeAvailable() {
335+
try {
336+
Class.forName("com.oracle.truffle.tools.profiler.CPUSampler$Mode"); // NOI18N
337+
} catch (ClassNotFoundException ex) {
338+
return false;
339+
}
340+
return true;
341+
}
342+
334343
private void setMode(Mode m) {
335344
Collection<Engine> all = getAllEngineInstances();
336345

visualvm/sampler.truffle/libsrc/org/graalvm/visualvm/sampler/truffle/stagent/TruffleMBean.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public interface TruffleMBean {
3636
public boolean isStackTracesEnabled();
3737
public void setTrackFlags(boolean trackFlags);
3838
public void setMode(String mode);
39+
public boolean isModeAvailable();
3940
public Map<String, Object>[] heapHistogram();
4041
public boolean isHeapHistogramEnabled();
4142
}

visualvm/sampler.truffle/src/org/graalvm/visualvm/sampler/truffle/ProxyTruffleMBean.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ public void setMode(String mode) throws InstanceNotFoundException, MBeanExceptio
7575
conn.setAttribute(truffleObjectName, new Attribute("Mode", mode));
7676
}
7777

78+
public boolean isModeAvailable() throws InstanceNotFoundException, MBeanException, IOException, ReflectionException, AttributeNotFoundException {
79+
return (boolean) conn.getAttribute(truffleObjectName, "ModeAvailable");
80+
}
81+
7882
public boolean isRegistered() throws IOException {
7983
return conn.isRegistered(truffleObjectName);
8084
}

visualvm/sampler.truffle/src/org/graalvm/visualvm/sampler/truffle/SamplerImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -513,6 +513,7 @@ private void initializeCpuSampling() {
513513
public void run() {
514514
ThreadInfoProvider ti = new ThreadInfoProvider(application, mode, splitCompiledInlined);
515515
final String status = ti.getStatus();
516+
final boolean modeAvailable = ti.isModeVailable();
516517

517518
if (status != null) {
518519
SwingUtilities.invokeLater(new Runnable() {
@@ -591,6 +592,7 @@ public void run() {
591592
}
592593
cpuStatus = avail + " " + NbBundle.getMessage(SamplerImpl.class, "MSG_Press_cpu"); // NOI18N
593594
cpuProfilingSupported = true;
595+
if (!modeAvailable) cpuSettings.enableMode(modeAvailable);
594596
refreshSummary();
595597
updateButtons();
596598
updateSettings();

visualvm/sampler.truffle/src/org/graalvm/visualvm/sampler/truffle/cpu/CPUSettingsSupport.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ public abstract class CPUSettingsSupport {
5858

5959
private static final String PROP_MODE = "CPUSettingsSupport.Mode"; // NOI18N
6060
private static final String PROP_SPLIT_COMPILED_INLINED = "CPUSettingsSupport.SplitCompiledInlined"; // NOI18N
61+
private JComboBox<Mode> modeCombo;
62+
private JLabel modeLabel;
63+
private Spacer space;
6164

6265
private static enum Mode {
6366
EXCLUDE_INLINED_ROOTS { @Override public String toString() { return NbBundle.getMessage(CPUSettingsSupport.class, "MODE_EXCLUDE_INLINED_ROOTS"); } }, // NOI18N
@@ -93,6 +96,15 @@ public String getMode() {
9396
return NbPreferences.forModule(CPUSettingsSupport.class).get(PROP_MODE, Mode.EXCLUDE_INLINED_ROOTS.name());
9497
}
9598

99+
public void enableMode(boolean enable) {
100+
if (panel != null) {
101+
modeLabel.setVisible(enable);
102+
modeCombo.setVisible(enable);
103+
space.setVisible(enable);
104+
container.revalidate();
105+
}
106+
}
107+
96108
public boolean isSplitCompiledInlined() {
97109
return NbPreferences.forModule(CPUSettingsSupport.class).getBoolean(PROP_SPLIT_COMPILED_INLINED, false);
98110
}
@@ -165,7 +177,7 @@ public void setEnabled(boolean enabled) {
165177
constraints.insets = new Insets(25, 10, 5, 5);
166178
engineSettingsPanel.add(section, constraints);
167179

168-
JLabel modeLabel = new JLabel();
180+
modeLabel = new JLabel();
169181
modeLabel.setText(NbBundle.getMessage(CPUSettingsSupport.class, "LBL_Mode")); // NOI18N
170182
modeLabel.setToolTipText(NbBundle.getMessage(CPUSettingsSupport.class, "TOOLTIP_Mode")); // NOI18N
171183
constraints = new GridBagConstraints();
@@ -177,7 +189,7 @@ public void setEnabled(boolean enabled) {
177189
constraints.insets = new Insets(5, 10, 5, 5);
178190
engineSettingsPanel.add(modeLabel, constraints);
179191

180-
final JComboBox<Mode> modeCombo = new JComboBox(Mode.values()) {
192+
modeCombo = new JComboBox(Mode.values()) {
181193
public Dimension getMinimumSize() { return getPreferredSize(); }
182194
public Dimension getMaximumSize() { return getPreferredSize(); }
183195
};
@@ -207,7 +219,8 @@ public void actionPerformed(ActionEvent e) {
207219
constraints.anchor = GridBagConstraints.WEST;
208220
constraints.fill = GridBagConstraints.HORIZONTAL;
209221
constraints.insets = new Insets(5, 0, 5, 0);
210-
engineSettingsPanel.add(Spacer.create(), constraints);
222+
space = Spacer.create();
223+
engineSettingsPanel.add(space, constraints);
211224

212225

213226
final JCheckBox splitChoice = new JCheckBox();

visualvm/sampler.truffle/src/org/graalvm/visualvm/sampler/truffle/cpu/ThreadInfoProvider.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ private String initialize(Application application, String mode, boolean trackFla
5757
return NbBundle.getMessage(ThreadInfoProvider.class, "MSG_unavailable_stacktraces");
5858
}
5959
tbean.setTrackFlags(trackFlags);
60-
tbean.setMode(mode);
60+
if (tbean.isModeAvailable()) tbean.setMode(mode);
6161
tbean.dumpAllThreads();
6262
} catch (SecurityException e) {
6363
LOGGER.log(Level.INFO, "threadBean.getThreadInfo(ids, maxDepth) throws SecurityException for " + application, e); // NOI18N
@@ -75,10 +75,19 @@ Map<String, Object>[] dumpAllThreads() throws InstanceNotFoundException, MBeanEx
7575

7676
void setOptions(String mode, boolean trackFlags) {
7777
try {
78-
tbean.setMode(mode);
78+
if (tbean.isModeAvailable()) tbean.setMode(mode);
7979
tbean.setTrackFlags(trackFlags);
8080
} catch (Exception ex) {
81-
LOGGER.log(Level.INFO, "threadBean.setMode(), setTrackFlags()", ex); // NOI18N
81+
LOGGER.log(Level.INFO, "threadBean.setMode(), setOptions()", ex); // NOI18N
8282
}
8383
}
84+
85+
public boolean isModeVailable() {
86+
try {
87+
return tbean.isModeAvailable();
88+
} catch (Exception ex) {
89+
LOGGER.log(Level.INFO, "threadBean.isModeVailable(), isModeVailable()", ex); // NOI18N
90+
}
91+
return false;
92+
}
8493
}

0 commit comments

Comments
 (0)