Skip to content

Commit ac0b40c

Browse files
committed
Polyglot Sampler engine CPU settings
1 parent 1c623a8 commit ac0b40c

File tree

3 files changed

+160
-5
lines changed

3 files changed

+160
-5
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -506,9 +506,11 @@ public void run() {
506506

507507

508508
private void initializeCpuSampling() {
509+
final String mode = cpuSettings.getMode();
510+
final boolean splitCompiledInlined = cpuSettings.isSplitCompiledInlined();
509511
VisualVM.getInstance().runTask(new Runnable() {
510512
public void run() {
511-
ThreadInfoProvider ti = new ThreadInfoProvider(application, "ROOTS", true);
513+
ThreadInfoProvider ti = new ThreadInfoProvider(application, mode, splitCompiledInlined);
512514
final String status = ti.getStatus();
513515

514516
if (status != null) {

visualvm/sampler.truffle/src/org/graalvm/visualvm/sampler/truffle/cpu/Bundle.properties

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2+
# Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
33
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
#
55
# This code is free software; you can redistribute it and/or modify it
@@ -53,3 +53,19 @@ MSG_unavailable_create_jmx=Not available. Failed to create JMX connection to tar
5353
MSG_unavailable_threads=Not available. Cannot access truffle JMX in target application. Check the logfile for details (use Help | About | Logfile).
5454

5555
MSG_unavailable_stacktraces=Not available. StackTraces instrument is not available. Please start your application with --stacktraces commandline option.
56+
57+
SEP_EngineSettings=Engine settings (reopen required)
58+
59+
LBL_Mode=Mode\:
60+
61+
TOOLTIP_Mode=Mode
62+
63+
MODE_ROOTS=All Functions
64+
65+
MODE_EXCLUDE_INLINED_ROOTS=Exclude Inlined Functions
66+
67+
MODE_STATEMENTS=Statements
68+
69+
LBL_Split=Split compiled and inlined
70+
71+
TOOLTIP_Split=Split compiled and inlined

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

Lines changed: 139 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* This code is free software; you can redistribute it and/or modify it
@@ -31,17 +31,41 @@
3131
import org.graalvm.visualvm.profiling.presets.SamplerCPUPanel;
3232
import java.awt.BorderLayout;
3333
import java.awt.Component;
34+
import java.awt.Dimension;
35+
import java.awt.GridBagConstraints;
36+
import java.awt.GridBagLayout;
37+
import java.awt.Insets;
38+
import java.awt.event.ActionEvent;
39+
import java.awt.event.ActionListener;
40+
import java.awt.event.ItemEvent;
41+
import java.awt.event.ItemListener;
3442
import javax.swing.BorderFactory;
43+
import javax.swing.JCheckBox;
44+
import javax.swing.JComboBox;
45+
import javax.swing.JLabel;
3546
import javax.swing.JPanel;
47+
import org.graalvm.visualvm.core.ui.components.SectionSeparator;
48+
import org.graalvm.visualvm.core.ui.components.Spacer;
3649
import org.graalvm.visualvm.lib.common.ProfilingSettings;
3750
import org.openide.util.NbBundle;
51+
import org.openide.util.NbPreferences;
3852

3953
/**
4054
*
4155
* @author Jiri Sedlacek
4256
*/
4357
public abstract class CPUSettingsSupport {
4458

59+
private static final String PROP_MODE = "CPUSettingsSupport.Mode"; // NOI18N
60+
private static final String PROP_SPLIT_COMPILED_INLINED = "CPUSettingsSupport.SplitCompiledInlined"; // NOI18N
61+
62+
private static enum Mode {
63+
ROOTS { @Override public String toString() { return NbBundle.getMessage(CPUSettingsSupport.class, "MODE_ROOTS"); } }, // NOI18N
64+
EXCLUDE_INLINED_ROOTS { @Override public String toString() { return NbBundle.getMessage(CPUSettingsSupport.class, "MODE_EXCLUDE_INLINED_ROOTS"); } }, // NOI18N
65+
STATEMENTS { @Override public String toString() { return NbBundle.getMessage(CPUSettingsSupport.class, "MODE_STATEMENTS"); } }, // NOI18N
66+
};
67+
68+
4569
private JPanel container;
4670
private SamplerCPUPanel panel;
4771
private PresetSelector selector;
@@ -65,6 +89,14 @@ public DataViewComponent.DetailsView getDetailsView() {
6589

6690
public int getRefreshRate() { return panel.getRefreshRate(); }
6791

92+
public String getMode() {
93+
return NbPreferences.forModule(CPUSettingsSupport.class).get(PROP_MODE, Mode.EXCLUDE_INLINED_ROOTS.name());
94+
}
95+
96+
public boolean isSplitCompiledInlined() {
97+
return NbPreferences.forModule(CPUSettingsSupport.class).getBoolean(PROP_SPLIT_COMPILED_INLINED, false);
98+
}
99+
68100
public void saveSettings() {
69101
// NOTE: might save custom configuration here
70102
}
@@ -104,7 +136,112 @@ public void setEnabled(boolean enabled) {
104136
};
105137
container.setOpaque(false);
106138
container.add(panel, BorderLayout.CENTER);
107-
container.add(selector, BorderLayout.SOUTH);
139+
140+
JPanel southPanel = new JPanel(new BorderLayout()) {
141+
public void setEnabled(boolean enabled) {
142+
super.setEnabled(enabled);
143+
for (Component c : getComponents()) c.setEnabled(enabled);
144+
}
145+
};
146+
southPanel.setOpaque(false);
147+
southPanel.add(selector, BorderLayout.NORTH);
148+
149+
JPanel engineSettingsPanel = new JPanel(new GridBagLayout()) {
150+
public void setEnabled(boolean enabled) {
151+
super.setEnabled(enabled);
152+
for (Component c : getComponents()) c.setEnabled(enabled);
153+
}
154+
};
155+
engineSettingsPanel.setOpaque(false);
156+
157+
SectionSeparator section = new SectionSeparator(NbBundle.getMessage(CPUSettingsSupport.class, "SEP_EngineSettings"), new JLabel().getFont()); // NOI18N
158+
GridBagConstraints constraints = new GridBagConstraints();
159+
constraints.gridx = 0;
160+
constraints.gridy = 0;
161+
constraints.weightx = 1;
162+
constraints.gridwidth = GridBagConstraints.REMAINDER;
163+
constraints.anchor = GridBagConstraints.WEST;
164+
constraints.fill = GridBagConstraints.HORIZONTAL;
165+
constraints.insets = new Insets(25, 10, 5, 5);
166+
engineSettingsPanel.add(section, constraints);
167+
168+
JLabel modeLabel = new JLabel();
169+
modeLabel.setText(NbBundle.getMessage(CPUSettingsSupport.class, "LBL_Mode")); // NOI18N
170+
modeLabel.setToolTipText(NbBundle.getMessage(CPUSettingsSupport.class, "TOOLTIP_Mode")); // NOI18N
171+
constraints = new GridBagConstraints();
172+
constraints.gridx = 0;
173+
constraints.gridy = 1;
174+
constraints.gridwidth = 1;
175+
constraints.anchor = GridBagConstraints.WEST;
176+
constraints.fill = GridBagConstraints.NONE;
177+
constraints.insets = new Insets(5, 10, 5, 5);
178+
engineSettingsPanel.add(modeLabel, constraints);
179+
180+
final JComboBox<Mode> modeCombo = new JComboBox(Mode.values()) {
181+
public Dimension getMinimumSize() { return getPreferredSize(); }
182+
public Dimension getMaximumSize() { return getPreferredSize(); }
183+
};
184+
modeCombo.setSelectedItem(Mode.valueOf(getMode()));
185+
modeLabel.setLabelFor(modeCombo);
186+
modeCombo.setToolTipText(NbBundle.getMessage(CPUSettingsSupport.class, "TOOLTIP_Mode")); // NOI18N
187+
modeCombo.setEditable(false);
188+
modeCombo.addActionListener(new ActionListener() {
189+
public void actionPerformed(ActionEvent e) {
190+
Mode selected = (Mode)modeCombo.getSelectedItem();
191+
NbPreferences.forModule(CPUSettingsSupport.class).put(PROP_MODE, selected.name());
192+
}
193+
});
194+
constraints = new GridBagConstraints();
195+
constraints.gridx = 1;
196+
constraints.gridy = 1;
197+
constraints.gridwidth = 2;
198+
constraints.anchor = GridBagConstraints.WEST;
199+
constraints.fill = GridBagConstraints.NONE;
200+
constraints.insets = new Insets(5, 0, 5, 5);
201+
engineSettingsPanel.add(modeCombo, constraints);
202+
203+
constraints = new GridBagConstraints();
204+
constraints.gridx = 3;
205+
constraints.gridy = 1;
206+
constraints.gridwidth = GridBagConstraints.REMAINDER;
207+
constraints.anchor = GridBagConstraints.WEST;
208+
constraints.fill = GridBagConstraints.HORIZONTAL;
209+
constraints.insets = new Insets(5, 0, 5, 0);
210+
engineSettingsPanel.add(Spacer.create(), constraints);
211+
212+
213+
final JCheckBox splitChoice = new JCheckBox();
214+
splitChoice.setSelected(isSplitCompiledInlined());
215+
splitChoice.setText(NbBundle.getMessage(CPUSettingsSupport.class,"LBL_Split")); // NOI18N
216+
splitChoice.setToolTipText(NbBundle.getMessage(CPUSettingsSupport.class, "TOOLTIP_Split")); // NOI18N
217+
splitChoice.setOpaque(false);
218+
splitChoice.addItemListener(new ItemListener() {
219+
@Override
220+
public void itemStateChanged(ItemEvent e) {
221+
NbPreferences.forModule(CPUSettingsSupport.class).putBoolean(PROP_SPLIT_COMPILED_INLINED, splitChoice.isSelected());
222+
}
223+
});
224+
constraints = new GridBagConstraints();
225+
constraints.gridx = 0;
226+
constraints.gridy = 2;
227+
constraints.gridwidth = 2;
228+
constraints.anchor = GridBagConstraints.WEST;
229+
constraints.fill = GridBagConstraints.NONE;
230+
constraints.insets = new Insets(1, 10, 10, 5);
231+
engineSettingsPanel.add(splitChoice, constraints);
232+
233+
constraints = new GridBagConstraints();
234+
constraints.gridx = 3;
235+
constraints.gridy = 2;
236+
constraints.gridwidth = GridBagConstraints.REMAINDER;
237+
constraints.anchor = GridBagConstraints.WEST;
238+
constraints.fill = GridBagConstraints.HORIZONTAL;
239+
constraints.insets = new Insets(5, 0, 10, 0);
240+
engineSettingsPanel.add(Spacer.create(), constraints);
241+
242+
southPanel.add(engineSettingsPanel, BorderLayout.SOUTH);
243+
244+
container.add(southPanel, BorderLayout.SOUTH);
108245

109246
return container;
110247
}

0 commit comments

Comments
 (0)