Changeset 103464 in vbox
- Timestamp:
- Feb 20, 2024 2:35:20 AM (15 months ago)
- svn:sync-xref-src-repo-rev:
- 161798
- Location:
- trunk
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/dbggui.h
r98103 r103464 69 69 DECLCALLBACKMEMBER(void, pfnAdjustRelativePos,(PDBGGUI pGui, int x, int y, unsigned cx, unsigned cy)); 70 70 /** @copydoc DBGGuiShowStatistics */ 71 DECLCALLBACKMEMBER(int, pfnShowStatistics,(PDBGGUI pGui, const char *pszFilter, const char *pszExpand ));71 DECLCALLBACKMEMBER(int, pfnShowStatistics,(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig)); 72 72 /** @copydoc DBGGuiShowCommandLine */ 73 73 DECLCALLBACKMEMBER(int, pfnShowCommandLine,(PDBGGUI pGui)); … … 152 152 * @param pszFilter Filter pattern. 153 153 * @param pszExpand Expand pattern. 154 * @param pszConfig Advanced filter configuration (min/max/regexp on 155 * sub-trees) and more. 154 156 */ 155 DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand );157 DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig); 156 158 157 159 /** -
trunk/src/VBox/Debugger/VBoxDbg.cpp
r103462 r103464 223 223 * @param pszFilter Filter pattern. 224 224 * @param pszExpand Expand pattern. 225 */ 226 DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand) 225 * @param pszConfig Advanced filter configuration (min/max/regexp on 226 * sub-trees) and more. 227 */ 228 DBGDECL(int) DBGGuiShowStatistics(PDBGGUI pGui, const char *pszFilter, const char *pszExpand, const char *pszConfig) 227 229 { 228 230 AssertReturn(pGui, VERR_INVALID_PARAMETER); 229 231 AssertMsgReturn(pGui->u32Magic == DBGGUI_MAGIC, ("u32Magic=%#x\n", pGui->u32Magic), VERR_INVALID_PARAMETER); 230 return pGui->pVBoxDbgGui->showStatistics(pszFilter, pszExpand );232 return pGui->pVBoxDbgGui->showStatistics(pszFilter, pszExpand, pszConfig); 231 233 } 232 234 -
trunk/src/VBox/Debugger/VBoxDbgGui.cpp
r103462 r103464 182 182 183 183 int 184 VBoxDbgGui::showStatistics(const char *pszFilter, const char *pszExpand )184 VBoxDbgGui::showStatistics(const char *pszFilter, const char *pszExpand, const char *pszConfig) 185 185 { 186 186 if (!m_pDbgStats) … … 189 189 pszFilter && *pszFilter ? pszFilter : "*", 190 190 pszExpand && *pszExpand ? pszExpand : NULL, 191 pszConfig && *pszConfig ? pszConfig : NULL, 191 192 2, m_pParent); 192 193 connect(m_pDbgStats, SIGNAL(destroyed(QObject *)), this, SLOT(notifyChildDestroyed(QObject *))); -
trunk/src/VBox/Debugger/VBoxDbgGui.h
r103462 r103464 105 105 * @param pszFilter Filter pattern. 106 106 * @param pszExpand Expand pattern. 107 */ 108 int showStatistics(const char *pszFilter, const char *pszExpand); 107 * @param pszConfig Advanced filter configuration (min/max/regexp on 108 * sub-trees) and more. 109 */ 110 int showStatistics(const char *pszFilter, const char *pszExpand, const char *pszConfig); 109 111 110 112 /** -
trunk/src/VBox/Debugger/VBoxDbgStatsQt.cpp
r103463 r103464 144 144 && pRegexName == NULL; 145 145 } 146 147 void reset(void) 148 { 149 uMinValue = 0; 150 uMaxValue = UINT64_MAX; 151 if (pRegexName) 152 { 153 delete pRegexName; 154 pRegexName = NULL; 155 } 156 } 157 158 struct VBoxGuiStatsFilterData *duplicate(void) const 159 { 160 VBoxGuiStatsFilterData *pDup = new VBoxGuiStatsFilterData(); 161 pDup->uMinValue = uMinValue; 162 pDup->uMaxValue = uMaxValue; 163 if (pRegexName) 164 pDup->pRegexName = new QRegularExpression(*pRegexName); 165 return pDup; 166 } 167 146 168 } VBoxGuiStatsFilterData; 147 169 … … 254 276 bool m_fUpdateInsertRemove; 255 277 278 /** Container indexed by node path and giving a filter config in return. */ 279 QHash<QString, VBoxGuiStatsFilterData *> m_FilterHash; 256 280 257 281 public: … … 259 283 * Constructor. 260 284 * 261 * @param a_pParent The parent object. See QAbstractItemModel in the Qt 262 * docs for details. 263 */ 264 VBoxDbgStatsModel(QObject *a_pParent); 285 * @param a_pszConfig Advanced filter configuration (min/max/regexp on 286 * sub-trees) and more. 287 * @param a_pParent The parent object. See QAbstractItemModel in the Qt 288 * docs for details. 289 */ 290 VBoxDbgStatsModel(const char *a_pszConfig, QObject *a_pParent); 265 291 266 292 /** … … 358 384 359 385 /** Creates the root node. */ 360 staticPDBGGUISTATSNODE createRootNode(void);386 PDBGGUISTATSNODE createRootNode(void); 361 387 362 388 /** Creates and insert a node under the given parent. */ 363 static PDBGGUISTATSNODE createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition); 389 PDBGGUISTATSNODE createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pchName, size_t cchName, uint32_t iPosition, 390 const char *pchFullName, size_t cchFullName); 364 391 365 392 /** Creates and insert a node under the given parent with correct Qt 366 393 * signalling. */ 367 PDBGGUISTATSNODE createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition); 394 PDBGGUISTATSNODE createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition, 395 const char *pchFullName, size_t cchFullName); 368 396 369 397 /** … … 410 438 * @param pszName The name of the tree element to update. 411 439 */ 412 PDBGGUISTATSNODE updateCallbackHandleOutOfOrder(const char * pszName);440 PDBGGUISTATSNODE updateCallbackHandleOutOfOrder(const char * const pszName); 413 441 414 442 /** … … 648 676 } 649 677 678 protected: 679 /** 680 * Populates m_FilterHash with configurations from @a a_pszConfig. 681 * 682 * @note This currently only work at construction time. 683 */ 684 void loadFilterConfig(const char *a_pszConfig); 685 650 686 public: 651 687 … … 676 712 * @param a_pDbgGui Pointer to the debugger gui object. 677 713 * @param a_rPatStr The selection pattern. 678 * @param a_pParent The parent object. NULL is fine. 714 * @param a_pszConfig Advanced filter configuration (min/max/regexp on 715 * sub-trees) and more. 679 716 * @param a_pVMM The VMM function table. 680 */ 681 VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, QObject *a_pParent, PCVMMR3VTABLE a_pVMM); 717 * @param a_pParent The parent object. NULL is fine and default. 718 */ 719 VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, const char *a_pszConfig, 720 PCVMMR3VTABLE a_pVMM, QObject *a_pParent = NULL); 682 721 683 722 /** Destructor */ … … 688 727 689 728 protected: 729 typedef struct 730 { 731 PDBGGUISTATSNODE pRoot; 732 VBoxDbgStatsModelVM *pThis; 733 } CreateNewTreeCallbackArgs_T; 734 690 735 /** 691 736 * Enumeration callback used by createNewTree. … … 726 771 virtual ~VBoxDbgStatsSortFileProxyModel() 727 772 {} 773 774 /** Gets the unused-rows visibility status. */ 775 bool isShowingUnusedRows() const { return m_fShowUnusedRows; } 728 776 729 777 /** Sets whether or not to show unused rows (all zeros). */ … … 999 1047 1000 1048 1001 VBoxDbgStatsModel::VBoxDbgStatsModel(QObject *a_pParent) 1002 : QAbstractItemModel(a_pParent), 1003 m_pRoot(NULL), m_iUpdateChild(UINT32_MAX), m_pUpdateParent(NULL), m_cchUpdateParent(0) 1004 { 1049 VBoxDbgStatsModel::VBoxDbgStatsModel(const char *a_pszConfig, QObject *a_pParent) 1050 : QAbstractItemModel(a_pParent) 1051 , m_pRoot(NULL) 1052 , m_iUpdateChild(UINT32_MAX) 1053 , m_pUpdateParent(NULL) 1054 , m_cchUpdateParent(0) 1055 { 1056 /* 1057 * Parse the advance filtering string as best as we can and 1058 * populate the map of pending node filter configs with it. 1059 */ 1060 loadFilterConfig(a_pszConfig); 1005 1061 } 1006 1062 … … 1088 1144 1089 1145 1090 /*static*/PDBGGUISTATSNODE1146 PDBGGUISTATSNODE 1091 1147 VBoxDbgStatsModel::createRootNode(void) 1092 1148 { … … 1100 1156 pRoot->cchName = 1; 1101 1157 pRoot->enmState = kDbgGuiStatsNodeState_kRoot; 1158 pRoot->pFilter = m_FilterHash.take("/"); 1102 1159 1103 1160 return pRoot; … … 1105 1162 1106 1163 1107 /*static*/ PDBGGUISTATSNODE 1108 VBoxDbgStatsModel::createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition) 1164 PDBGGUISTATSNODE 1165 VBoxDbgStatsModel::createAndInsertNode(PDBGGUISTATSNODE pParent, const char *pchName, size_t cchName, uint32_t iPosition, 1166 const char *pchFullName, size_t cchFullName) 1109 1167 { 1110 1168 /* … … 1117 1175 pNode->enmType = STAMTYPE_INVALID; 1118 1176 pNode->pszUnit = ""; 1119 pNode->pszName = (char *)RTMemDupEx(p szName, cchName, 1);1177 pNode->pszName = (char *)RTMemDupEx(pchName, cchName, 1); 1120 1178 pNode->cchName = cchName; 1121 1179 pNode->enmState = kDbgGuiStatsNodeState_kVisible; 1180 if (m_FilterHash.size() > 0 && cchFullName > 0) 1181 { 1182 char *pszTmp = RTStrDupN(pchFullName, cchFullName); 1183 pNode->pFilter = m_FilterHash.take(QString(pszTmp)); 1184 RTStrFree(pszTmp); 1185 } 1122 1186 1123 1187 /* … … 1164 1228 1165 1229 PDBGGUISTATSNODE 1166 VBoxDbgStatsModel::createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition) 1230 VBoxDbgStatsModel::createAndInsert(PDBGGUISTATSNODE pParent, const char *pszName, size_t cchName, uint32_t iPosition, 1231 const char *pchFullName, size_t cchFullName) 1167 1232 { 1168 1233 PDBGGUISTATSNODE pNode; 1169 1234 if (m_fUpdateInsertRemove) 1170 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition );1235 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition, pchFullName, cchFullName); 1171 1236 else 1172 1237 { 1173 1238 beginInsertRows(createIndex(pParent->iSelf, 0, pParent), iPosition, iPosition); 1174 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition );1239 pNode = createAndInsertNode(pParent, pszName, cchName, iPosition, pchFullName, cchFullName); 1175 1240 endInsertRows(); 1176 1241 } … … 1736 1801 1737 1802 PDBGGUISTATSNODE 1738 VBoxDbgStatsModel::updateCallbackHandleOutOfOrder(const char * pszName)1803 VBoxDbgStatsModel::updateCallbackHandleOutOfOrder(const char * const pszName) 1739 1804 { 1740 1805 #if defined(VBOX_STRICT) || defined(LOG_ENABLED) … … 1801 1866 { 1802 1867 /* first child */ 1803 pNode = createAndInsert(pNode, pszSubName, cchSubName, 0 );1868 pNode = createAndInsert(pNode, pszSubName, cchSubName, 0, pszName, pszEnd - pszName); 1804 1869 AssertReturn(pNode, NULL); 1805 1870 } … … 1827 1892 if (iStart > iLast) 1828 1893 { 1829 pNode = createAndInsert(pNode, pszSubName, cchSubName, iStart );1894 pNode = createAndInsert(pNode, pszSubName, cchSubName, iStart, pszName, pszEnd - pszName); 1830 1895 AssertReturn(pNode, NULL); 1831 1896 break; … … 1837 1902 if (iLast < iStart) 1838 1903 { 1839 pNode = createAndInsert(pNode, pszSubName, cchSubName, i );1904 pNode = createAndInsert(pNode, pszSubName, cchSubName, i, pszName, pszEnd - pszName); 1840 1905 AssertReturn(pNode, NULL); 1841 1906 break; … … 1922 1987 || pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur]) 1923 1988 { 1924 pNode = createAndInsert(pNode, pszCur, pszNext - pszCur, pNode->cChildren );1989 pNode = createAndInsert(pNode, pszCur, pszNext - pszCur, pNode->cChildren, pszName, pszNext - pszName); 1925 1990 AssertReturn(pNode, NULL); 1926 1991 } … … 3093 3158 3094 3159 3160 void 3161 VBoxDbgStatsModel::loadFilterConfig(const char *a_pszConfig) 3162 { 3163 /* Skip empty stuff. */ 3164 if (!a_pszConfig) 3165 return; 3166 a_pszConfig = RTStrStripL(a_pszConfig); 3167 if (!*a_pszConfig) 3168 return; 3169 3170 /* 3171 * The list elements are separated by colons. Paths must start with '/' to 3172 * be accepted as such. 3173 * 3174 * Example: "/;min=123;max=9348;name='.*cmp.*';/CPUM;" 3175 */ 3176 char * const pszDup = RTStrDup(a_pszConfig); 3177 AssertReturnVoid(pszDup); 3178 char *psz = pszDup; 3179 const char *pszPath = NULL; 3180 VBoxGuiStatsFilterData Data; 3181 do 3182 { 3183 /* Split out this item, strip it and move 'psz' to the next one. */ 3184 char *pszItem = psz; 3185 psz = strchr(psz, ';'); 3186 if (psz) 3187 *psz++ = '\0'; 3188 else 3189 psz = strchr(psz, '\0'); 3190 pszItem = RTStrStrip(pszItem); 3191 3192 /* Is it a path or a variable=value pair. */ 3193 if (*pszItem == '/') 3194 { 3195 if (pszPath && !Data.isAllDefaults()) 3196 m_FilterHash[QString(pszPath)] = Data.duplicate(); 3197 Data.reset(); 3198 pszPath = pszItem; 3199 } 3200 else 3201 { 3202 /* Split out the value, if any. */ 3203 char *pszValue = strchr(pszItem, '='); 3204 if (pszValue) 3205 { 3206 *pszValue++ = '\0'; 3207 pszValue = RTStrStripL(pszValue); 3208 RTStrStripR(pszItem); 3209 3210 /* Switch on the variable name. */ 3211 uint64_t const uValue = RTStrToUInt64(pszValue); 3212 if (strcmp(pszItem, "min") == 0) 3213 Data.uMinValue = uValue; 3214 else if (strcmp(pszItem, "max") == 0) 3215 Data.uMaxValue = uValue != 0 ? uValue : UINT64_MAX; 3216 else if (strcmp(pszItem, "name") == 0) 3217 { 3218 if (!Data.pRegexName) 3219 Data.pRegexName = new QRegularExpression(QString(pszValue)); 3220 else 3221 Data.pRegexName->setPattern(QString(pszValue)); 3222 if (!Data.pRegexName->isValid()) 3223 { 3224 delete Data.pRegexName; 3225 Data.pRegexName = NULL; 3226 } 3227 } 3228 } 3229 /* else: Currently no variables w/o values. */ 3230 } 3231 } while (*psz != '\0'); 3232 3233 /* Add the final entry, if any. */ 3234 if (pszPath && !Data.isAllDefaults()) 3235 m_FilterHash[QString(pszPath)] = Data.duplicate(); 3236 3237 RTStrFree(pszDup); 3238 } 3095 3239 3096 3240 … … 3108 3252 3109 3253 3110 VBoxDbgStatsModelVM::VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, QObject *a_pParent, PCVMMR3VTABLE a_pVMM) 3111 : VBoxDbgStatsModel(a_pParent), VBoxDbgBase(a_pDbgGui), m_pVMM(a_pVMM) 3254 VBoxDbgStatsModelVM::VBoxDbgStatsModelVM(VBoxDbgGui *a_pDbgGui, QString &a_rPatStr, const char *a_pszConfig, 3255 PCVMMR3VTABLE a_pVMM, QObject *a_pParent /*= NULL*/) 3256 : VBoxDbgStatsModel(a_pszConfig, a_pParent), VBoxDbgBase(a_pDbgGui), m_pVMM(a_pVMM) 3112 3257 { 3113 3258 /* … … 3154 3299 const char *pszUnit, STAMVISIBILITY enmVisibility, const char *pszDesc, void *pvUser) 3155 3300 { 3156 PDBGGUISTATSNODE pRoot = (PDBGGUISTATSNODE)pvUser;3301 CreateNewTreeCallbackArgs_T * const pArgs = (CreateNewTreeCallbackArgs_T *)pvUser; 3157 3302 Log3(("createNewTreeCallback: %s\n", pszName)); 3158 3303 RT_NOREF(enmUnit); … … 3170 3315 */ 3171 3316 AssertReturn(*pszName == '/' && pszName[1] != '/', VERR_INTERNAL_ERROR); 3172 PDBGGUISTATSNODE pNode = p Root;3317 PDBGGUISTATSNODE pNode = pArgs->pRoot; 3173 3318 const char *pszCur = pszName + 1; 3174 3319 while (*pszCur) … … 3185 3330 || pNode->papChildren[pNode->cChildren - 1]->pszName[cchCur]) 3186 3331 { 3187 pNode = createAndInsertNode(pNode, pszCur, pszNext - pszCur, UINT32_MAX);3332 pNode = pArgs->pThis->createAndInsertNode(pNode, pszCur, pszNext - pszCur, UINT32_MAX, pszName, pszNext - pszName); 3188 3333 if (!pNode) 3189 3334 return VERR_NO_MEMORY; … … 3209 3354 if (pRoot) 3210 3355 { 3211 int rc = stamEnum(a_rPatStr, createNewTreeCallback, pRoot); 3356 CreateNewTreeCallbackArgs_T Args = { pRoot, this }; 3357 int rc = stamEnum(a_rPatStr, createNewTreeCallback, &Args); 3212 3358 if (RT_SUCCESS(rc)) 3213 3359 return pRoot; … … 3878 4024 */ 3879 4025 QModelIndex Idx = m_pCurMenu ? m_CurIndex : currentIndex(); 3880 if ( Idx.isValid())4026 if (!Idx.isValid()) 3881 4027 Idx = myGetRootIndex(); 3882 4028 Idx = m_pProxyModel->mapToSource(Idx); … … 4006 4152 if (m_Data.isAllDefaults()) 4007 4153 return NULL; 4008 VBoxGuiStatsFilterData *pRet = new VBoxGuiStatsFilterData(); 4009 pRet->uMinValue = m_Data.uMinValue; 4010 pRet->uMaxValue = m_Data.uMaxValue; 4011 if (m_Data.pRegexName) 4012 pRet->pRegexName = new QRegularExpression(*m_Data.pRegexName); 4013 return pRet; 4154 return m_Data.duplicate(); 4014 4155 } 4015 4156 … … 4087 4228 4088 4229 VBoxDbgStats::VBoxDbgStats(VBoxDbgGui *a_pDbgGui, const char *pszFilter /*= NULL*/, const char *pszExpand /*= NULL*/, 4089 unsigned uRefreshRate/* = 0*/, QWidget *pParent/* = NULL*/)4230 const char *pszConfig /*= NULL*/, unsigned uRefreshRate/* = 0*/, QWidget *pParent/* = NULL*/) 4090 4231 : VBoxDbgBaseWindow(a_pDbgGui, pParent, "Statistics") 4091 4232 , m_PatStr(pszFilter), m_pPatCB(NULL), m_uRefreshRate(0), m_pTimer(NULL), m_pView(NULL) … … 4145 4286 * Create the tree view and setup the layout. 4146 4287 */ 4147 VBoxDbgStatsModelVM *pModel = new VBoxDbgStatsModelVM(a_pDbgGui, m_PatStr, NULL, a_pDbgGui->getVMMFunctionTable());4288 VBoxDbgStatsModelVM *pModel = new VBoxDbgStatsModelVM(a_pDbgGui, m_PatStr, pszConfig, a_pDbgGui->getVMMFunctionTable()); 4148 4289 #ifdef VBOXDBG_WITH_SORTED_AND_FILTERED_STATS 4149 4290 VBoxDbgStatsSortFileProxyModel *pProxyModel = new VBoxDbgStatsSortFileProxyModel(this); 4150 4291 m_pView = new VBoxDbgStatsView(a_pDbgGui, pModel, pProxyModel, this); 4292 pCheckBox->setCheckState(pProxyModel->isShowingUnusedRows() ? Qt::Checked : Qt::Unchecked); 4151 4293 #else 4152 4294 m_pView = new VBoxDbgStatsView(a_pDbgGui, pModel, NULL, this); -
trunk/src/VBox/Debugger/VBoxDbgStatsQt.h
r103462 r103464 244 244 * @param pszExpand Initial expansion pattern. NULL means nothing is 245 245 * expanded. 246 * @param pszConfig Advanced filter configuration (min/max/regexp on 247 * sub-trees) and more. 248 * 246 249 * @param uRefreshRate The refresh rate. 0 means not to refresh and is the default. 247 250 * @param pParent Parent widget. 248 251 */ 249 252 VBoxDbgStats(VBoxDbgGui *a_pDbgGui, const char *pszFilter = NULL, const char *pszExpand = NULL, 250 unsigned uRefreshRate = 0, QWidget *pParent = NULL);253 const char *pszConfig = NULL, unsigned uRefreshRate = 0, QWidget *pParent = NULL); 251 254 252 255 /** Destructor. */ -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.cpp
r103280 r103464 595 595 m_strDbgStatisticsFilter = arguments.at(i).section('=', 1); 596 596 } 597 else if (!::strcmp(arg, "--statistics-config") || !::strcmp(arg, "--stats-config")) 598 { 599 enmOptType = OptType_VMRunner; 600 if (++i < argc) 601 m_strDbgStatisticsConfig = arguments.at(i); 602 } 603 else if (!::strncmp(arg, RT_STR_TUPLE("--statistics-config=")) || !::strncmp(arg, RT_STR_TUPLE("--stats-config="))) 604 { 605 enmOptType = OptType_VMRunner; 606 m_strDbgStatisticsConfig = arguments.at(i).section('=', 1); 607 } 597 608 else if (!::strcmp(arg, "-no-debug") || !::strcmp(arg, "--no-debug")) 598 609 { -
trunk/src/VBox/Frontends/VirtualBox/src/globals/UICommon.h
r102750 r103464 308 308 /** Returns the --statistics-filter value. */ 309 309 QString const getDebuggerStatisticsFilter() const { return m_strDbgStatisticsFilter; } 310 /** Returns the --statistics-config value. */ 311 QString const getDebuggerStatisticsConfig() const { return m_strDbgStatisticsConfig; } 310 312 311 313 /** VBoxDbg module handle. */ … … 732 734 /** Pattern of statistics to expand when opening the viewer. */ 733 735 QString m_strDbgStatisticsExpand; 734 /** The statistics viewer filter. */736 /** The statistics viewer main filter pattern. */ 735 737 QString m_strDbgStatisticsFilter; 738 /** The statistics viewer advanced filter configuration and possibly more. */ 739 QString m_strDbgStatisticsConfig; 736 740 737 741 /** VBoxDbg module handle. */ -
trunk/src/VBox/Frontends/VirtualBox/src/main.cpp
r103246 r103464 286 286 " --statistics-expand <pat> expand the matching statistics (can be repeated)\n" 287 287 " --statistics-filter <pat> statistics filter\n" 288 " --statistics-config <str> statistics configuration\n" 288 289 " --no-debug disable the GUI debug menu and debug windows\n" 289 290 " --start-paused start the VM in the paused state\n" -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
r103362 r103464 2300 2300 void UISession::dbgShowStatistics() 2301 2301 { 2302 const QByteArray &filterBytes = uiCommon().getDebuggerStatisticsFilter().toUtf8(); 2302 2303 const QByteArray &expandBytes = uiCommon().getDebuggerStatisticsExpand().toUtf8(); 2303 const QByteArray & filterBytes = uiCommon().getDebuggerStatisticsFilter().toUtf8();2304 m_pDbgGuiVT->pfnShowStatistics(m_pDbgGui, filterBytes.constData(), expandBytes.constData() );2304 const QByteArray &configBytes = uiCommon().getDebuggerStatisticsConfig().toUtf8(); 2305 m_pDbgGuiVT->pfnShowStatistics(m_pDbgGui, filterBytes.constData(), expandBytes.constData(), configBytes.constData()); 2305 2306 } 2306 2307
Note:
See TracChangeset
for help on using the changeset viewer.