Changeset 43629 in vbox for trunk/src/VBox/Frontends/VBoxManage
- Timestamp:
- Oct 12, 2012 9:26:07 AM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 81354
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VBoxManage/VBoxManageMetrics.cpp
r40358 r43629 34 34 #include <VBox/log.h> 35 35 36 #include <set> 37 #include <utility> 38 36 39 #include "VBoxManage.h" 37 40 using namespace com; … … 41 44 /////////////////////////////////////////////////////////////////////////////// 42 45 43 44 static bool isLastSlash(const char *str)45 {46 char c;47 while ((c = *str++))48 {49 if (c == ',')50 break;51 if (c == '/')52 return false;53 }54 55 return true;56 }57 58 static char *toBaseMetricNames(const char *metricList)59 {60 char *newList = (char*)RTMemAlloc(strlen(metricList) + 1);61 if (newList)62 {63 int cSlashes = 0;64 bool fSkip = false;65 const char *src = metricList;66 char c, *dst = newList;67 while ((c = *src++))68 if (c == ':')69 fSkip = true;70 else if (c == '/' && ++cSlashes >= 2 && isLastSlash(src))71 fSkip = true;72 else if (c == ',')73 {74 fSkip = false;75 cSlashes = 0;76 *dst++ = c;77 }78 else79 if (!fSkip)80 *dst++ = c;81 *dst = 0;82 }83 return newList;84 }85 46 86 47 static int parseFilterParameters(int argc, char *argv[], 87 48 ComPtr<IVirtualBox> aVirtualBox, 88 49 ComSafeArrayOut(BSTR, outMetrics), 89 ComSafeArrayOut(BSTR, outBaseMetrics),90 50 ComSafeArrayOut(IUnknown *, outObjects)) 91 51 { 92 52 HRESULT rc = S_OK; 93 53 com::SafeArray<BSTR> retMetrics(1); 94 com::SafeArray<BSTR> retBaseMetrics(1);95 54 com::SafeIfaceArray <IUnknown> retObjects; 96 55 … … 99 58 /* Metric list */ 100 59 if (argc > 1) 101 {102 60 metricNames = argv[1]; 103 char *tmp = toBaseMetricNames(argv[1]);104 if (!tmp)105 return VERR_NO_MEMORY;106 baseNames = tmp;107 RTMemFree(tmp);108 }109 61 else 110 62 { … … 113 65 } 114 66 metricNames.cloneTo(&retMetrics[0]); 115 baseNames.cloneTo(&retBaseMetrics[0]);116 67 117 68 /* Object name */ … … 145 96 146 97 retMetrics.detachTo(ComSafeArrayOutArg(outMetrics)); 147 retBaseMetrics.detachTo(ComSafeArrayOutArg(outBaseMetrics));148 98 retObjects.detachTo(ComSafeArrayOutArg(outObjects)); 149 99 150 100 return rc; 101 } 102 103 static Bstr toBaseName(Utf8Str& aFullName) 104 { 105 char *pszRaw = aFullName.mutableRaw(); 106 char *pszSlash = strrchr(pszRaw, '/'); 107 if (pszSlash) 108 { 109 *pszSlash = 0; 110 aFullName.jolt(); 111 } 112 return Bstr(aFullName); 151 113 } 152 114 … … 207 169 HRESULT rc; 208 170 com::SafeArray<BSTR> metrics; 209 com::SafeArray<BSTR> baseMetrics;210 171 com::SafeIfaceArray<IUnknown> objects; 211 172 212 173 rc = parseFilterParameters(argc - 1, &argv[1], aVirtualBox, 213 174 ComSafeArrayAsOutParam(metrics), 214 ComSafeArrayAsOutParam(baseMetrics),215 175 ComSafeArrayAsOutParam(objects)); 216 176 if (FAILED(rc)) … … 258 218 HRESULT rc; 259 219 com::SafeArray<BSTR> metrics; 260 com::SafeArray<BSTR> baseMetrics;261 220 com::SafeIfaceArray<IUnknown> objects; 262 221 uint32_t period = 1, samples = 1; … … 293 252 rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox, 294 253 ComSafeArrayAsOutParam(metrics), 295 ComSafeArrayAsOutParam(baseMetrics),296 254 ComSafeArrayAsOutParam(objects)); 297 255 if (FAILED(rc)) … … 322 280 HRESULT rc; 323 281 com::SafeArray<BSTR> metrics; 324 com::SafeArray<BSTR> baseMetrics;325 282 com::SafeIfaceArray<IUnknown> objects; 326 283 327 284 rc = parseFilterParameters(argc - 1, &argv[1], aVirtualBox, 328 285 ComSafeArrayAsOutParam(metrics), 329 ComSafeArrayAsOutParam(baseMetrics),330 286 ComSafeArrayAsOutParam(objects)); 331 287 if (FAILED(rc)) … … 430 386 HRESULT rc; 431 387 com::SafeArray<BSTR> metrics; 432 com::SafeArray<BSTR> baseMetrics;433 388 com::SafeIfaceArray<IUnknown> objects; 434 389 uint32_t period = 1, samples = 1; … … 467 422 rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox, 468 423 ComSafeArrayAsOutParam(metrics), 469 ComSafeArrayAsOutParam(baseMetrics),470 424 ComSafeArrayAsOutParam(objects)); 471 425 if (FAILED(rc)) 472 426 return 1; 473 427 474 428 com::SafeIfaceArray<IPerformanceMetric> metricInfo; 429 430 CHECK_ERROR(performanceCollector, 431 GetMetrics(ComSafeArrayAsInParam(metrics), 432 ComSafeArrayAsInParam(objects), 433 ComSafeArrayAsOutParam(metricInfo))); 434 435 std::set<std::pair<ComPtr<IUnknown>,Bstr> > baseMetrics; 436 ComPtr<IUnknown> objectFiltered; 437 Bstr metricNameFiltered; 438 for (i = 0; i < (int)metricInfo.size(); i++) 439 { 440 CHECK_ERROR(metricInfo[i], COMGETTER(Object)(objectFiltered.asOutParam())); 441 CHECK_ERROR(metricInfo[i], COMGETTER(MetricName)(metricNameFiltered.asOutParam())); 442 Utf8Str baseMetricName(metricNameFiltered); 443 baseMetrics.insert(std::make_pair(objectFiltered, toBaseName(baseMetricName))); 444 } 445 com::SafeArray<BSTR> baseMetricsFiltered(baseMetrics.size()); 446 com::SafeIfaceArray<IUnknown> objectsFiltered(baseMetrics.size()); 447 std::set<std::pair<ComPtr<IUnknown>,Bstr> >::iterator it; 448 i = 0; 449 for (it = baseMetrics.begin(); it != baseMetrics.end(); ++it) 450 { 451 it->first.queryInterfaceTo(&objectsFiltered[i]); 452 Bstr(it->second).detachTo(&baseMetricsFiltered[i++]); 453 } 475 454 com::SafeIfaceArray<IPerformanceMetric> affectedMetrics; 476 455 CHECK_ERROR(performanceCollector, 477 SetupMetrics(ComSafeArrayAsInParam(baseMetrics ),478 ComSafeArrayAsInParam(objects ), period, samples,456 SetupMetrics(ComSafeArrayAsInParam(baseMetricsFiltered), 457 ComSafeArrayAsInParam(objectsFiltered), period, samples, 479 458 ComSafeArrayAsOutParam(affectedMetrics))); 480 459 if (FAILED(rc)) … … 561 540 HRESULT rc; 562 541 com::SafeArray<BSTR> metrics; 563 com::SafeArray<BSTR> baseMetrics;564 542 com::SafeIfaceArray<IUnknown> objects; 565 543 bool listMatches = false; … … 577 555 rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox, 578 556 ComSafeArrayAsOutParam(metrics), 579 ComSafeArrayAsOutParam(baseMetrics),580 557 ComSafeArrayAsOutParam(objects)); 581 558 if (FAILED(rc)) … … 606 583 HRESULT rc; 607 584 com::SafeArray<BSTR> metrics; 608 com::SafeArray<BSTR> baseMetrics;609 585 com::SafeIfaceArray<IUnknown> objects; 610 586 bool listMatches = false; … … 622 598 rc = parseFilterParameters(argc - i, &argv[i], aVirtualBox, 623 599 ComSafeArrayAsOutParam(metrics), 624 ComSafeArrayAsOutParam(baseMetrics),625 600 ComSafeArrayAsOutParam(objects)); 626 601 if (FAILED(rc))
Note:
See TracChangeset
for help on using the changeset viewer.