VirtualBox

Changeset 80187 in vbox


Ignore:
Timestamp:
Aug 7, 2019 3:15:00 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
132628
Message:

FE/Qt: bugref: 9510:

  • Adding a graph for network trafic metric
  • some cleanup and refactoring
Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIPerformanceMonitor.cpp

    r80162 r80187  
    3939const ULONG iPeriod = 1;
    4040const int iMaximumQueueSize = 100;
    41 const int iMetricSetupCount = 1;
     41const int iMetricSetupCount = 10;
    4242
    4343/*********************************************************************************************************************************
     
    5757    void setTextList(const QStringList &textList);
    5858    const QStringList &textList() const;
     59
     60    bool drawPieChart() const;
     61    void setDrawPieChart(bool fDrawPieChart);
     62
     63    bool useGradientLineColor() const;
     64    void setUseGradientLineColor(bool fUseGradintLineColor);
     65
     66    QColor dataSeriesColor(int iDataSeriesIndex);
     67    void setDataSeriesColor(int iDataSeriesIndex, const QColor &color);
     68
     69    QString dataSeriesLabel(int iDataSeriesIndex);
     70    void setDataSeriesLabel(int iDataSeriesIndex, const QString &strLabel);
    5971
    6072protected:
     
    7284    int m_iPieChartSize;
    7385    QRect m_pieChartRect;
    74 
     86    bool m_fDrawPieChart;
     87    bool m_fUseGradientLineColor;
     88    QColor m_dataSeriesColor[2];
     89    QString m_dataSeriesLabel[2];
    7590};
    7691
     
    8499    , m_pSubMetric(pSubMetric)
    85100    , m_size(QSize(50, 50))
     101    , m_fDrawPieChart(true)
     102    , m_fUseGradientLineColor(true)
     103    , m_dataSeriesColor({Qt::red, Qt::blue})
    86104{
    87105    m_iMargin = qApp->QApplication::style()->pixelMetric(QStyle::PM_LayoutTopMargin);
     
    110128{
    111129    return m_textList;
     130}
     131
     132bool UIChart::drawPieChart() const
     133{
     134    return m_fDrawPieChart;
     135}
     136
     137void UIChart::setDrawPieChart(bool fDrawPieChart)
     138{
     139    if (m_fDrawPieChart == fDrawPieChart)
     140        return;
     141    m_fDrawPieChart = fDrawPieChart;
     142    update();
     143}
     144
     145bool UIChart::useGradientLineColor() const
     146{
     147    return m_fUseGradientLineColor;
     148}
     149
     150void UIChart::setUseGradientLineColor(bool fUseGradintLineColor)
     151{
     152    if (m_fUseGradientLineColor == fUseGradintLineColor)
     153        return;
     154    m_fUseGradientLineColor = fUseGradintLineColor;
     155    update();
     156}
     157
     158
     159QColor UIChart::dataSeriesColor(int iDataSeriesIndex)
     160{
     161    if (iDataSeriesIndex >= 2)
     162        return QColor();
     163    return m_dataSeriesColor[iDataSeriesIndex];
     164}
     165
     166void UIChart::setDataSeriesColor(int iDataSeriesIndex, const QColor &color)
     167{
     168    if (iDataSeriesIndex >= 2)
     169        return;
     170    if (m_dataSeriesColor[iDataSeriesIndex] == color)
     171        return;
     172    m_dataSeriesColor[iDataSeriesIndex] = color;
     173    update();
     174}
     175
     176QString UIChart::dataSeriesLabel(int iDataSeriesIndex)
     177{
     178    if (iDataSeriesIndex >= 2)
     179        return QString();
     180    return m_dataSeriesLabel[iDataSeriesIndex];
     181}
     182
     183void UIChart::setDataSeriesLabel(int iDataSeriesIndex, const QString &strLabel)
     184{
     185    if (iDataSeriesIndex >= 2)
     186        return;
     187    if (m_dataSeriesLabel[iDataSeriesIndex] == strLabel)
     188        return;
     189    m_dataSeriesLabel[iDataSeriesIndex] = strLabel;
     190    update();
    112191}
    113192
     
    146225    Q_UNUSED(pEvent);
    147226    QPainter painter(this);
    148 
     227    painter.setRenderHint(QPainter::Antialiasing);
     228
     229    /* Draw a rectanglar grid over which we will draw the line graphs: */
    149230    float fChartHeight = height() - 2 * m_iMargin;
    150231    float fChartWidth = width() - 2 * m_iMargin;
     
    152233    painter.drawRect(QRect(m_iMargin, m_iMargin, fChartWidth, fChartHeight));
    153234    painter.setPen(QColor(200, 200, 200));
    154 
    155235    int iYParts = 4;
    156236    for (int i = 1; i < iYParts; ++i)
    157237        painter.drawLine(m_iMargin, m_iMargin + i *fChartHeight / (float)iYParts, width() - m_iMargin, m_iMargin + i * fChartHeight / (float)iYParts);
    158 
    159 
    160238    int iXParts = 5;
    161239    for (int i = 1; i < iXParts; ++i)
    162240        painter.drawLine(m_iMargin + i * fChartWidth / (float)iXParts, m_iMargin, m_iMargin + i * fChartWidth / (float)iXParts, height() - m_iMargin);
    163241
    164     painter.setRenderHint(QPainter::Antialiasing);
    165     if (!m_pSubMetric)
    166         return;
    167     const QQueue<ULONG> &data = m_pSubMetric->data();
    168 
    169     if (data.isEmpty() || iMaximumQueueSize == 0)
    170         return;
    171 
    172     float fMaximum = m_pSubMetric->maximum();
    173     if (m_pSubMetric->isPercentage())
    174         fMaximum = 100.f;
    175     if (fMaximum == 0)
    176         return;
    177 
    178     if (isEnabled())
    179     {
    180         float fBarWidth = fChartWidth / (float) iMaximumQueueSize;
    181 
    182         float fH = fChartHeight / fMaximum;
    183 
    184         QLinearGradient gradient(0, 0, 0, fChartHeight);
    185         gradient.setColorAt(1.0, Qt::green);
    186         gradient.setColorAt(0.0, Qt::red);
    187         painter.setPen(QPen(gradient, 2.5));
    188 
    189         for (int i = 0; i < data.size() - 1; ++i)
    190         {
    191             int j = i + 1;
    192 
    193             float fHeight = fH * data[i];
    194             float fX = width() - ((data.size() -i) * fBarWidth);
    195 
    196             float fHeight2 = fH * data[j];
    197             float fX2 = width() - ((data.size() -j) * fBarWidth);
    198 
    199 
    200             QLineF bar(fX, height() - (fHeight + m_iMargin), fX2, height() - (fHeight2 + m_iMargin));
    201             painter.drawLine(bar);
    202         }
    203     }
    204 
    205     /* Draw a whole non-filled circle: */
    206     painter.setPen(QPen(Qt::gray, 1));
    207     painter.drawArc(m_pieChartRect, 0, 3600 * 16);
    208 
    209     QPointF center(m_pieChartRect.center());
    210     QPainterPath fillPath;
    211     fillPath.moveTo(center);
    212 
    213     fillPath.arcTo(m_pieChartRect, 90/*startAngle*/,
    214                  -1 * 360 /*sweepLength*/);
    215 
    216     /* First draw a white filled circle and that the arc for data: */
    217     QConicalGradient pieGradient;
    218     pieGradient.setCenter(m_pieChartRect.center());
    219     pieGradient.setAngle(90);
    220     pieGradient.setColorAt(0, Qt::red);
    221     pieGradient.setColorAt(1, Qt::green);
    222 
    223     painter.setPen(Qt::NoPen);
    224     painter.setBrush(Qt::white);
    225     painter.drawPath(fillPath);
    226 
    227     if (isEnabled())
    228     {
    229         QPainterPath dataPath;
    230         dataPath.moveTo(center);
    231         float fAngle = 360.f * data.back() / fMaximum;
    232         dataPath.arcTo(m_pieChartRect, 90/*startAngle*/,
    233                        -1 * fAngle /*sweepLength*/);
    234         painter.setBrush(pieGradient);
    235         painter.drawPath(dataPath);
    236     }
    237     else
     242
     243    /* Draw a half-transparent rectangle over the whole widget to indicate the it is disabled: */
     244    if (!isEnabled())
    238245    {
    239246        painter.setPen(Qt::NoPen);
     
    241248        painter.drawRect(QRect(0, 0, width(), height()));
    242249    }
     250
     251    if (!m_pSubMetric || iMaximumQueueSize <= 0)
     252        return;
     253
     254    ULONG iMaximum = m_pSubMetric->maximum();
     255    if (m_pSubMetric->isPercentage())
     256        iMaximum = 100;
     257    if (iMaximum == 0)
     258        return;
     259
     260    if (isEnabled())
     261    {
     262        float fBarWidth = fChartWidth / (float) iMaximumQueueSize;
     263        float fH = fChartHeight / (float)iMaximum;
     264        if (m_fUseGradientLineColor)
     265        {
     266            QLinearGradient gradient(0, 0, 0, fChartHeight);
     267            gradient.setColorAt(1.0, Qt::green);
     268            gradient.setColorAt(0.0, Qt::red);
     269            painter.setPen(QPen(gradient, 2.5));
     270        }
     271        for (int k = 0; k < 2; ++k)
     272        {
     273            const QQueue<ULONG> *data = m_pSubMetric->data(k);
     274            if (!m_fUseGradientLineColor)
     275                painter.setPen(QPen(m_dataSeriesColor[k], 2.5));
     276
     277            for (int i = 0; i < data->size() - 1; ++i)
     278            {
     279                int j = i + 1;
     280                float fHeight = fH * data->at(i);
     281                float fX = width() - ((data->size() -i) * fBarWidth);
     282                float fHeight2 = fH * data->at(j);
     283                float fX2 = width() - ((data->size() -j) * fBarWidth);
     284                QLineF bar(fX, height() - (fHeight + m_iMargin), fX2, height() - (fHeight2 + m_iMargin));
     285                painter.drawLine(bar);
     286            }
     287        }
     288    }
     289
     290    if (m_fDrawPieChart)
     291    {
     292        /* Draw a whole non-filled circle: */
     293        painter.setPen(QPen(Qt::gray, 1));
     294        painter.drawArc(m_pieChartRect, 0, 3600 * 16);
     295
     296        QPointF center(m_pieChartRect.center());
     297        QPainterPath fillPath;
     298        fillPath.moveTo(center);
     299
     300        fillPath.arcTo(m_pieChartRect, 90/*startAngle*/,
     301                       -1 * 360 /*sweepLength*/);
     302
     303        /* First draw a white filled circle and that the arc for data: */
     304        QConicalGradient pieGradient;
     305        pieGradient.setCenter(m_pieChartRect.center());
     306        pieGradient.setAngle(90);
     307        pieGradient.setColorAt(0, Qt::red);
     308        pieGradient.setColorAt(1, Qt::green);
     309
     310        painter.setPen(Qt::NoPen);
     311        painter.setBrush(Qt::white);
     312        painter.drawPath(fillPath);
     313
     314        if (isEnabled())
     315        {
     316            /* Draw the pie chart for the 0th data series only: */
     317            const QQueue<ULONG> *data = m_pSubMetric->data(0);
     318            if (data && !data->isEmpty())
     319            {
     320                QPainterPath dataPath;
     321                dataPath.moveTo(center);
     322                float fAngle = 360.f * data->back() / (float)iMaximum;
     323                dataPath.arcTo(m_pieChartRect, 90/*startAngle*/,
     324                               -1 * fAngle /*sweepLength*/);
     325                painter.setBrush(pieGradient);
     326                painter.drawPath(dataPath);
     327            }
     328        }
     329    }
     330
     331
    243332}
    244333
     
    250339    : m_strName(strName)
    251340    , m_strUnit(strUnit)
     341    , m_iMaximum(0)
    252342    , m_iMaximumQueueSize(iMaximumQueueSize)
    253343    , m_fRequiresGuestAdditions(false)
    254344{
    255345    if (isPercentage())
    256         m_fMaximum = 100.f;
     346        m_iMaximum = 100;
    257347}
    258348
     
    267357}
    268358
    269 void UISubMetric::setMaximum(float fMaximum)
    270 {
    271     m_fMaximum = fMaximum;
    272 }
    273 
    274 float UISubMetric::maximum() const
    275 {
    276     return m_fMaximum;
    277 }
    278 
    279 void UISubMetric::setMinimum(float fMinimum)
    280 {
    281     m_fMinimum = fMinimum;
    282 }
    283 
    284 float UISubMetric::minimum() const
    285 {
    286     return m_fMinimum;
    287 }
    288 
    289 void UISubMetric::setAverage(float fAverage)
    290 {
    291     m_fAverage = fAverage;
    292 }
    293 
    294 float UISubMetric::average() const
    295 {
    296     return m_fAverage;
     359void UISubMetric::setMaximum(ULONG iMaximum)
     360{
     361    m_iMaximum = iMaximum;
     362}
     363
     364ULONG UISubMetric::maximum() const
     365{
     366    return m_iMaximum;
    297367}
    298368
     
    307377}
    308378
    309 void UISubMetric::addData(ULONG fData)
    310 {
    311     m_data.enqueue(fData);
    312     if (m_data.size() > iMaximumQueueSize)
    313         m_data.dequeue();
    314 }
    315 
    316 const QQueue<ULONG> &UISubMetric::data() const
    317 {
    318     return m_data;
     379void UISubMetric::addData(int iDataSeriesIndex, ULONG fData)
     380{
     381    if (iDataSeriesIndex >= 2)
     382        return;
     383    m_data[iDataSeriesIndex].enqueue(fData);
     384    if (m_data[iDataSeriesIndex].size() > iMaximumQueueSize)
     385        m_data[iDataSeriesIndex].dequeue();
     386}
     387
     388const QQueue<ULONG> *UISubMetric::data(int iDataSeriesIndex) const
     389{
     390    if (iDataSeriesIndex >= 2)
     391        return 0;
     392    return &m_data[iDataSeriesIndex];
    319393}
    320394
     
    347421    , m_strCPUMetricName("CPU Load")
    348422    , m_strRAMMetricName("RAM Usage")
     423    , m_strDiskMetricName("Disk Usage")
     424    , m_strNetMetricName("Net")
    349425{
    350426    if (!m_console.isNull())
     
    377453    }
    378454
     455    QStringList chartOder;
     456    chartOder << m_strCPUMetricName << m_strRAMMetricName << m_strDiskMetricName << m_strNetMetricName;
    379457    int iRow = 0;
    380     for (QMap<QString, UISubMetric>::const_iterator iterator =  m_subMetrics.begin();
    381          iterator != m_subMetrics.end(); ++iterator)
    382     {
     458    foreach (const QString &strMetricName, chartOder)
     459    {
     460        if (!m_subMetrics.contains(strMetricName))
     461            continue;
    383462        QLabel *pLabel = new QLabel;
     463        pLabel->setAlignment(Qt::AlignLeft | Qt::AlignTop);
    384464        m_pMainLayout->addWidget(pLabel, iRow, 0);
    385         m_infoLabels.insert(iterator.key(), pLabel);
    386 
    387         UIChart *pChart = new UIChart(this, &(iterator.value()));
    388         m_charts.insert(iterator.key(), pChart);
     465        m_infoLabels.insert(strMetricName, pLabel);
     466
     467        UIChart *pChart = new UIChart(this, &(m_subMetrics[strMetricName]));
     468        m_charts.insert(strMetricName, pChart);
    389469        pChart->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    390470        m_pMainLayout->addWidget(pChart, iRow, 1);
     
    392472    }
    393473
     474    /* Configure charts: */
     475    if (m_charts.contains(m_strNetMetricName) && m_charts[m_strNetMetricName])
     476    {
     477        m_charts[m_strNetMetricName]->setDrawPieChart(false);
     478        m_charts[m_strNetMetricName]->setUseGradientLineColor(false);
     479    }
    394480    QWidget *bottomSpacerWidget = new QWidget(this);
    395481    bottomSpacerWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
     
    430516    quint64 iTotalRAM = 0;
    431517    quint64 iFreeRAM = 0;
     518    ULONG iReceiveRate = 0;
     519    ULONG  iTransmitRate = 0;
    432520
    433521    for (int i = 0; i < aReturnNames.size(); ++i)
     
    435523        if (aReturnDataLengths[i] == 0)
    436524            continue;
    437 
    438         float fData = 0;
    439         if (aReturnScales[i] == 1)
    440             fData = returnData[aReturnDataIndices[i] + aReturnDataLengths[i] - 1];
    441         else
    442             fData = returnData[aReturnDataIndices[i] + aReturnDataLengths[i] - 1] / (float)aReturnScales[i];
    443 
    444         if (aReturnNames[i].contains("RAM", Qt::CaseInsensitive))
     525        if (aReturnNames[i].contains("Disk"), Qt::CaseInsensitive)
     526            printf("%f\n", 22.2);
     527        /* Read the last of the return data disregarding the rest since we are caching the data in GUI side: */
     528        float fData = returnData[aReturnDataIndices[i] + aReturnDataLengths[i] - 1] / (float)aReturnScales[i];
     529        if (aReturnNames[i].contains("RAM", Qt::CaseInsensitive) && !aReturnNames[i].contains(":"))
    445530        {
    446531            if (aReturnNames[i].contains("Total", Qt::CaseInsensitive))
    447             {
    448                 if (aReturnNames[i].contains(":"))
    449                     continue;
    450                 else
    451                 {
    452                     iTotalRAM = (quint64)fData;
    453                     continue;
    454                 }
    455             }
     532                iTotalRAM = (quint64)fData;
    456533            if (aReturnNames[i].contains("Free", Qt::CaseInsensitive))
    457             {
    458                 if (aReturnNames[i].contains(":"))
    459                     continue;
    460                 else
    461                 {
    462                     iFreeRAM = (quint64)fData;
    463                     continue;
    464                 }
    465 
    466             }
    467         }
    468     }
    469 
     534                iFreeRAM = (quint64)fData;
     535        }
     536        else if (aReturnNames[i].contains("Net/Rate", Qt::CaseInsensitive) && !aReturnNames[i].contains(":"))
     537        {
     538            if (aReturnNames[i].contains("Rx", Qt::CaseInsensitive))
     539                iReceiveRate = fData;
     540            if (aReturnNames[i].contains("Tx", Qt::CaseInsensitive))
     541                iTransmitRate = fData;
     542        }
     543    }
     544
     545    (void)iReceiveRate;
     546    (void)iTransmitRate;
    470547    /* Update the CPU load chart with values we get from IMachineDebugger::getCPULoad(..): */
    471548    if (m_subMetrics.contains(m_strCPUMetricName))
    472549    {
    473         UISubMetric &CPUMetric = m_subMetrics[m_strCPUMetricName];
    474550        ULONG aPctExecuting;
    475551        ULONG aPctHalted;
    476552        ULONG aPctOther;
    477553        m_machineDebugger.GetCPULoad(0x7fffffff, aPctExecuting, aPctHalted, aPctOther);
    478         CPUMetric.addData(aPctExecuting);
    479         QList<UIChart*> charts = m_charts.values(m_strCPUMetricName);
    480 
    481         if (m_infoLabels.contains(m_strCPUMetricName) && m_infoLabels[m_strCPUMetricName])
    482         {
    483             if (m_infoLabels[m_strCPUMetricName]->isEnabled())
    484             {
    485                 QString strInfo = QString("%1\n%2%3").arg("CPU Load").arg(QString::number(aPctExecuting)).arg("%");
    486                 m_infoLabels[m_strCPUMetricName]->setText(strInfo);
    487             }
    488             else
    489             {
    490                 QString strInfo = QString("%1\n%2%3").arg("CPU Load").arg("--").arg("%");
    491                 m_infoLabels[m_strCPUMetricName]->setText(strInfo);
    492             }
    493         }
    494         if (m_charts.contains(m_strCPUMetricName))
    495             m_charts[m_strCPUMetricName]->update();
     554        updateCPUGraphsAndMetric(aPctExecuting);
    496555    }
    497556
    498557    if (m_subMetrics.contains(m_strRAMMetricName))
    499     {
    500         UISubMetric &RAMMetric = m_subMetrics[m_strRAMMetricName];
    501         RAMMetric.setMaximum(iTotalRAM);
    502         RAMMetric.addData(iTotalRAM - iFreeRAM);
    503 
    504         if (m_infoLabels.contains(m_strRAMMetricName)  && m_infoLabels[m_strRAMMetricName])
    505         {
    506             if (m_infoLabels[m_strRAMMetricName]->isEnabled())
    507             {
    508                 QString strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("RAM Usage").arg("Total").arg(uiCommon().formatSize(_1K * iTotalRAM)).arg("Free:").arg(uiCommon().formatSize(_1K * (iFreeRAM))).arg("Used:").arg(uiCommon().formatSize(_1K * (iTotalRAM - iFreeRAM)));
    509                 m_infoLabels[m_strRAMMetricName]->setText(strInfo);
    510             }
    511             else
    512             {
    513                 QString strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("RAM Usage").arg("Total").arg("---").arg("Free").arg("---").arg("Used").arg("---");
    514                 m_infoLabels[m_strRAMMetricName]->setText(strInfo);
    515             }
    516         }
    517         if (m_charts.contains(m_strRAMMetricName))
    518         {
    519             m_charts[m_strRAMMetricName]->update();
    520         }
    521     }
     558        updateRAMGraphsAndMetric(iTotalRAM, iFreeRAM);
     559    if (m_subMetrics.contains(m_strNetMetricName))
     560        updateNewGraphsAndMetric(iReceiveRate, iTransmitRate);
     561
    522562}
    523563
     
    541581    // m_nameList << "Guest/RAM/Usage*";
    542582    m_nameList << "Guest/RAM/Usage*";
    543     // m_nameList << "Disk*";
    544 
    545     m_nameList << "*";
    546       m_objectList = QVector<CUnknown>(m_nameList.size(), CUnknown());
     583    m_nameList << "Net/Rate*";
     584
     585
     586    m_objectList = QVector<CUnknown>(m_nameList.size(), CUnknown());
    547587    m_performanceMonitor.SetupMetrics(m_nameList, m_objectList, iPeriod, iMetricSetupCount);
    548588    {
     
    555595                if (strName.contains("RAM", Qt::CaseInsensitive) && strName.contains("Free", Qt::CaseInsensitive))
    556596                {
    557                     QString strRAMMetricName(m_strRAMMetricName);
    558                     UISubMetric newMetric(strRAMMetricName, metrics[i].GetUnit(), iMaximumQueueSize);
     597                    UISubMetric newMetric(m_strRAMMetricName, metrics[i].GetUnit(), iMaximumQueueSize);
    559598                    newMetric.setRequiresGuestAdditions(true);
    560                     m_subMetrics.insert(strRAMMetricName, newMetric);
     599                    m_subMetrics.insert(m_strRAMMetricName, newMetric);
     600                }
     601                else if (strName.contains("Net", Qt::CaseInsensitive))
     602                {
     603                    UISubMetric newMetric(m_strNetMetricName, metrics[i].GetUnit(), iMaximumQueueSize);
     604                    newMetric.setRequiresGuestAdditions(true);
     605                    m_subMetrics.insert(m_strNetMetricName, newMetric);
    561606                }
    562607            }
     
    604649    }
    605650}
     651
     652void UIPerformanceMonitor::updateCPUGraphsAndMetric(ULONG iLoadPercentage)
     653{
     654    UISubMetric &CPUMetric = m_subMetrics[m_strCPUMetricName];
     655    CPUMetric.addData(0, iLoadPercentage);
     656    if (m_infoLabels.contains(m_strCPUMetricName) && m_infoLabels[m_strCPUMetricName])
     657    {
     658        QString strInfo;
     659        if (m_infoLabels[m_strCPUMetricName]->isEnabled())
     660            strInfo = QString("%1\n%2%3").arg("CPU Load").arg(QString::number(iLoadPercentage)).arg("%");
     661        else
     662            strInfo = QString("%1\n%2%3").arg("CPU Load").arg("--").arg("%");
     663        m_infoLabels[m_strCPUMetricName]->setText(strInfo);
     664    }
     665    if (m_charts.contains(m_strCPUMetricName))
     666        m_charts[m_strCPUMetricName]->update();
     667}
     668
     669void UIPerformanceMonitor::updateRAMGraphsAndMetric(quint64 iTotalRAM, quint64 iFreeRAM)
     670{
     671    UISubMetric &RAMMetric = m_subMetrics[m_strRAMMetricName];
     672    RAMMetric.setMaximum(iTotalRAM);
     673    RAMMetric.addData(0, iTotalRAM - iFreeRAM);
     674    if (m_infoLabels.contains(m_strRAMMetricName)  && m_infoLabels[m_strRAMMetricName])
     675    {
     676        QString strInfo;
     677        if (m_infoLabels[m_strRAMMetricName]->isEnabled())
     678            strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("RAM Usage").arg("Total").arg(uiCommon().formatSize(_1K * iTotalRAM))
     679                .arg("Free:").arg(uiCommon().formatSize(_1K * (iFreeRAM)))
     680                .arg("Used:").arg(uiCommon().formatSize(_1K * (iTotalRAM - iFreeRAM)));
     681        else
     682            strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("RAM Usage").arg("Total").arg("---").arg("Free").arg("---").arg("Used").arg("---");
     683        m_infoLabels[m_strRAMMetricName]->setText(strInfo);
     684    }
     685    if (m_charts.contains(m_strRAMMetricName))
     686        m_charts[m_strRAMMetricName]->update();
     687}
     688
     689void UIPerformanceMonitor::updateNewGraphsAndMetric(ULONG iReceiveRate, ULONG iTransmitRate)
     690{
     691   UISubMetric &NetMetric = m_subMetrics[m_strNetMetricName];
     692
     693   NetMetric.addData(0, iReceiveRate);
     694   NetMetric.addData(1, iTransmitRate);
     695
     696   ULONG iMaximum = qMax(NetMetric.maximum(), (ULONG)qMax(iReceiveRate, iTransmitRate));
     697   NetMetric.setMaximum(iMaximum);
     698
     699    if (m_infoLabels.contains(m_strNetMetricName)  && m_infoLabels[m_strNetMetricName])
     700    {
     701        QString strInfo;
     702        if (m_infoLabels[m_strNetMetricName]->isEnabled())
     703            strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("Network").arg("Receive").arg(uiCommon().formatSize((quint64)iReceiveRate))
     704                .arg("Transmit:").arg(uiCommon().formatSize((quint64)iTransmitRate))
     705                .arg("Maximum:").arg(uiCommon().formatSize((quint64)iMaximum));
     706        else
     707            strInfo = QString("%1\n%2: %3\n%4: %5\n%6: %7").arg("Network").arg("Receieve").arg("---").arg("Transmit").arg("---");
     708        m_infoLabels[m_strNetMetricName]->setText(strInfo);
     709    }
     710   if (m_charts.contains(m_strNetMetricName))
     711       m_charts[m_strNetMetricName]->update();
     712
     713}
     714
    606715#include "UIPerformanceMonitor.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIPerformanceMonitor.h

    r80162 r80187  
    5454    const QString &name() const;
    5555
    56     void setMaximum(float fMaximum);
    57     float maximum() const;
    58 
    59     void setMinimum(float fMinimum);
    60     float minimum() const;
    61 
    62     void setAverage(float fAverage);
    63     float average() const;
     56    void setMaximum(ULONG iMaximum);
     57    ULONG maximum() const;
    6458
    6559    void setUnit(QString strUnit);
    6660    const QString &unit() const;
    6761
    68     void addData(ULONG fData);
    69     const QQueue<ULONG> &data() const;
     62    void addData(int iDataSeriesIndex, ULONG fData);
     63    const QQueue<ULONG> *data(int iDataSeriesIndex) const;
    7064
    7165    bool isPercentage() const;
     
    7872    QString m_strName;
    7973    QString m_strUnit;
    80     float m_fMaximum;
    81     float m_fMinimum;
    82     float m_fAverage;
    83     QQueue<ULONG> m_data;
     74    ULONG m_iMaximum;
     75    QQueue<ULONG> m_data[2];
    8476    int m_iMaximumQueueSize;
    8577    bool m_fRequiresGuestAdditions;
     
    110102    bool guestAdditionsAvailable(int iMinimumMajorVersion);
    111103    void enableDisableGuestAdditionDependedWidgets(bool fEnable);
     104    void updateCPUGraphsAndMetric(ULONG iLoadPercentage);
     105    void updateRAMGraphsAndMetric(quint64 iTotalRAM, quint64 iFreeRAM);
     106    void updateNewGraphsAndMetric(ULONG iReceiveRate, ULONG iTransmitRate);
     107
    112108    bool m_fGuestAdditionsAvailable;
    113109    /** Holds the machine instance. */
     
    132128    QString m_strCPUMetricName;
    133129    QString m_strRAMMetricName;
    134 
     130    QString m_strDiskMetricName;
     131    QString m_strNetMetricName;
    135132};
    136133
Note: See TracChangeset for help on using the changeset viewer.

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