Changeset 104943 in vbox
- Timestamp:
- Jun 17, 2024 3:56:46 PM (10 months ago)
- svn:sync-xref-src-repo-rev:
- 163548
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/activity/overview
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.cpp
r104924 r104943 27 27 28 28 /* Qt includes: */ 29 #include <QApplication> 29 30 #include <QHeaderView> 30 31 #include <QTimer> … … 34 35 #include "UIExtraDataDefs.h" 35 36 #include "UIGlobalSession.h" 37 #include "UITranslator.h" 36 38 #include "UIVirtualBoxEventHandler.h" 37 39 #include "UIVMActivityOverviewModelView.h" … … 65 67 void resetDebugger(); 66 68 void updateCells(); 69 bool isWithGuestAdditions(); 70 void setTotalRAM(quint64 uTotalRAM); 71 void setFreeRAM(quint64 uFreeRAM); 67 72 68 73 private: … … 72 77 CSession m_comSession; 73 78 CGuest m_comGuest; 79 80 quint64 m_uTotalRAM; 81 quint64 m_uFreeRAM; 74 82 }; 75 83 … … 78 86 : UIActivityOverviewAccessibleRow(pTableView, uMachineId, strMachineName) 79 87 , m_enmMachineState(enmMachineState) 88 , m_uTotalRAM(0) 89 , m_uFreeRAM(0) 80 90 { 81 91 if (m_enmMachineState == KMachineState_Running) … … 86 96 void UIActivityOverviewAccessibleRowLocal::updateCells() 87 97 { 88 // if (m_cells.contains((int) VMActivityOverviewColumn_Name)) 89 // { 90 // m_cells[(int)VMActivityOverviewColumn_Name]->setText(m_strMachineName); 91 // } 98 /* CPU Load: */ 99 ULONG aPctHalted; 100 ULONG uCPUGuestLoad; 101 ULONG uCPUVMMLoad; 102 m_comDebugger.GetCPULoad(0x7fffffff, uCPUGuestLoad, aPctHalted, uCPUVMMLoad); 103 104 if (m_cells.value(VMActivityOverviewColumn_CPUVMMLoad, 0)) 105 m_cells[VMActivityOverviewColumn_CPUVMMLoad]->setText(QString("%1%").arg(QString::number(uCPUVMMLoad))); 106 if (m_cells.value(VMActivityOverviewColumn_CPUGuestLoad, 0)) 107 m_cells[VMActivityOverviewColumn_CPUGuestLoad]->setText(QString("%1%").arg(QString::number(uCPUGuestLoad))); 108 109 /* RAM Utilization: */ 110 QString strRAMUsage; 111 QString strRAMPercentage; 112 int iDecimalCount = 2; 113 quint64 uUsedRAM = m_uTotalRAM - m_uFreeRAM; 114 float m_fRAMUsagePercentage = 0; 115 116 if (m_uTotalRAM != 0) 117 m_fRAMUsagePercentage = 100.f * (uUsedRAM / (float)m_uTotalRAM); 118 119 if (isWithGuestAdditions()) 120 { 121 strRAMUsage = 122 QString("%1/%2").arg(UITranslator::formatSize(_1K * uUsedRAM, iDecimalCount)). 123 arg(UITranslator::formatSize(_1K * m_uTotalRAM, iDecimalCount)); 124 strRAMPercentage = 125 QString("%1%").arg(QString::number(m_fRAMUsagePercentage, 'f', 2)); 126 } 127 else 128 { 129 strRAMPercentage = QApplication::translate("UIVMActivityOverviewWidget", "N/A"); 130 strRAMUsage = QApplication::translate("UIVMActivityOverviewWidget", "N/A"); 131 } 132 133 if (m_cells.value(VMActivityOverviewColumn_RAMUsedAndTotal, 0)) 134 m_cells[VMActivityOverviewColumn_RAMUsedAndTotal]->setText(strRAMUsage); 135 if (m_cells.value(VMActivityOverviewColumn_RAMUsedPercentage, 0)) 136 m_cells[VMActivityOverviewColumn_RAMUsedPercentage]->setText(strRAMPercentage); 92 137 } 93 138 … … 134 179 } 135 180 181 bool UIActivityOverviewAccessibleRowLocal::isWithGuestAdditions() 182 { 183 if (m_comGuest.isNull()) 184 return false; 185 return m_comGuest.GetAdditionsStatus(m_comGuest.GetAdditionsRunLevel()); 186 } 187 188 void UIActivityOverviewAccessibleRowLocal::setTotalRAM(quint64 uTotalRAM) 189 { 190 m_uTotalRAM = uTotalRAM; 191 } 192 193 void UIActivityOverviewAccessibleRowLocal::setFreeRAM(quint64 uFreeRAM) 194 { 195 m_uFreeRAM = uFreeRAM; 196 } 136 197 137 198 /********************************************************************************************************************************* … … 180 241 } 181 242 243 void UIActivityOverviewAccessibleModel::setupPerformanceCollector() 244 { 245 m_nameList.clear(); 246 m_objectList.clear(); 247 /* Initialize and configure CPerformanceCollector: */ 248 const ULONG iPeriod = 1; 249 const int iMetricSetupCount = 1; 250 if (m_performanceCollector.isNull()) 251 m_performanceCollector = gpGlobalSession->virtualBox().GetPerformanceCollector(); 252 for (int i = 0; i < m_rows.size(); ++i) 253 m_nameList << "Guest/RAM/Usage*"; 254 /* This is for the host: */ 255 m_nameList << "CPU*"; 256 m_nameList << "FS*"; 257 m_objectList = QVector<CUnknown>(m_nameList.size(), CUnknown()); 258 m_performanceCollector.SetupMetrics(m_nameList, m_objectList, iPeriod, iMetricSetupCount); 259 } 260 261 void UIActivityOverviewAccessibleModel::clearData() 262 { 263 /* We have a request to detach COM stuff, 264 * first of all we are removing all the items, 265 * this will detach COM wrappers implicitly: */ 266 qDeleteAll(m_rows); 267 m_rows.clear(); 268 /* Detaching perf. collector finally, 269 * please do not use it after all: */ 270 m_performanceCollector.detach(); 271 } 272 182 273 UIActivityOverviewAccessibleModel::~UIActivityOverviewAccessibleModel() 183 274 { 184 qDeleteAll(m_rows);275 clearData(); 185 276 } 186 277 … … 248 339 addRow(comMachine.GetId(), comMachine.GetName(), comMachine.GetState()); 249 340 } 341 setupPerformanceCollector(); 250 342 } 251 343 … … 303 395 304 396 /* Use IPerformanceCollector to update VM RAM usage and Host CPU and file IO stats: */ 305 //queryPerformanceCollector();397 queryPerformanceCollector(); 306 398 307 399 for (int i = 0; i < m_rows.size(); ++i) … … 345 437 } 346 438 439 void UIActivityOverviewAccessibleModel::queryPerformanceCollector() 440 { 441 QVector<QString> aReturnNames; 442 QVector<CUnknown> aReturnObjects; 443 QVector<QString> aReturnUnits; 444 QVector<ULONG> aReturnScales; 445 QVector<ULONG> aReturnSequenceNumbers; 446 QVector<ULONG> aReturnDataIndices; 447 QVector<ULONG> aReturnDataLengths; 448 449 QVector<LONG> returnData = m_performanceCollector.QueryMetricsData(m_nameList, 450 m_objectList, 451 aReturnNames, 452 aReturnObjects, 453 aReturnUnits, 454 aReturnScales, 455 aReturnSequenceNumbers, 456 aReturnDataIndices, 457 aReturnDataLengths); 458 /* Parse the result we get from CPerformanceCollector to get respective values: */ 459 for (int i = 0; i < aReturnNames.size(); ++i) 460 { 461 if (aReturnDataLengths[i] == 0) 462 continue; 463 /* Read the last of the return data disregarding the rest since we are caching the data in GUI side: */ 464 float fData = returnData[aReturnDataIndices[i] + aReturnDataLengths[i] - 1] / (float)aReturnScales[i]; 465 if (aReturnNames[i].contains("RAM", Qt::CaseInsensitive) && !aReturnNames[i].contains(":")) 466 { 467 if (aReturnNames[i].contains("Total", Qt::CaseInsensitive) || aReturnNames[i].contains("Free", Qt::CaseInsensitive)) 468 { 469 { 470 CMachine comMachine = (CMachine)aReturnObjects[i]; 471 if (comMachine.isNull()) 472 continue; 473 int iIndex = itemIndex(comMachine.GetId()); 474 if (iIndex == -1 || iIndex >= m_rows.size() || !m_rows[iIndex]) 475 continue; 476 477 UIActivityOverviewAccessibleRowLocal *pItem = qobject_cast<UIActivityOverviewAccessibleRowLocal*>(m_rows[iIndex]); 478 if (!pItem) 479 continue; 480 if (aReturnNames[i].contains("Total", Qt::CaseInsensitive)) 481 pItem->setTotalRAM((quint64)fData); 482 else 483 pItem->setFreeRAM((quint64)fData); 484 } 485 } 486 } 487 // else if (aReturnNames[i].contains("CPU/Load/User", Qt::CaseInsensitive) && !aReturnNames[i].contains(":")) 488 // { 489 // CHost comHost = (CHost)aReturnObjects[i]; 490 // if (!comHost.isNull()) 491 // m_hostStats.m_iCPUUserLoad = fData; 492 // } 493 // else if (aReturnNames[i].contains("CPU/Load/Kernel", Qt::CaseInsensitive) && !aReturnNames[i].contains(":")) 494 // { 495 // CHost comHost = (CHost)aReturnObjects[i]; 496 // if (!comHost.isNull()) 497 // m_hostStats.m_iCPUKernelLoad = fData; 498 // } 499 // else if (aReturnNames[i].contains("CPU/MHz", Qt::CaseInsensitive) && !aReturnNames[i].contains(":")) 500 // { 501 // CHost comHost = (CHost)aReturnObjects[i]; 502 // if (!comHost.isNull()) 503 // m_hostStats.m_iCPUFreq = fData; 504 // } 505 // else if (aReturnNames[i].contains("FS", Qt::CaseInsensitive) && 506 // aReturnNames[i].contains("Total", Qt::CaseInsensitive) && 507 // !aReturnNames[i].contains(":")) 508 // { 509 // CHost comHost = (CHost)aReturnObjects[i]; 510 // if (!comHost.isNull()) 511 // m_hostStats.m_iFSTotal = _1M * fData; 512 // } 513 // else if (aReturnNames[i].contains("FS", Qt::CaseInsensitive) && 514 // aReturnNames[i].contains("Free", Qt::CaseInsensitive) && 515 // !aReturnNames[i].contains(":")) 516 // { 517 // CHost comHost = (CHost)aReturnObjects[i]; 518 // if (!comHost.isNull()) 519 // m_hostStats.m_iFSFree = _1M * fData; 520 // } 521 } 522 } 523 347 524 348 525 /********************************************************************************************************************************* … … 354 531 } 355 532 533 void UIActivityOverviewAccessibleProxyModel::dataUpdate() 534 { 535 if (sourceModel()) 536 emit dataChanged(index(0,0), index(sourceModel()->rowCount(), sourceModel()->columnCount())); 537 invalidate(); 538 } 539 356 540 357 541 /********************************************************************************************************************************* … … 428 612 void UIActivityOverviewAccessibleCell::setText(const QString &strText) 429 613 { 430 printf("%s\n", qPrintable(strText));431 614 m_strText = strText; 432 615 } -
trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewModelView.h
r104922 r104943 41 41 42 42 /* COM includes: */ 43 #include "CPerformanceMetric.h" 44 #include "CPerformanceCollector.h" 43 45 #include "KMachineState.h" 46 44 47 45 48 class QTimer; … … 72 75 73 76 UIActivityOverviewAccessibleProxyModel(QObject *parent = 0); 77 void dataUpdate(); 74 78 75 79 protected: … … 160 164 int itemIndex(const QUuid &uid); 161 165 void setShouldUpdate(bool fShouldUpdate); 166 void clearData(); 162 167 163 168 private slots: … … 172 177 void addRow(const QUuid& uMachineId, const QString& strMachineName, KMachineState enmState); 173 178 void removeRow(const QUuid& uMachineId); 179 void setupPerformanceCollector(); 180 void queryPerformanceCollector(); 174 181 QVector<UIActivityOverviewAccessibleRow*> m_rows; 175 182 QITableView *m_pTableView; … … 178 185 /** Maximum length of string length of data displayed in column. Updated in UIActivityOverviewModel::data(..). */ 179 186 mutable QMap<int, int> m_columnDataMaxLength; 187 CPerformanceCollector m_performanceCollector; 188 /** @name The following are used during UIPerformanceCollector::QueryMetricsData(..) 189 * @{ */ 190 QVector<QString> m_nameList; 191 QVector<CUnknown> m_objectList; 192 /** @} */ 180 193 181 194 }; -
trunk/src/VBox/Frontends/VirtualBox/src/activity/overview/UIVMActivityOverviewWidget.cpp
r104922 r104943 1902 1902 connect(m_pModel, &UIActivityOverviewModel::sigDataUpdate, 1903 1903 this, &UIVMActivityOverviewWidget::sltHandleDataUpdate); 1904 connect(m_pAccessibleModel, &UIActivityOverviewAccessibleModel::sigDataUpdate, 1905 this, &UIVMActivityOverviewWidget::sltHandleDataUpdate); 1904 1906 connect(m_pModel, &UIActivityOverviewModel::sigHostStatsUpdate, 1905 1907 this, &UIVMActivityOverviewWidget::sltHandleHostStatsUpdate); … … 1932 1934 m_pAccessibleTableView->setSortingEnabled(true); 1933 1935 m_pAccessibleTableView->sortByColumn(0, Qt::AscendingOrder); 1934 m_pAccessibleTableView->hide();1935 1936 1936 1937 layout()->addWidget(m_pAccessibleTableView); … … 2019 2020 if (m_pModel) 2020 2021 m_pModel->clearData(); 2022 if (m_pAccessibleModel) 2023 m_pAccessibleModel->clearData(); 2021 2024 } 2022 2025 … … 2048 2051 if (m_pProxyModel) 2049 2052 m_pProxyModel->dataUpdate(); 2053 if (m_pAccessibleProxyModel) 2054 m_pAccessibleProxyModel->dataUpdate(); 2050 2055 } 2051 2056
Note:
See TracChangeset
for help on using the changeset viewer.