1
1
/*
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.
3
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
4
*
5
5
* This code is free software; you can redistribute it and/or modify it
31
31
import org .graalvm .visualvm .profiling .presets .SamplerCPUPanel ;
32
32
import java .awt .BorderLayout ;
33
33
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 ;
34
42
import javax .swing .BorderFactory ;
43
+ import javax .swing .JCheckBox ;
44
+ import javax .swing .JComboBox ;
45
+ import javax .swing .JLabel ;
35
46
import javax .swing .JPanel ;
47
+ import org .graalvm .visualvm .core .ui .components .SectionSeparator ;
48
+ import org .graalvm .visualvm .core .ui .components .Spacer ;
36
49
import org .graalvm .visualvm .lib .common .ProfilingSettings ;
37
50
import org .openide .util .NbBundle ;
51
+ import org .openide .util .NbPreferences ;
38
52
39
53
/**
40
54
*
41
55
* @author Jiri Sedlacek
42
56
*/
43
57
public abstract class CPUSettingsSupport {
44
58
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
+
45
69
private JPanel container ;
46
70
private SamplerCPUPanel panel ;
47
71
private PresetSelector selector ;
@@ -65,6 +89,14 @@ public DataViewComponent.DetailsView getDetailsView() {
65
89
66
90
public int getRefreshRate () { return panel .getRefreshRate (); }
67
91
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
+
68
100
public void saveSettings () {
69
101
// NOTE: might save custom configuration here
70
102
}
@@ -104,7 +136,112 @@ public void setEnabled(boolean enabled) {
104
136
};
105
137
container .setOpaque (false );
106
138
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 );
108
245
109
246
return container ;
110
247
}
0 commit comments