VirtualBox

Changeset 83512 in vbox for trunk/src


Ignore:
Timestamp:
Apr 2, 2020 3:28:21 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9686. Adding Host RAM monitor.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.cpp

    r83509 r83512  
    6464
    6565///#define DEBUG_BACKGROUND
    66 /*********************************************************************************************************************************
    67 *   Class UIVMResourceMonitorHostStats definition.                                                                           *
     66
     67
     68/*********************************************************************************************************************************
     69*   Class UIVMResourceMonitorHostStats definition.                                                                               *
    6870*********************************************************************************************************************************/
    6971
     
    106108    quint64 m_iCPUKernelLoad;
    107109    quint64 m_iCPUFreq;
    108     int m_iMinimumHeight;
    109110    int m_iMargin;
    110111    QColor m_CPUUserColor;
     
    114115
    115116/*********************************************************************************************************************************
     117*   Class UIVMResourceMonitorHostRAMWidget definition.                                                                           *
     118*********************************************************************************************************************************/
     119
     120class UIVMResourceMonitorHostRAMWidget : public QWidget
     121{
     122
     123    Q_OBJECT;
     124
     125public:
     126
     127    UIVMResourceMonitorHostRAMWidget(QWidget *pParent = 0);
     128    void setRAMStats(quint64 iTotalRAM, quint64 iFreeRAM);
     129    void setChartColors(const QColor &RAMFreeColor, const QColor &RAMUsedColor);
     130
     131protected:
     132
     133    virtual void paintEvent(QPaintEvent *pEvent) /* override */;
     134
     135private:
     136
     137    quint64 m_iTotalRAM;
     138    quint64 m_iFreeRAM;
     139
     140    int m_iMargin;
     141    QColor m_RAMFreeColor;
     142    QColor m_RAMUsedColor;
     143};
     144
     145
     146/*********************************************************************************************************************************
    116147*   Class UIVMResourceMonitorHostStatsWidget definition.                                                                         *
    117148*********************************************************************************************************************************/
     
    137168
    138169    UIVMResourceMonitorHostCPUWidget   *m_pHostCPUChart;
     170    UIVMResourceMonitorHostRAMWidget   *m_pHostRAMChart;
    139171    QLabel                             *m_pCPUTitleLabel;
    140172    QLabel                             *m_pCPUUserLabel;
    141173    QLabel                             *m_pCPUKernelLabel;
    142174    QLabel                             *m_pCPUTotalLabel;
     175
     176    QLabel                             *m_pRAMTitleLabel;
     177    QLabel                             *m_pRAMUsedLabel;
     178    QLabel                             *m_pRAMFreeLabel;
     179    QLabel                             *m_pRAMTotalLabel;
     180
    143181    QColor                              m_CPUUserColor;
    144182    QColor                              m_CPUKernelColor;
     183    QColor                              m_RAMFreeColor;
     184    QColor                              m_RAMUsedColor;
     185
    145186    UIVMResourceMonitorHostStats        m_hostStats;
    146187};
    147188
    148 /*********************************************************************************************************************************
    149 *   Class UIVMResourceMonitorTableView definition.                                                                           *
     189
     190/*********************************************************************************************************************************
     191*   Class UIVMResourceMonitorTableView definition.                                                                               *
    150192*********************************************************************************************************************************/
    151193
     
    175217
    176218/*********************************************************************************************************************************
    177 *   Class UIVMResourceMonitorItem definition.                                                                           *
    178 *********************************************************************************************************************************/
     219 *   Class UIVMResourceMonitorItem definition.                                                                           *
     220 *********************************************************************************************************************************/
    179221class UIResourceMonitorItem
    180222{
     
    218260
    219261/*********************************************************************************************************************************
    220 *   Class UIVMResourceMonitorCheckBox definition.                                                                           *
    221 *********************************************************************************************************************************/
     262 *   Class UIVMResourceMonitorCheckBox definition.                                                                           *
     263 *********************************************************************************************************************************/
    222264
    223265class UIVMResourceMonitorCheckBox : public QCheckBox
     
    307349    QTimer *m_pTimer;
    308350    /** @name The following are used during UIPerformanceCollector::QueryMetricsData(..)
    309       * @{ */
    310         QVector<QString> m_nameList;
    311         QVector<CUnknown> m_objectList;
     351     * @{ */
     352    QVector<QString> m_nameList;
     353    QVector<CUnknown> m_objectList;
    312354    /** @} */
    313355    CPerformanceCollector m_performanceMonitor;
    314356    QMap<int, bool> m_columnVisible;
    315357    /** If true the table data and corresponding view is updated. Possibly set by host widget to true only
    316       *  when the widget is visible in the main UI. */
     358     *  when the widget is visible in the main UI. */
    317359    bool m_fShouldUpdate;
    318360    UIVMResourceMonitorHostStats m_hostStats;
     
    346388{
    347389    m_iMargin = 3;
    348     m_iMinimumHeight =  3 * QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
    349     setMinimumSize(m_iMinimumHeight, m_iMinimumHeight);
    350390}
    351391
     
    371411    painter.setRenderHint(QPainter::Antialiasing);
    372412
    373     int iFrameHeight = m_iMinimumHeight - 2 * m_iMargin;
     413    int iFrameHeight = height()- 2 * m_iMargin;
    374414    QRectF outerRect = QRectF(QPoint(m_iMargin,m_iMargin), QSize(iFrameHeight, iFrameHeight));
    375415    QRectF innerRect = UIMonitorCommon::getScaledRect(outerRect, 0.6f, 0.6f);
     
    386426
    387427/*********************************************************************************************************************************
     428*   Class UIVMResourceMonitorHostRAMWidget implementation.                                                                       *
     429*********************************************************************************************************************************/
     430
     431UIVMResourceMonitorHostRAMWidget::UIVMResourceMonitorHostRAMWidget(QWidget *pParent /* = 0 */)
     432    :QWidget(pParent)
     433    , m_iTotalRAM(0)
     434    , m_iFreeRAM(0)
     435{
     436    m_iMargin = 3;
     437}
     438void UIVMResourceMonitorHostRAMWidget::setRAMStats(quint64 iTotalRAM, quint64 iFreeRAM)
     439{
     440    m_iTotalRAM = iTotalRAM;
     441    m_iFreeRAM = iFreeRAM;
     442    update();
     443}
     444
     445void UIVMResourceMonitorHostRAMWidget::setChartColors(const QColor &RAMFreeColor, const QColor &RAMUsedColor)
     446{
     447    m_RAMFreeColor = RAMFreeColor;
     448    m_RAMUsedColor = RAMUsedColor;
     449}
     450
     451void UIVMResourceMonitorHostRAMWidget::paintEvent(QPaintEvent *pEvent)
     452{
     453
     454    QWidget::paintEvent(pEvent);
     455
     456    QPainter painter(this);
     457    painter.setRenderHint(QPainter::Antialiasing);
     458
     459    int iFrameHeight = height()- 2 * m_iMargin;
     460    QRectF outerRect = QRectF(QPoint(m_iMargin,m_iMargin), QSize(iFrameHeight, iFrameHeight));
     461    QRectF innerRect = UIMonitorCommon::getScaledRect(outerRect, 0.6f, 0.6f);
     462    quint64 iUsedRAM = m_iTotalRAM - m_iFreeRAM;
     463
     464    UIMonitorCommon::drawCombinedDoughnutChart(iUsedRAM, m_RAMUsedColor,
     465                                               m_iFreeRAM, m_RAMFreeColor,
     466                                               painter, m_iTotalRAM,
     467                                               outerRect, innerRect, 80);
     468
     469    if (m_iTotalRAM != 0)
     470    {
     471        float mul = 1.f / 1.4f;
     472        QRectF textRect =  UIMonitorCommon::getScaledRect(innerRect, mul, mul);
     473        painter.setPen(Qt::black);
     474        int iPercent = 100 * (iUsedRAM / (float) m_iTotalRAM);
     475        painter.drawText(textRect, Qt::AlignCenter, QString("%1%\nUsed").arg(QString::number(iPercent)));
     476    }
     477
     478}
     479
     480
     481/*********************************************************************************************************************************
    388482*   Class UIVMResourceMonitorHostStatsWidget implementation.                                                                     *
    389483*********************************************************************************************************************************/
     
    392486    : QIWithRetranslateUI<QWidget>(pParent)
    393487    , m_pHostCPUChart(0)
     488    , m_pHostRAMChart(0)
    394489    , m_pCPUTitleLabel(0)
    395490    , m_pCPUUserLabel(0)
    396491    , m_pCPUKernelLabel(0)
    397492    , m_pCPUTotalLabel(0)
     493    , m_pRAMTitleLabel(0)
     494    , m_pRAMUsedLabel(0)
     495    , m_pRAMFreeLabel(0)
     496    , m_pRAMTotalLabel(0)
    398497    , m_CPUUserColor(Qt::red)
    399498    , m_CPUKernelColor(Qt::blue)
     499    , m_RAMFreeColor(Qt::blue)
     500    , m_RAMUsedColor(Qt::red)
    400501{
    401502    prepare();
     
    414515    if (m_pHostCPUChart)
    415516        m_pHostCPUChart->setCPULoad(m_hostStats.m_iCPUUserLoad, m_hostStats.m_iCPUKernelLoad, m_hostStats.m_iCPUFreq);
     517    if (m_pHostRAMChart)
     518        m_pHostRAMChart->setRAMStats(m_hostStats.m_iTotalRAM, m_hostStats.m_iFreeRAM);
    416519    updateLabels();
    417520}
     
    426529    QHBoxLayout *pLayout = new QHBoxLayout;
    427530    setLayout(pLayout);
    428 
    429     /* Host CPU Labels: */
    430     QWidget *pCPULabelContainer = new QWidget;
    431     pCPULabelContainer->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
     531    int iMinimumSize =  3 * QApplication::style()->pixelMetric(QStyle::PM_LargeIconSize);
     532
     533    /* CPU Stuff: */
     534    {
     535        /* Host CPU Labels: */
     536        QWidget *pCPULabelContainer = new QWidget;
     537        pCPULabelContainer->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
    432538
    433539#ifdef DEBUG_BACKGROUND
    434     QPalette pal = pCPULabelContainer->palette();
    435     pal.setColor(QPalette::Background, Qt::yellow);
    436     pCPULabelContainer->setAutoFillBackground(true);
    437     pCPULabelContainer->setPalette(pal);
     540        QPalette pal = pCPULabelContainer->palette();
     541        pal.setColor(QPalette::Background, Qt::yellow);
     542        pCPULabelContainer->setAutoFillBackground(true);
     543        pCPULabelContainer->setPalette(pal);
    438544#endif
    439     pLayout->addWidget(pCPULabelContainer);
    440     QVBoxLayout *pCPULabelsLayout = new QVBoxLayout;
    441     pCPULabelsLayout->setContentsMargins(0, 0, 0, 0);
    442     pCPULabelContainer->setLayout(pCPULabelsLayout);
    443     m_pCPUTitleLabel = new QLabel;
    444     pCPULabelsLayout->addWidget(m_pCPUTitleLabel);
    445     m_pCPUUserLabel = new QLabel;
    446     pCPULabelsLayout->addWidget(m_pCPUUserLabel);
    447     m_pCPUKernelLabel = new QLabel;
    448     pCPULabelsLayout->addWidget(m_pCPUKernelLabel);
    449     m_pCPUTotalLabel = new QLabel;
    450     pCPULabelsLayout->addWidget(m_pCPUTotalLabel);
    451     pCPULabelsLayout->setAlignment(Qt::AlignTop);
    452     //pLayout->setAlignment(Qt::AlignTop);
    453     pCPULabelsLayout->setSpacing(0);
    454     /* Host CPU chart widget: */
    455     m_pHostCPUChart = new UIVMResourceMonitorHostCPUWidget;
    456     if (m_pHostCPUChart)
    457     {
    458         pLayout->addWidget(m_pHostCPUChart);
    459         m_pHostCPUChart->setChartColors(m_CPUUserColor, m_CPUKernelColor);
     545        pLayout->addWidget(pCPULabelContainer);
     546        QVBoxLayout *pCPULabelsLayout = new QVBoxLayout;
     547        pCPULabelsLayout->setContentsMargins(0, 0, 0, 0);
     548        pCPULabelContainer->setLayout(pCPULabelsLayout);
     549        m_pCPUTitleLabel = new QLabel;
     550        pCPULabelsLayout->addWidget(m_pCPUTitleLabel);
     551        m_pCPUUserLabel = new QLabel;
     552        pCPULabelsLayout->addWidget(m_pCPUUserLabel);
     553        m_pCPUKernelLabel = new QLabel;
     554        pCPULabelsLayout->addWidget(m_pCPUKernelLabel);
     555        m_pCPUTotalLabel = new QLabel;
     556        pCPULabelsLayout->addWidget(m_pCPUTotalLabel);
     557        pCPULabelsLayout->setAlignment(Qt::AlignTop);
     558        //pLayout->setAlignment(Qt::AlignTop);
     559        pCPULabelsLayout->setSpacing(0);
     560        /* Host CPU chart widget: */
     561        m_pHostCPUChart = new UIVMResourceMonitorHostCPUWidget;
     562        if (m_pHostCPUChart)
     563        {
     564            m_pHostCPUChart->setMinimumSize(iMinimumSize, iMinimumSize);
     565            pLayout->addWidget(m_pHostCPUChart);
     566            m_pHostCPUChart->setChartColors(m_CPUUserColor, m_CPUKernelColor);
     567        }
     568    }
     569    /* RAM Stuff: */
     570    {
     571        QWidget *pRAMLabelContainer = new QWidget;
     572        pRAMLabelContainer->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
     573
     574        pLayout->addWidget(pRAMLabelContainer);
     575        QVBoxLayout *pRAMLabelsLayout = new QVBoxLayout;
     576        pRAMLabelsLayout->setContentsMargins(0, 0, 0, 0);
     577        pRAMLabelContainer->setLayout(pRAMLabelsLayout);
     578        m_pRAMTitleLabel = new QLabel;
     579        pRAMLabelsLayout->addWidget(m_pRAMTitleLabel);
     580        m_pRAMUsedLabel = new QLabel;
     581        pRAMLabelsLayout->addWidget(m_pRAMUsedLabel);
     582        m_pRAMFreeLabel = new QLabel;
     583        pRAMLabelsLayout->addWidget(m_pRAMFreeLabel);
     584        m_pRAMTotalLabel = new QLabel;
     585        pRAMLabelsLayout->addWidget(m_pRAMTotalLabel);
     586
     587        m_pHostRAMChart = new UIVMResourceMonitorHostRAMWidget;
     588        if (m_pHostRAMChart)
     589        {
     590            m_pHostRAMChart->setMinimumSize(iMinimumSize, iMinimumSize);
     591            pLayout->addWidget(m_pHostRAMChart);
     592            m_pHostRAMChart->setChartColors(m_RAMFreeColor, m_RAMUsedColor);
     593        }
    460594    }
    461595    pLayout->addStretch(2);
     
    478612    if (m_pCPUTotalLabel)
    479613        m_pCPUTotalLabel->setText(QString("%1:%2%").arg(tr("Total")).arg(m_hostStats.m_iCPUUserLoad + m_hostStats.m_iCPUKernelLoad));
     614    if (m_pRAMTitleLabel)
     615        m_pRAMTitleLabel->setText(QString("<b>%1</b>").arg(tr("Host RAM Usage")));
     616    if (m_pRAMFreeLabel)
     617    {
     618        QString strRAM = uiCommon().formatSize(m_hostStats.m_iFreeRAM);
     619        QString strColor = QColor(m_RAMFreeColor).name(QColor::HexRgb);
     620        m_pRAMFreeLabel->setText(QString("<font color=\"%1\">%2:%3</font>").arg(strColor).arg(tr("Free")).arg(strRAM));
     621    }
     622
     623    if (m_pRAMUsedLabel)
     624    {
     625        QString strRAM = uiCommon().formatSize(m_hostStats.m_iTotalRAM - m_hostStats.m_iFreeRAM);
     626        QString strColor = QColor(m_RAMUsedColor).name(QColor::HexRgb);
     627        m_pRAMUsedLabel->setText(QString("<font color=\"%1\">%2:%3</font>").arg(strColor).arg(tr("Used")).arg(strRAM));
     628    }
     629    if (m_pRAMTotalLabel)
     630    {
     631        QString strRAM = uiCommon().formatSize(m_hostStats.m_iTotalRAM);
     632        m_pRAMTotalLabel->setText(QString("%1:%2").arg(tr("Total")).arg(strRAM));
     633    }
     634
    480635}
    481636
     
    541696
    542697/*********************************************************************************************************************************
    543 *   Class UIVMResourceMonitorItem implementation.                                                                           *
    544 *********************************************************************************************************************************/
     698 *   Class UIVMResourceMonitorItem implementation.                                                                           *
     699 *********************************************************************************************************************************/
    545700UIResourceMonitorItem::UIResourceMonitorItem(const QUuid &uid, const QString &strVMName)
    546701    : m_VMuid(uid)
     
    744899            break;
    745900        case VMResourceMonitorColumn_CPUGuestLoad:
    746             return m_itemList[index.row()].m_uCPUGuestLoad;
     901            return QString("%1%").arg(QString::number(m_itemList[index.row()].m_uCPUGuestLoad));
    747902            break;
    748903        case VMResourceMonitorColumn_CPUVMMLoad:
    749             return m_itemList[index.row()].m_uCPUVMMLoad;
     904            return QString("%1%").arg(QString::number(m_itemList[index.row()].m_uCPUVMMLoad));
    750905            break;
    751906        case VMResourceMonitorColumn_RAMUsedAndTotal:
     
    787942            break;
    788943        case VMResourceMonitorColumn_VMExits:
    789            return QString("%1/%2").arg(UICommon::addMetricSuffixToNumber(m_itemList[index.row()].m_uVMExitRate)).
    790                arg(UICommon::addMetricSuffixToNumber(m_itemList[index.row()].m_uVMExitTotal));
     944            return QString("%1/%2").arg(UICommon::addMetricSuffixToNumber(m_itemList[index.row()].m_uVMExitRate)).
     945                arg(UICommon::addMetricSuffixToNumber(m_itemList[index.row()].m_uVMExitTotal));
    791946            break;
    792947        default:
     
    9091064                m_itemList[i].m_uDiskReadRate = m_itemList[i].m_uDiskReadTotal - uPrevReadTotal;
    9101065            }
    911            /* VM Exits: */
    912            if (fVMExitColumn)
    913            {
    914                quint64 uPrevVMExitsTotal = m_itemList[i].m_uVMExitTotal;
    915                UIMonitorCommon::getVMMExitCount(m_itemList[i].m_comDebugger, m_itemList[i].m_uVMExitTotal);
    916                m_itemList[i].m_uVMExitRate = m_itemList[i].m_uVMExitTotal - uPrevVMExitsTotal;
    917            }
     1066            /* VM Exits: */
     1067            if (fVMExitColumn)
     1068            {
     1069                quint64 uPrevVMExitsTotal = m_itemList[i].m_uVMExitTotal;
     1070                UIMonitorCommon::getVMMExitCount(m_itemList[i].m_comDebugger, m_itemList[i].m_uVMExitTotal);
     1071                m_itemList[i].m_uVMExitRate = m_itemList[i].m_uVMExitTotal - uPrevVMExitsTotal;
     1072            }
    9181073        }
    9191074    }
     
    9511106
    9521107    QVector<LONG> returnData = m_performanceMonitor.QueryMetricsData(m_nameList,
    953                                                                         m_objectList,
    954                                                                         aReturnNames,
    955                                                                         aReturnObjects,
    956                                                                         aReturnUnits,
    957                                                                         aReturnScales,
    958                                                                         aReturnSequenceNumbers,
    959                                                                         aReturnDataIndices,
    960                                                                         aReturnDataLengths);
     1108                                                                     m_objectList,
     1109                                                                     aReturnNames,
     1110                                                                     aReturnObjects,
     1111                                                                     aReturnUnits,
     1112                                                                     aReturnScales,
     1113                                                                     aReturnSequenceNumbers,
     1114                                                                     aReturnDataIndices,
     1115                                                                     aReturnDataLengths);
    9611116    /* Parse the result we get from CPerformanceCollector to get respective values: */
    9621117    for (int i = 0; i < aReturnNames.size(); ++i)
     
    10441199
    10451200UIResourceMonitorWidget::UIResourceMonitorWidget(EmbedTo enmEmbedding, UIActionPool *pActionPool,
    1046                                                        bool fShowToolbar /* = true */, QWidget *pParent /* = 0 */)
     1201                                                 bool fShowToolbar /* = true */, QWidget *pParent /* = 0 */)
    10471202    : QIWithRetranslateUI<QWidget>(pParent)
    10481203    , m_enmEmbedding(enmEmbedding)
Note: See TracChangeset for help on using the changeset viewer.

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