VirtualBox

source: vbox/trunk/src/VBox/Debugger/VBoxDbgStats.h@ 7359

Last change on this file since 7359 was 5999, checked in by vboxsync, 17 years ago

The Giant CDDL Dual-License Header Change.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 11.4 KB
Line 
1/** @file
2 *
3 * VBox Debugger GUI - Statistics.
4 */
5
6/*
7 * Copyright (C) 2006-2007 innotek GmbH
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18
19#ifndef __VBoxDbgStats_h__
20#define __VBoxDbgStats_h__
21
22#include "VBoxDbgBase.h"
23
24#include <qlistview.h>
25#include <qvbox.h>
26#include <qtimer.h>
27#include <qcombobox.h>
28#include <qpopupmenu.h>
29
30class VBoxDbgStats;
31
32/**
33 * A statistics item.
34 *
35 * This class represent can be both a leaf and a branch item.
36 */
37class VBoxDbgStatsItem : public QListViewItem
38{
39public:
40 /**
41 * Constructor.
42 *
43 * @param pszName The name of this item.
44 * @param pParent The parent view item.
45 * @param fBranch Set if this is a branch.
46 */
47 VBoxDbgStatsItem(const char *pszName, VBoxDbgStatsItem *pParent, bool fBranch = true);
48
49 /**
50 * Constructor.
51 *
52 * @param pszName The name of this item.
53 * @param pParent The parent list view.
54 * @param fBranch Set if this is a branch.
55 */
56 VBoxDbgStatsItem(const char *pszName, QListView *pParent, bool fBranch = true);
57
58 /** Destructor. */
59 virtual ~VBoxDbgStatsItem();
60
61 /**
62 * Gets the STAM name of the item.
63 * @returns STAM Name.
64 */
65 const char *getName() const
66 {
67 return m_pszName;
68 }
69
70 /**
71 * Branch item?
72 * @returns true if branch, false if leaf.
73 */
74 bool isBranch() const
75 {
76 return m_fBranch;
77 }
78
79 /**
80 * Leaf item?
81 * @returns true if leaf, false if branch.
82 */
83 bool isLeaf() const
84 {
85 return !m_fBranch;
86 }
87
88 /**
89 * Gets the parent item.
90 * @returns Pointer to parent item, NULL if this is the root item.
91 */
92 VBoxDbgStatsItem *getParent()
93 {
94 return m_pParent;
95 }
96
97 /**
98 * Get sort key.
99 *
100 * @returns The sort key.
101 * @param iColumn The column to sort.
102 * @param fAscending The sorting direction.
103 */
104 virtual QString key(int iColumn, bool fAscending) const
105 {
106 return QListViewItem::key(iColumn, fAscending);
107 }
108
109 /**
110 * Logs the tree starting at this item to one of the default logs.
111 * @param fReleaseLog If set use RTLogRelPrintf instead of RTLogPrintf.
112 */
113 virtual void logTree(bool fReleaseLog) const;
114
115 /**
116 * Converts the tree starting at this item into a string and adds it to
117 * the specified string object.
118 * @param String The string to append the stringified tree to.
119 */
120 virtual void stringifyTree(QString &String) const;
121
122 /**
123 * Copies the stringified tree onto the clipboard.
124 */
125 void copyTreeToClipboard(void) const;
126
127
128protected:
129 /** The name of this item. */
130 char *m_pszName;
131 /** Branch (true) / Leaf (false) indicator */
132 bool m_fBranch;
133 /** Parent item.
134 * This is NULL for the root item. */
135 VBoxDbgStatsItem *m_pParent;
136};
137
138
139/**
140 * A statistics item.
141 *
142 * This class represent one statistical item from STAM.
143 */
144class VBoxDbgStatsLeafItem : public VBoxDbgStatsItem
145{
146public:
147 /**
148 * Constructor.
149 *
150 * @param pszName The name of this item.
151 * @param pParent The parent view item.
152 */
153 VBoxDbgStatsLeafItem(const char *pszName, VBoxDbgStatsItem *pParent);
154
155 /** Destructor. */
156 virtual ~VBoxDbgStatsLeafItem();
157
158 /**
159 * Updates the item when current data.
160 *
161 * @param enmType The current type of the object.
162 * @param pvSample Pointer to the sample (may change).
163 * @param enmUnit The current unit.
164 * @param enmVisibility The current visibility settings.
165 * @param pszDesc The current description.
166 */
167 void update(STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit, STAMVISIBILITY enmVisibility, const char *pszDesc);
168
169 /**
170 * Get sort key.
171 *
172 * @returns The sort key.
173 * @param iColumn The column to sort.
174 * @param fAscending The sorting direction.
175 */
176 virtual QString key(int iColumn, bool fAscending) const;
177
178 /**
179 * Logs the tree starting at this item to one of the default logs.
180 * @param fReleaseLog If set use RTLogRelPrintf instead of RTLogPrintf.
181 */
182 virtual void logTree(bool fReleaseLog) const;
183
184 /**
185 * Converts the tree starting at this item into a string and adds it to
186 * the specified string object.
187 * @param String The string to append the stringified tree to.
188 */
189 virtual void stringifyTree(QString &String) const;
190
191 /** Pointer to the next item in the list.
192 * The list is maintained by the creator of the object, not the object it self. */
193 VBoxDbgStatsLeafItem *m_pNext;
194 /** Pointer to the previous item in the list. */
195 VBoxDbgStatsLeafItem *m_pPrev;
196
197
198protected:
199
200 /** The data type. */
201 STAMTYPE m_enmType;
202 /** The data at last update. */
203 union
204 {
205 /** STAMTYPE_COUNTER. */
206 STAMCOUNTER Counter;
207 /** STAMTYPE_PROFILE. */
208 STAMPROFILE Profile;
209 /** STAMTYPE_PROFILE_ADV. */
210 STAMPROFILEADV ProfileAdv;
211 /** STAMTYPE_RATIO_U32. */
212 STAMRATIOU32 RatioU32;
213 /** STAMTYPE_U8 & STAMTYPE_U8_RESET. */
214 uint8_t u8;
215 /** STAMTYPE_U16 & STAMTYPE_U16_RESET. */
216 uint16_t u16;
217 /** STAMTYPE_U32 & STAMTYPE_U32_RESET. */
218 uint32_t u32;
219 /** STAMTYPE_U64 & STAMTYPE_U64_RESET. */
220 uint64_t u64;
221 } m_Data;
222 /** The unit. */
223 STAMUNIT m_enmUnit;
224 /** The description string. */
225 QString m_DescStr;
226};
227
228
229/**
230 * The VM statistics tree view.
231 *
232 * A tree represenation of the STAM statistics.
233 */
234class VBoxDbgStatsView : public QListView, public VBoxDbgBase
235{
236 Q_OBJECT
237
238public:
239 /**
240 * Creates a VM statistics list view widget.
241 *
242 * @param pVM The VM which STAM data is being viewed.
243 * @param pParent Parent widget.
244 * @param pszName Widget name.
245 * @param f Widget flags.
246 */
247 VBoxDbgStatsView(PVM pVM, VBoxDbgStats *pParent = NULL, const char *pszName = NULL, WFlags f = 0);
248
249 /** Destructor. */
250 virtual ~VBoxDbgStatsView();
251
252 /**
253 * Updates the view with current information from STAM.
254 * This will indirectly update the m_PatStr.
255 *
256 * @param rPatStr Selection pattern. NULL means everything, see STAM for further details.
257 */
258 void update(const QString &rPatStr);
259
260 /**
261 * Resets the stats items matching the specified pattern.
262 * This pattern doesn't have to be the one used for update, thus m_PatStr isn't updated.
263 *
264 * @param rPatStr Selection pattern. NULL means everything, see STAM for further details.
265 */
266 void reset(const QString &rPatStr);
267
268 /**
269 * Expand all items in the view.
270 */
271 void expandAll();
272
273 /**
274 * Collaps all items in the view.
275 */
276 void collapsAll();
277
278private:
279 /**
280 * Callback function for the STAMR3Enum() made by update().
281 *
282 * @returns 0 (i.e. never halt enumeration).
283 *
284 * @param pszName The name of the sample.
285 * @param enmType The type.
286 * @param pvSample Pointer to the data. enmType indicates the format of this data.
287 * @param enmUnit The unit.
288 * @param enmVisibility The visibility.
289 * @param pszDesc The description.
290 * @param pvUser Pointer to the VBoxDbgStatsView object.
291 */
292 static DECLCALLBACK(int) updateCallback(const char *pszName, STAMTYPE enmType, void *pvSample, STAMUNIT enmUnit,
293 STAMVISIBILITY enmVisibility, const char *pszDesc, void *pvUser);
294
295protected:
296 /**
297 * Creates / finds the path to the specified stats item and makes is visible.
298 *
299 * @returns Parent node.
300 * @param pszName Path to a stats item.
301 */
302 VBoxDbgStatsItem *createPath(const char *pszName);
303
304protected slots:
305 /** Context menu. */
306 void contextMenuReq(QListViewItem *pItem, const QPoint &rPoint, int iColumn);
307 /** Leaf context. */
308 void leafMenuActivated(int iId);
309 /** Branch context. */
310 void branchMenuActivated(int iId);
311 /** View context. */
312 void viewMenuActivated(int iId);
313
314protected:
315 typedef enum { eRefresh = 1, eReset, eExpand, eCollaps, eCopy, eLog, eLogRel } MenuId;
316
317protected:
318 /** The current selection pattern. */
319 QString m_PatStr;
320 /** The parent widget. */
321 VBoxDbgStats *m_pParent;
322 /** Head of the items list.
323 * This list is in the order that STAMR3Enum() uses.
324 * Access seralization should not be required, and is therefore omitted. */
325 VBoxDbgStatsLeafItem *m_pHead;
326 /** Tail of the items list (see m_pHead). */
327 VBoxDbgStatsLeafItem *m_pTail;
328 /** The current position in the enumeration.
329 * If NULL we've reached the end of the list and are adding elements. */
330 VBoxDbgStatsLeafItem *m_pCur;
331 /** The root item. */
332 VBoxDbgStatsItem *m_pRoot;
333 /** Leaf item menu. */
334 QPopupMenu *m_pLeafMenu;
335 /** Branch item menu. */
336 QPopupMenu *m_pBranchMenu;
337 /** View menu. */
338 QPopupMenu *m_pViewMenu;
339 /** The pointer to the context menu item which is the focus of a context menu. */
340 VBoxDbgStatsItem *m_pContextMenuItem;
341};
342
343
344
345/**
346 * The VM statistics window.
347 *
348 * This class displays the statistics of a VM. The UI contains
349 * a entry field for the selection pattern, a refresh interval
350 * spinbutton, and the tree view with the statistics.
351 */
352class VBoxDbgStats : public QVBox, public VBoxDbgBase
353{
354 Q_OBJECT
355
356public:
357 /**
358 * Creates a VM statistics list view widget.
359 *
360 * @param pVM The VM this is hooked up to.
361 * @param pszPat Initial selection pattern. NULL means everything. (See STAM for details.)
362 * @param uRefreshRate The refresh rate. 0 means not to refresh and is the default.
363 * @param pParent Parent widget.
364 * @param pszName Widget name.
365 * @param f Widget flags.
366 */
367 VBoxDbgStats(PVM pVM, const char *pszPat = NULL, unsigned uRefreshRate= 0, QWidget *pParent = NULL, const char *pszName = NULL, WFlags f = 0);
368
369 /** Destructor. */
370 virtual ~VBoxDbgStats();
371
372protected slots:
373 /** Apply the activated combobox pattern. */
374 void apply(const QString &Str);
375 /** The "All" button was pressed. */
376 void applyAll();
377 /** Refresh the data on timer tick and pattern changed. */
378 void refresh();
379 /**
380 * Set the refresh rate.
381 *
382 * @param iRefresh The refresh interval in seconds.
383 */
384 void setRefresh(int iRefresh);
385
386protected:
387
388 /** The current selection pattern. */
389 QString m_PatStr;
390 /** The pattern combo box. */
391 QComboBox *m_pPatCB;
392 /** The refresh rate in seconds.
393 * 0 means not to refresh. */
394 unsigned m_uRefreshRate;
395 /** The refresh timer .*/
396 QTimer *m_pTimer;
397 /** The tree view widget. */
398 VBoxDbgStatsView *m_pView;
399};
400
401
402#endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette