From f215e02bf85f68d3a6106c2a1f4f7f063f819064 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 Apr 2024 10:17:27 +0200 Subject: Adding upstream version 7.0.14-dfsg. Signed-off-by: Daniel Baumann --- src/VBox/Debugger/VBoxDbgStatsQt.h | 272 +++++++++++++++++++++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 src/VBox/Debugger/VBoxDbgStatsQt.h (limited to 'src/VBox/Debugger/VBoxDbgStatsQt.h') diff --git a/src/VBox/Debugger/VBoxDbgStatsQt.h b/src/VBox/Debugger/VBoxDbgStatsQt.h new file mode 100644 index 00000000..18f73db0 --- /dev/null +++ b/src/VBox/Debugger/VBoxDbgStatsQt.h @@ -0,0 +1,272 @@ +/* $Id: VBoxDbgStatsQt.h $ */ +/** @file + * VBox Debugger GUI - Statistics. + */ + +/* + * Copyright (C) 2006-2023 Oracle and/or its affiliates. + * + * This file is part of VirtualBox base platform packages, as + * available from https://www.virtualbox.org. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, in version 3 of the + * License. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * SPDX-License-Identifier: GPL-3.0-only + */ + +#ifndef DEBUGGER_INCLUDED_SRC_VBoxDbgStatsQt_h +#define DEBUGGER_INCLUDED_SRC_VBoxDbgStatsQt_h +#ifndef RT_WITHOUT_PRAGMA_ONCE +# pragma once +#endif + +#include "VBoxDbgBase.h" + +#include +#include +#include +#include + +class VBoxDbgStats; +class VBoxDbgStatsModel; + +/** Pointer to a statistics sample. */ +typedef struct DBGGUISTATSNODE *PDBGGUISTATSNODE; +/** Pointer to a const statistics sample. */ +typedef struct DBGGUISTATSNODE const *PCDBGGUISTATSNODE; + + +/** + * The VM statistics tree view. + * + * A tree representation of the STAM statistics. + */ +class VBoxDbgStatsView : public QTreeView, public VBoxDbgBase +{ + Q_OBJECT; + +public: + /** + * Creates a VM statistics list view widget. + * + * @param a_pDbgGui Pointer to the debugger gui object. + * @param a_pModel The model. Will take ownership of this and delete it together + * with the view later + * @param a_pParent Parent widget. + */ + VBoxDbgStatsView(VBoxDbgGui *a_pDbgGui, VBoxDbgStatsModel *a_pModel, VBoxDbgStats *a_pParent = NULL); + + /** Destructor. */ + virtual ~VBoxDbgStatsView(); + + /** + * Updates the view with current information from STAM. + * This will indirectly update the m_PatStr. + * + * @param rPatStr Selection pattern. NULL means everything, see STAM for further details. + */ + void updateStats(const QString &rPatStr); + + /** + * Resets the stats items matching the specified pattern. + * This pattern doesn't have to be the one used for update, thus m_PatStr isn't updated. + * + * @param rPatStr Selection pattern. NULL means everything, see STAM for further details. + */ + void resetStats(const QString &rPatStr); + + /** + * Resizes the columns to fit the content. + */ + void resizeColumnsToContent(); + + /** + * Expands the trees matching the given expression. + * + * @param rPatStr Selection pattern. + */ + void expandMatching(const QString &rPatStr); + +protected: + /** + * @callback_method_impl{VBoxDbgStatsModel::FNITERATOR, + * Worker for expandMatching}. + */ + static bool expandMatchingCallback(PDBGGUISTATSNODE pNode, QModelIndex const &a_rIndex, const char *pszFullName, void *pvUser); + + /** + * Expands or collapses a sub-tree. + * + * @param a_rIndex The root of the sub-tree. + * @param a_fExpanded Expand/collapse. + */ + void setSubTreeExpanded(QModelIndex const &a_rIndex, bool a_fExpanded); + + /** + * Popup context menu. + * + * @param a_pEvt The event. + */ + virtual void contextMenuEvent(QContextMenuEvent *a_pEvt); + +protected slots: + /** + * Slot for handling the view/header context menu. + * @param a_rPos The mouse location. + */ + void headerContextMenuRequested(const QPoint &a_rPos); + + /** @name Action signal slots. + * @{ */ + void actExpand(); + void actCollapse(); + void actRefresh(); + void actReset(); + void actCopy(); + void actToLog(); + void actToRelLog(); + void actAdjColumns(); + /** @} */ + + +protected: + /** Pointer to the data model. */ + VBoxDbgStatsModel *m_pModel; + /** The current selection pattern. */ + QString m_PatStr; + /** The parent widget. */ + VBoxDbgStats *m_pParent; + + /** Leaf item menu. */ + QMenu *m_pLeafMenu; + /** Branch item menu. */ + QMenu *m_pBranchMenu; + /** View menu. */ + QMenu *m_pViewMenu; + + /** The menu that's currently being executed. */ + QMenu *m_pCurMenu; + /** The current index relating to the context menu. + * Considered invalid if m_pCurMenu is NULL. */ + QModelIndex m_CurIndex; + + /** Expand Tree action. */ + QAction *m_pExpandAct; + /** Collapse Tree action. */ + QAction *m_pCollapseAct; + /** Refresh Tree action. */ + QAction *m_pRefreshAct; + /** Reset Tree action. */ + QAction *m_pResetAct; + /** Copy (to clipboard) action. */ + QAction *m_pCopyAct; + /** To Log action. */ + QAction *m_pToLogAct; + /** To Release Log action. */ + QAction *m_pToRelLogAct; + /** Adjust the columns. */ + QAction *m_pAdjColumns; +#if 0 + /** Save Tree (to file) action. */ + QAction *m_SaveFileAct; + /** Load Tree (from file) action. */ + QAction *m_LoadFileAct; + /** Take Snapshot action. */ + QAction *m_TakeSnapshotAct; + /** Load Snapshot action. */ + QAction *m_LoadSnapshotAct; + /** Diff With Snapshot action. */ + QAction *m_DiffSnapshotAct; +#endif +}; + + + +/** + * The VM statistics window. + * + * This class displays the statistics of a VM. The UI contains + * a entry field for the selection pattern, a refresh interval + * spinbutton, and the tree view with the statistics. + */ +class VBoxDbgStats : public VBoxDbgBaseWindow +{ + Q_OBJECT; + +public: + /** + * Creates a VM statistics list view widget. + * + * @param a_pDbgGui Pointer to the debugger gui object. + * @param pszFilter Initial selection pattern. NULL means everything. + * (See STAM for details.) + * @param pszExpand Initial expansion pattern. NULL means nothing is + * expanded. + * @param uRefreshRate The refresh rate. 0 means not to refresh and is the default. + * @param pParent Parent widget. + */ + VBoxDbgStats(VBoxDbgGui *a_pDbgGui, const char *pszFilter = NULL, const char *pszExpand = NULL, + unsigned uRefreshRate = 0, QWidget *pParent = NULL); + + /** Destructor. */ + virtual ~VBoxDbgStats(); + +protected: + /** + * Destroy the widget on close. + * + * @param a_pCloseEvt The close event. + */ + virtual void closeEvent(QCloseEvent *a_pCloseEvt); + +protected slots: + /** Apply the activated combobox pattern. */ + void apply(const QString &Str); + /** The "All" button was pressed. */ + void applyAll(); + /** Refresh the data on timer tick and pattern changed. */ + void refresh(); + /** + * Set the refresh rate. + * + * @param iRefresh The refresh interval in seconds. + */ + void setRefresh(int iRefresh); + + /** + * Change the focus to the pattern combo box. + */ + void actFocusToPat(); + +protected: + + /** The current selection pattern. */ + QString m_PatStr; + /** The pattern combo box. */ + QComboBox *m_pPatCB; + /** The refresh rate in seconds. + * 0 means not to refresh. */ + unsigned m_uRefreshRate; + /** The refresh timer .*/ + QTimer *m_pTimer; + /** The tree view widget. */ + VBoxDbgStatsView *m_pView; + + /** Move to pattern field action. */ + QAction *m_pFocusToPat; +}; + + +#endif /* !DEBUGGER_INCLUDED_SRC_VBoxDbgStatsQt_h */ + -- cgit v1.2.3