blob: abfe1962419f25d3062a64ae1ca953ee46afd668 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
/* SPDX-License-Identifier: LGPL-2.1 */
/*
* Copyright (C) 2017 VMware Inc, Yordan Karadzhov <ykaradzhov@vmware.com>
*/
/**
* @file KsMainWindow.hpp
* @brief KernelShark GUI main window.
*/
#ifndef _KS_MAINWINDOW_H
#define _KS_MAINWINDOW_H
// Qt
#include <QMainWindow>
#include <QLocalServer>
// KernelShark
#include "KsTraceViewer.hpp"
#include "KsTraceGraph.hpp"
#include "KsSession.hpp"
#include "KsUtils.hpp"
/**
* The KsMainWindow class provides Main window for the KernelShark GUI.
*/
class KsMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit KsMainWindow(QWidget *parent = nullptr);
~KsMainWindow();
void loadDataFile(const QString &fileName);
void loadSession(const QString &fileName);
/**
* @brief
*
* @param plugin: can be the name of the plugin or the plugin's library
* file (including absolute or relative path).
*/
void registerPlugin(const QString &plugin)
{
_plugins.registerPlugin(plugin);
}
/**
* @brief
*
* @param plugin: can be the name of the plugin or the plugin's library
* file (including absolute path).
*/
void unregisterPlugin(const QString &plugin)
{
_plugins.unregisterPlugin(plugin);
}
void resizeEvent(QResizeEvent* event);
/** Set the Full Screen mode. */
void setFullScreenMode(bool f) {
if ((!isFullScreen() && f) || (isFullScreen() && !f) )
_changeScreenMode();
}
private:
QSplitter _splitter;
/** GUI session. */
KsSession _session;
/** Data Manager. */
KsDataStore _data;
/** Widget for reading and searching in the trace data. */
KsTraceViewer _view;
/** Widget for graphical visualization of the trace data. */
KsTraceGraph _graph;
/** Dual Marker State Machine. */
KsDualMarkerSM _mState;
/** Plugin manager. */
KsPluginManager _plugins;
/** The process used to record trace data. */
QProcess _capture;
/** Local Server used for comunucation with the Capture process. */
QLocalServer _captureLocalServer;
// File menu.
QAction _openAction;
QAction _restorSessionAction;
QAction _importSessionAction;
QAction _exportSessionAction;
QAction _quitAction;
// Filter menu.
QAction _importFilterAction;
QAction _exportFilterAction;
QCheckBox *_graphFilterSyncCBox;
QCheckBox *_listFilterSyncCBox;
QAction _showEventsAction;
QAction _showTasksAction;
QAction _showCPUsAction;
QAction _advanceFilterAction;
QAction _clearAllFilters;
// Plots menu.
QAction _cpuSelectAction;
QAction _taskSelectAction;
// Tools menu.
QAction _pluginsAction;
QAction _captureAction;
QWidgetAction _colorAction;
QWidget _colSlider;
QSlider _colorPhaseSlider;
QAction _fullScreenModeAction;
// Help menu.
QAction _aboutAction;
QAction _contentsAction;
QShortcut _deselectShortcut;
void _open();
void _restorSession();
void _importSession();
void _exportSession();
void _importFilter();
void _exportFilter();
void _listFilterSync(int state);
void _graphFilterSync(int state);
void _showEvents();
void _showTasks();
void _hideTasks();
void _showCPUs();
void _hideCPUs();
void _advancedFiltering();
void _clearFilters();
void _cpuSelect();
void _taskSelect();
void _pluginSelect();
void _record();
void _setColorPhase(int);
void _changeScreenMode();
void _aboutInfo();
void _contents();
void _captureStarted();
void _captureError(QProcess::ProcessError error);
void _readSocket();
void _splitterMoved(int pos, int index);
void _createActions();
void _createMenus();
void _initCapture();
void _updateSession();
inline void _resizeEmpty() {resize(SCREEN_WIDTH * .5, FONT_HEIGHT * 3);}
void _error(const QString &text, const QString &errCode,
bool resize, bool unloadPlugins);
void _deselect();
void _deselectA();
void _deselectB();
void _updateFilterMenu();
void _filterSyncCBoxUpdate(kshark_context *kshark_ctx);
private slots:
void _captureFinished(int, QProcess::ExitStatus);
};
#endif // _KS_MAINWINDOW_H
|