VirtualBox

Changeset 83469 in vbox


Ignore:
Timestamp:
Mar 27, 2020 2:44:54 PM (5 years ago)
Author:
vboxsync
Message:

FE/Qt: bugref:9686. Checking column visibility before making queries thus possibly saving some cycles.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource
Files:
2 edited

Legend:

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

    r83468 r83469  
    132132    UIResourceMonitorProxyModel(QObject *parent = 0);
    133133    void dataUpdate();
    134     void setColumnVisible(const QMap<int, bool>& columnVisible);
     134    void reFilter();
    135135
    136136protected:
     
    140140
    141141private:
    142 
    143     QMap<int, bool> m_columnVisible;
    144142
    145143};
     
    165163    QVariant headerData(int section, Qt::Orientation orientation, int role) const;
    166164    void setColumnCaptions(const QVector<QString>& captions);
     165    void setColumnVisible(const QMap<int, bool>& columnVisible);
     166    bool columnVisible(int iColumnId) const;
    167167
    168168private slots:
     
    190190    /** @} */
    191191    CPerformanceCollector m_performanceMonitor;
     192    QMap<int, bool> m_columnVisible;
    192193
    193194};
     
    332333}
    333334
    334 bool UIResourceMonitorProxyModel::filterAcceptsColumn(int iSourceColumn, const QModelIndex &sourceParent) const
    335 {
    336     Q_UNUSED(sourceParent);
    337     return m_columnVisible.value(iSourceColumn, true);
    338 }
    339 
    340 void UIResourceMonitorProxyModel::setColumnVisible(const QMap<int, bool>& columnVisible)
     335void UIResourceMonitorProxyModel::reFilter()
    341336{
    342337    emit layoutAboutToBeChanged();
    343     m_columnVisible = columnVisible;
    344338    invalidateFilter();
    345339    emit layoutChanged();
     340}
     341
     342
     343bool UIResourceMonitorProxyModel::filterAcceptsColumn(int iSourceColumn, const QModelIndex &sourceParent) const
     344{
     345    Q_UNUSED(sourceParent);
     346    UIResourceMonitorModel* pModel = qobject_cast<UIResourceMonitorModel*>(sourceModel());
     347    if (!pModel)
     348        return true;
     349    return pModel->columnVisible(iSourceColumn);
    346350}
    347351
     
    495499    ULONG aPctHalted;
    496500    ULONG aPctVMM;
     501
     502    bool fRAMColumns = columnVisible(VMResouceMonitorColumn_RAMUsedAndTotal)
     503        || columnVisible(VMResouceMonitorColumn_RAMUsedPercentage);
     504    bool fCPUColumns = columnVisible(VMResouceMonitorColumn_CPUVMMLoad) || columnVisible(VMResouceMonitorColumn_CPUGuestLoad);
     505    bool fNetworkColumns = columnVisible(VMResouceMonitorColumn_NetworkUpRate)
     506        || columnVisible(VMResouceMonitorColumn_NetworkDownRate)
     507        || columnVisible(VMResouceMonitorColumn_NetworkUpTotal)
     508        || columnVisible(VMResouceMonitorColumn_NetworkDownTotal);
     509    bool fIOColumns = columnVisible(VMResouceMonitorColumn_DiskIOReadRate)
     510        || columnVisible(VMResouceMonitorColumn_DiskIOWriteRate)
     511        || columnVisible(VMResouceMonitorColumn_DiskIOReadTotal)
     512        || columnVisible(VMResouceMonitorColumn_DiskIOWriteTotal);
     513    bool fVMExitColumn = columnVisible(VMResouceMonitorColumn_VMExits);
     514
    497515    /* RAM usage: */
    498     if (!m_performanceMonitor.isNull())
     516    if (!m_performanceMonitor.isNull() && fRAMColumns)
    499517        queryRAMLoad();
    500518
     
    504522        {
    505523            /* CPU Load: */
    506             m_itemList[i].m_comDebugger.GetCPULoad(0x7fffffff, aPctExecuting, aPctHalted, aPctVMM);
    507             m_itemList[i].m_uCPUGuestLoad = aPctExecuting;
    508             m_itemList[i].m_uCPUVMMLoad = aPctVMM;
     524            if (fCPUColumns)
     525            {
     526                m_itemList[i].m_comDebugger.GetCPULoad(0x7fffffff, aPctExecuting, aPctHalted, aPctVMM);
     527                m_itemList[i].m_uCPUGuestLoad = aPctExecuting;
     528                m_itemList[i].m_uCPUVMMLoad = aPctVMM;
     529            }
    509530
    510531            /* Network rate: */
    511             quint64 uPrevDownTotal = m_itemList[i].m_uNetworkDownTotal;
    512             quint64 uPrevUpTotal = m_itemList[i].m_uNetworkUpTotal;
    513             UIMonitorCommon::getNetworkLoad(m_itemList[i].m_comDebugger,
    514                                             m_itemList[i].m_uNetworkDownTotal, m_itemList[i].m_uNetworkUpTotal);
    515             m_itemList[i].m_uNetworkDownRate = m_itemList[i].m_uNetworkDownTotal - uPrevDownTotal;
    516             m_itemList[i].m_uNetworkUpRate = m_itemList[i].m_uNetworkUpTotal - uPrevUpTotal;
     532            if (fNetworkColumns)
     533            {
     534                quint64 uPrevDownTotal = m_itemList[i].m_uNetworkDownTotal;
     535                quint64 uPrevUpTotal = m_itemList[i].m_uNetworkUpTotal;
     536                UIMonitorCommon::getNetworkLoad(m_itemList[i].m_comDebugger,
     537                                                m_itemList[i].m_uNetworkDownTotal, m_itemList[i].m_uNetworkUpTotal);
     538                m_itemList[i].m_uNetworkDownRate = m_itemList[i].m_uNetworkDownTotal - uPrevDownTotal;
     539                m_itemList[i].m_uNetworkUpRate = m_itemList[i].m_uNetworkUpTotal - uPrevUpTotal;
     540            }
    517541
    518542            /* IO rate: */
    519             quint64 uPrevWriteTotal = m_itemList[i].m_uDiskWriteTotal;
    520             quint64 uPrevReadTotal = m_itemList[i].m_uDiskReadTotal;
    521             UIMonitorCommon::getDiskLoad(m_itemList[i].m_comDebugger,
    522                                          m_itemList[i].m_uDiskWriteTotal, m_itemList[i].m_uDiskReadTotal);
    523             m_itemList[i].m_uDiskWriteRate = m_itemList[i].m_uDiskWriteTotal - uPrevWriteTotal;
    524             m_itemList[i].m_uDiskReadRate = m_itemList[i].m_uDiskReadTotal - uPrevReadTotal;
     543            if (fIOColumns)
     544            {
     545                quint64 uPrevWriteTotal = m_itemList[i].m_uDiskWriteTotal;
     546                quint64 uPrevReadTotal = m_itemList[i].m_uDiskReadTotal;
     547                UIMonitorCommon::getDiskLoad(m_itemList[i].m_comDebugger,
     548                                             m_itemList[i].m_uDiskWriteTotal, m_itemList[i].m_uDiskReadTotal);
     549                m_itemList[i].m_uDiskWriteRate = m_itemList[i].m_uDiskWriteTotal - uPrevWriteTotal;
     550                m_itemList[i].m_uDiskReadRate = m_itemList[i].m_uDiskReadTotal - uPrevReadTotal;
     551            }
    525552
    526553           /* VM Exits: */
    527             quint64 uPrevVMExitsTotal = m_itemList[i].m_uVMExitTotal;
    528             UIMonitorCommon::getVMMExitCount(m_itemList[i].m_comDebugger, m_itemList[i].m_uVMExitTotal);
    529             m_itemList[i].m_uVMExitRate = m_itemList[i].m_uVMExitTotal - uPrevVMExitsTotal;
     554           if (fVMExitColumn)
     555           {
     556               quint64 uPrevVMExitsTotal = m_itemList[i].m_uVMExitTotal;
     557               UIMonitorCommon::getVMMExitCount(m_itemList[i].m_comDebugger, m_itemList[i].m_uVMExitTotal);
     558               m_itemList[i].m_uVMExitRate = m_itemList[i].m_uVMExitTotal - uPrevVMExitsTotal;
     559           }
    530560        }
    531561    }
     
    615645}
    616646
     647void UIResourceMonitorModel::setColumnVisible(const QMap<int, bool>& columnVisible)
     648{
     649    m_columnVisible = columnVisible;
     650}
     651
     652bool UIResourceMonitorModel::columnVisible(int iColumnId) const
     653{
     654    return m_columnVisible.value(iColumnId, true);
     655}
     656
    617657
    618658/*********************************************************************************************************************************
     
    628668    , m_pToolBar(0)
    629669    , m_pTableView(0)
     670    , m_pProxyModel(0)
     671    , m_pModel(0)
    630672    , m_pColumnSelectionMenu(0)
    631673{
     
    688730    retranslateUi();
    689731    prepareActions();
     732    updateModelColumVisibilityCache();
    690733}
    691734
     
    737780        connect(m_pModel, &UIResourceMonitorModel::sigDataUpdate, this, &UIResourceMonitorWidget::sltHandleDataUpdate);
    738781
    739         m_pProxyModel->setColumnVisible(m_columnVisible);
     782        m_pModel->setColumnVisible(m_columnVisible);
    740783    }
    741784}
     
    838881    else
    839882        m_pColumnSelectionMenu->hide();
    840 
    841883    update();
    842 
    843     // QPoint point(0, 0);
    844     // if (!m_pTableView)
    845     //     return;
    846     // if (fChecked)
    847     //     m_pMenu->exec(m_pTableView->mapToGlobal(point));
    848     // else
    849     //     m_pMenu->hide();
    850884}
    851885
     
    869903        return;
    870904    m_columnVisible[iColumnId] = fVisible;
     905    updateModelColumVisibilityCache();
     906}
     907
     908void UIResourceMonitorWidget::updateModelColumVisibilityCache()
     909{
     910    if (m_pModel)
     911        m_pModel->setColumnVisible(m_columnVisible);
    871912    if (m_pProxyModel)
    872         m_pProxyModel->setColumnVisible(m_columnVisible);
     913        m_pProxyModel->reFilter();
    873914}
    874915
  • trunk/src/VBox/Frontends/VirtualBox/src/monitor/resource/UIResourceMonitor.h

    r83466 r83469  
    8080    void setColumnVisible(int iColumnId, bool fVisible);
    8181    bool columnVisible(int iColumnId) const;
     82    void updateModelColumVisibilityCache();
    8283
    8384    /** @name Prepare/cleanup cascade.
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