VirtualBox

Ignore:
Timestamp:
Aug 25, 2019 7:35:35 AM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9510: Adding disk IO chart

Location:
trunk/src/VBox/Frontends/VirtualBox/src/runtime/information
Files:
2 edited

Legend:

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

    r80409 r80411  
    804804    , m_strRAMMetricName("RAM Usage")
    805805    , m_strDiskMetricName("Disk Usage")
    806     , m_strNetworkMetricName("NetDebugger")
     806    , m_strNetworkMetricName("Network")
     807    , m_strDiskIOMetricName("DiskIO")
    807808    , m_iTimeStep(0)
    808809{
     
    826827    foreach (UIChart *pChart, m_charts)
    827828        pChart->setXAxisLabel(QApplication::translate("UIVMInformationDialog", "Seconds"));
     829
     830    /* Translate the chart info labels: */
    828831    int iMaximum = 0;
    829832    m_strCPUInfoLabelTitle = QApplication::translate("UIVMInformationDialog", "CPU Load");
    830833    iMaximum = qMax(iMaximum, m_strCPUInfoLabelTitle.length());
    831 
    832834    m_strCPUInfoLabelGuest = QApplication::translate("UIVMInformationDialog", "Guest Load");
    833835    iMaximum = qMax(iMaximum, m_strCPUInfoLabelGuest.length());
    834836    m_strCPUInfoLabelVMM = QApplication::translate("UIVMInformationDialog", "VMM Load");
    835837    iMaximum = qMax(iMaximum, m_strCPUInfoLabelVMM.length());
    836 
    837838    m_strRAMInfoLabelTitle = QApplication::translate("UIVMInformationDialog", "RAM Usage");
    838839    iMaximum = qMax(iMaximum, m_strRAMInfoLabelTitle.length());
     
    843844    m_strRAMInfoLabelUsed = QApplication::translate("UIVMInformationDialog", "Used");
    844845    iMaximum = qMax(iMaximum, m_strRAMInfoLabelUsed.length());
    845     m_strNetworkInfoLabelTitle = QApplication::translate("UIVMInformationDialog", "Network");
     846    m_strNetworkInfoLabelTitle = QApplication::translate("UIVMInformationDialog", "Network Rate");
    846847    iMaximum = qMax(iMaximum, m_strNetworkInfoLabelTitle.length());
    847848    m_strNetworkInfoLabelReceived = QApplication::translate("UIVMInformationDialog", "Receive Rate");
     
    853854    m_strNetworkInfoLabelTransmittedTotal = QApplication::translate("UIVMInformationDialog", "Total Transmitted");
    854855    iMaximum = qMax(iMaximum, m_strNetworkInfoLabelReceivedTotal.length());
     856    m_strDiskIOInfoLabelTitle = QApplication::translate("UIVMInformationDialog", "Disk IO Rate");
     857    iMaximum = qMax(iMaximum, m_strDiskIOInfoLabelTitle.length());
     858    m_strDiskIOInfoLabelWritten = QApplication::translate("UIVMInformationDialog", "Write Rate");
     859    iMaximum = qMax(iMaximum, m_strDiskIOInfoLabelWritten.length());
     860    m_strDiskIOInfoLabelRead = QApplication::translate("UIVMInformationDialog", "Read Rate");
     861    iMaximum = qMax(iMaximum, m_strDiskIOInfoLabelRead.length());
     862    m_strDiskIOInfoLabelWrittenTotal = QApplication::translate("UIVMInformationDialog", "Total Writen");
     863    iMaximum = qMax(iMaximum, m_strDiskIOInfoLabelWrittenTotal.length());
     864    m_strDiskIOInfoLabelReadTotal = QApplication::translate("UIVMInformationDialog", "Total Read");
     865    iMaximum = qMax(iMaximum, m_strDiskIOInfoLabelReadTotal.length());
    855866
    856867
     
    892903
    893904    QStringList chartOder;
    894     chartOder << m_strCPUMetricName << m_strRAMMetricName << m_strDiskMetricName << m_strNetworkMetricName;
     905    chartOder << m_strCPUMetricName << m_strRAMMetricName <<
     906        m_strDiskMetricName << m_strNetworkMetricName << m_strDiskIOMetricName;
    895907    int iRow = 0;
    896908    foreach (const QString &strMetricName, chartOder)
     
    916928        m_charts[m_strNetworkMetricName]->setUseGradientLineColor(false);
    917929    }
    918 
     930    if (m_charts.contains(m_strDiskIOMetricName) && m_charts[m_strDiskIOMetricName])
     931    {
     932        m_charts[m_strDiskIOMetricName]->setDrawPieChart(false);
     933        m_charts[m_strDiskIOMetricName]->setUseGradientLineColor(false);
     934    }
    919935    if (m_charts.contains(m_strCPUMetricName) && m_charts[m_strCPUMetricName])
    920936        m_charts[m_strCPUMetricName]->setUseGradientLineColor(false);
     
    9921008    qulonglong uNetworkTotalReceive = 0;
    9931009    qulonglong uNetworkTotalTransmit = 0;
     1010
     1011    qulonglong uDiskIOTotalWritten = 0;
     1012    qulonglong uDiskIOTotalRead = 0;
     1013
    9941014    QVector<DebuggerMetricData> xmlData = getTotalCounterFromDegugger(m_strQueryString);
    9951015    for (QMap<QString, UISubMetric>::iterator iterator =  m_subMetrics.begin();
     
    10111031                            uNetworkTotalTransmit += data.m_counter;
    10121032                    }
    1013 
     1033                    else if (metric.name() == m_strDiskIOMetricName)
     1034                    {
     1035                        if (data.m_strName.contains("written", Qt::CaseInsensitive))
     1036                            uDiskIOTotalWritten += data.m_counter;
     1037                        else if (data.m_strName.contains("read", Qt::CaseInsensitive))
     1038                            uDiskIOTotalRead += data.m_counter;
     1039                    }
    10141040                }
    10151041            }
    1016 
    10171042        }
    10181043    }
    1019     updateNetworkDebuggerGraphsAndMetric(uNetworkTotalReceive, uNetworkTotalTransmit);
     1044    updateNetworkGraphsAndMetric(uNetworkTotalReceive, uNetworkTotalTransmit);
     1045    updateDiskIOGraphsAndMetric(uDiskIOTotalWritten, uDiskIOTotalRead);
    10201046}
    10211047
     
    10581084
    10591085    m_subMetrics.insert(m_strCPUMetricName, UISubMetric(m_strCPUMetricName, "%", iMaximumQueueSize));
    1060 
    1061     UISubMetric networkMetric(m_strNetworkMetricName, "B", iMaximumQueueSize);
    1062     QStringList networkDeviceList;
    1063     networkDeviceList << "E1k" <<"VNet" << "PCNet";
    1064     networkMetric.setDeviceTypeList(networkDeviceList);
    1065     QStringList networkMetricDataSubStringList;
    1066     networkMetricDataSubStringList << "ReceiveBytes" << "TransmitBytes";
    1067     networkMetric.setMetricDataSubString(networkMetricDataSubStringList);
    1068     m_subMetrics.insert(m_strNetworkMetricName, networkMetric);
    1069 
     1086    {
     1087
     1088        /* Network metric: */
     1089        UISubMetric networkMetric(m_strNetworkMetricName, "B", iMaximumQueueSize);
     1090        QStringList networkDeviceList;
     1091        networkDeviceList << "E1k" <<"VNet" << "PCNet";
     1092        networkMetric.setDeviceTypeList(networkDeviceList);
     1093        QStringList networkMetricDataSubStringList;
     1094        networkMetricDataSubStringList << "ReceiveBytes" << "TransmitBytes";
     1095        networkMetric.setMetricDataSubString(networkMetricDataSubStringList);
     1096        m_subMetrics.insert(m_strNetworkMetricName, networkMetric);
     1097    }
     1098
     1099    /* Disk IO metric */
     1100    {
     1101        UISubMetric diskIOMetric(m_strDiskIOMetricName, "B", iMaximumQueueSize);
     1102        QStringList diskTypeList;
     1103        diskTypeList << "LSILOGICSCSI" << "BUSLOGIC"
     1104                     << "AHCI" <<  "PIIX3IDE" << "I82078" << "LSILOGICSAS" << "MSD" << "NVME";
     1105        diskIOMetric.setDeviceTypeList(diskTypeList);
     1106        QStringList diskIODataSubStringList;
     1107        diskIODataSubStringList << "WrittenBytes" << "ReadBytes";
     1108        diskIOMetric.setMetricDataSubString(diskIODataSubStringList);
     1109        m_subMetrics.insert(m_strDiskIOMetricName, diskIOMetric);
     1110    }
    10701111    for (QMap<QString, UISubMetric>::const_iterator iterator =  m_subMetrics.begin();
    10711112         iterator != m_subMetrics.end(); ++iterator)
     
    11621203}
    11631204
    1164 void UIInformationRuntime::updateNetworkDebuggerGraphsAndMetric(qulonglong iReceiveTotal, qulonglong iTransmitTotal)
     1205void UIInformationRuntime::updateNetworkGraphsAndMetric(qulonglong iReceiveTotal, qulonglong iTransmitTotal)
    11651206{
    11661207    UISubMetric &NetMetric = m_subMetrics[m_strNetworkMetricName];
     
    11831224    {
    11841225        QString strInfo;
    1185         QString strReceiveColor;
    11861226        if (m_infoLabels[m_strNetworkMetricName]->isEnabled())
    11871227            strInfo = QString("<b>%1</b></b><br/><font color=\"%2\">%3: %4<br/>%5 %6</font><br/><font color=\"%7\">%8: %9<br/>%10 %11</font>")
     
    12011241    if (m_charts.contains(m_strNetworkMetricName))
    12021242        m_charts[m_strNetworkMetricName]->update();
    1203 
    1204 }
    1205 
     1243}
     1244
     1245void UIInformationRuntime::updateDiskIOGraphsAndMetric(qulonglong uDiskIOTotalWritten, qulonglong uDiskIOTotalRead)
     1246{
     1247    UISubMetric &NetMetric = m_subMetrics[m_strDiskIOMetricName];
     1248
     1249    qulonglong iWriteRate = uDiskIOTotalWritten - NetMetric.total(0);
     1250    qulonglong iReadRate = uDiskIOTotalRead - NetMetric.total(1);
     1251
     1252    NetMetric.setTotal(0, uDiskIOTotalWritten);
     1253    NetMetric.setTotal(1, uDiskIOTotalRead);
     1254
     1255    /* Do not set data and maximum if the timer has just started since we need to initialize totals "(t-1)" first: */
     1256    if (m_iTimeStep <= 1)
     1257        return;
     1258    NetMetric.addData(0, iWriteRate);
     1259    NetMetric.addData(1, iReadRate);
     1260    qulonglong iMaximum = qMax(NetMetric.maximum(), qMax(iWriteRate, iReadRate));
     1261    NetMetric.setMaximum(iMaximum);
     1262
     1263    if (m_infoLabels.contains(m_strDiskIOMetricName)  && m_infoLabels[m_strDiskIOMetricName])
     1264    {
     1265        QString strInfo;
     1266        if (m_infoLabels[m_strDiskIOMetricName]->isEnabled())
     1267            strInfo = QString("<b>%1</b></b><br/><font color=\"%2\">%3: %4<br/>%5 %6</font><br/><font color=\"%7\">%8: %9<br/>%10 %11</font>")
     1268                .arg(m_strDiskIOInfoLabelTitle)
     1269                .arg(dataColorString(m_strDiskIOMetricName, 0)).arg(m_strDiskIOInfoLabelWritten).arg(uiCommon().formatSize((quint64)iWriteRate, iDecimalCount))
     1270                .arg(m_strDiskIOInfoLabelWrittenTotal).arg(uiCommon().formatSize((quint64)uDiskIOTotalWritten, iDecimalCount))
     1271                .arg(dataColorString(m_strDiskIOMetricName, 1)).arg(m_strDiskIOInfoLabelRead).arg(uiCommon().formatSize((quint64)iReadRate, iDecimalCount))
     1272                .arg(m_strDiskIOInfoLabelReadTotal).arg(uiCommon().formatSize((quint64)uDiskIOTotalRead, iDecimalCount));
     1273
     1274        else
     1275            strInfo = QString("<b>%1</b><br/>%2: %3<br/>%4: %5").
     1276                arg(m_strDiskIOInfoLabelTitle)
     1277                .arg(m_strDiskIOInfoLabelWritten).arg("---")
     1278                .arg(m_strDiskIOInfoLabelRead).arg("---");
     1279        m_infoLabels[m_strDiskIOMetricName]->setText(strInfo);
     1280    }
     1281    if (m_charts.contains(m_strDiskIOMetricName))
     1282        m_charts[m_strDiskIOMetricName]->update();
     1283
     1284}
    12061285
    12071286QString UIInformationRuntime::dataColorString(const QString &strChartName, int iDataIndex)
  • trunk/src/VBox/Frontends/VirtualBox/src/runtime/information/UIInformationRuntime.h

    r80409 r80411  
    151151    void updateCPUGraphsAndMetric(ULONG iLoadPercentage, ULONG iOtherPercentage);
    152152    void updateRAMGraphsAndMetric(quint64 iTotalRAM, quint64 iFreeRAM);
    153     void updateNetworkDebuggerGraphsAndMetric(qulonglong iReceiveTotal, qulonglong iTransmitTotal);
     153    void updateNetworkGraphsAndMetric(qulonglong iReceiveTotal, qulonglong iTransmitTotal);
     154    void updateDiskIOGraphsAndMetric(qulonglong uDiskIOTotalWritten, qulonglong uDiskIOTotalRead);
    154155
    155156    QString dataColorString(const QString &strChartName, int iDataIndex);
     
    183184        QString m_strDiskMetricName;
    184185        QString m_strNetworkMetricName;
     186        QString m_strDiskIOMetricName;
    185187    /** @} */
    186188
     
    202204        QString m_strNetworkInfoLabelReceivedTotal;
    203205        QString m_strNetworkInfoLabelTransmittedTotal;
     206        /** Disk IO info label strings. */
     207        QString m_strDiskIOInfoLabelTitle;
     208        QString m_strDiskIOInfoLabelWritten;
     209        QString m_strDiskIOInfoLabelRead;
     210        QString m_strDiskIOInfoLabelWrittenTotal;
     211        QString m_strDiskIOInfoLabelReadTotal;
    204212    /** @} */
    205213    /** The following string is used while querrying CMachineDebugger. */
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