static void setWindowText(HWND dialog, UINT field, IPropertyBagPtr statistics, const _bstr_t& key) { VARIANT var; ::VariantInit(&var); V_VT(&var) = VT_UI8; if (FAILED(statistics->Read(key, &var, 0))) { ::VariantClear(&var); return; } unsigned long long value = V_UI8(&var); String valueStr = WTF::String::number(value); setWindowText(dialog, field, _bstr_t(valueStr.utf8().data())); ::VariantClear(&var); }
static void updateStatistics(HWND dialog) { if (!gWinLauncher) return; IWebCoreStatisticsPtr webCoreStatistics = gWinLauncher->statistics(); if (!webCoreStatistics) return; IPropertyBagPtr statistics; HRESULT hr = webCoreStatistics->memoryStatistics(&statistics.GetInterfacePtr()); if (FAILED(hr)) return; // FastMalloc. setWindowText(dialog, IDC_RESERVED_VM, statistics, "FastMallocReservedVMBytes"); setWindowText(dialog, IDC_COMMITTED_VM, statistics, "FastMallocCommittedVMBytes"); setWindowText(dialog, IDC_FREE_LIST_BYTES, statistics, "FastMallocFreeListBytes"); // WebCore Cache. #if USE(CF) IWebCachePtr webCache = gWinLauncher->webCache(); int dictCount = 6; IPropertyBag* cacheDict[6] = { 0 }; if (FAILED(webCache->statistics(&dictCount, cacheDict))) return; COMPtr<CFDictionaryPropertyBag> counts, sizes, liveSizes, decodedSizes, purgableSizes; counts.adoptRef(reinterpret_cast<CFDictionaryPropertyBag*>(cacheDict[0])); sizes.adoptRef(reinterpret_cast<CFDictionaryPropertyBag*>(cacheDict[1])); liveSizes.adoptRef(reinterpret_cast<CFDictionaryPropertyBag*>(cacheDict[2])); decodedSizes.adoptRef(reinterpret_cast<CFDictionaryPropertyBag*>(cacheDict[3])); purgableSizes.adoptRef(reinterpret_cast<CFDictionaryPropertyBag*>(cacheDict[4])); static CFStringRef imagesKey = CFSTR("images"); static CFStringRef stylesheetsKey = CFSTR("style sheets"); static CFStringRef xslKey = CFSTR("xsl"); static CFStringRef scriptsKey = CFSTR("scripts"); if (counts) { UINT totalObjects = 0; setWindowText(dialog, IDC_IMAGES_OBJECT_COUNT, counts->dictionary(), imagesKey, totalObjects); setWindowText(dialog, IDC_CSS_OBJECT_COUNT, counts->dictionary(), stylesheetsKey, totalObjects); setWindowText(dialog, IDC_XSL_OBJECT_COUNT, counts->dictionary(), xslKey, totalObjects); setWindowText(dialog, IDC_JSC_OBJECT_COUNT, counts->dictionary(), scriptsKey, totalObjects); setWindowText(dialog, IDC_TOTAL_OBJECT_COUNT, totalObjects); } if (sizes) { UINT totalBytes = 0; setWindowText(dialog, IDC_IMAGES_BYTES, sizes->dictionary(), imagesKey, totalBytes); setWindowText(dialog, IDC_CSS_BYTES, sizes->dictionary(), stylesheetsKey, totalBytes); setWindowText(dialog, IDC_XSL_BYTES, sizes->dictionary(), xslKey, totalBytes); setWindowText(dialog, IDC_JSC_BYTES, sizes->dictionary(), scriptsKey, totalBytes); setWindowText(dialog, IDC_TOTAL_BYTES, totalBytes); } if (liveSizes) { UINT totalLiveBytes = 0; setWindowText(dialog, IDC_IMAGES_LIVE_COUNT, liveSizes->dictionary(), imagesKey, totalLiveBytes); setWindowText(dialog, IDC_CSS_LIVE_COUNT, liveSizes->dictionary(), stylesheetsKey, totalLiveBytes); setWindowText(dialog, IDC_XSL_LIVE_COUNT, liveSizes->dictionary(), xslKey, totalLiveBytes); setWindowText(dialog, IDC_JSC_LIVE_COUNT, liveSizes->dictionary(), scriptsKey, totalLiveBytes); setWindowText(dialog, IDC_TOTAL_LIVE_COUNT, totalLiveBytes); } if (decodedSizes) { UINT totalDecoded = 0; setWindowText(dialog, IDC_IMAGES_DECODED_COUNT, decodedSizes->dictionary(), imagesKey, totalDecoded); setWindowText(dialog, IDC_CSS_DECODED_COUNT, decodedSizes->dictionary(), stylesheetsKey, totalDecoded); setWindowText(dialog, IDC_XSL_DECODED_COUNT, decodedSizes->dictionary(), xslKey, totalDecoded); setWindowText(dialog, IDC_JSC_DECODED_COUNT, decodedSizes->dictionary(), scriptsKey, totalDecoded); setWindowText(dialog, IDC_TOTAL_DECODED, totalDecoded); } if (purgableSizes) { UINT totalPurgable = 0; setWindowText(dialog, IDC_IMAGES_PURGEABLE_COUNT, purgableSizes->dictionary(), imagesKey, totalPurgable); setWindowText(dialog, IDC_CSS_PURGEABLE_COUNT, purgableSizes->dictionary(), stylesheetsKey, totalPurgable); setWindowText(dialog, IDC_XSL_PURGEABLE_COUNT, purgableSizes->dictionary(), xslKey, totalPurgable); setWindowText(dialog, IDC_JSC_PURGEABLE_COUNT, purgableSizes->dictionary(), scriptsKey, totalPurgable); setWindowText(dialog, IDC_TOTAL_PURGEABLE, totalPurgable); } #endif // JavaScript Heap. setWindowText(dialog, IDC_JSC_HEAP_SIZE, statistics, "JavaScriptHeapSize"); setWindowText(dialog, IDC_JSC_HEAP_FREE, statistics, "JavaScriptFreeSize"); UINT count; if (SUCCEEDED(webCoreStatistics->javaScriptObjectsCount(&count))) setWindowText(dialog, IDC_TOTAL_JSC_HEAP_OBJECTS, count); if (SUCCEEDED(webCoreStatistics->javaScriptGlobalObjectsCount(&count))) setWindowText(dialog, IDC_GLOBAL_JSC_HEAP_OBJECTS, count); if (SUCCEEDED(webCoreStatistics->javaScriptProtectedObjectsCount(&count))) setWindowText(dialog, IDC_PROTECTED_JSC_HEAP_OBJECTS, count); // Font and Glyph Caches. if (SUCCEEDED(webCoreStatistics->cachedFontDataCount(&count))) setWindowText(dialog, IDC_TOTAL_FONT_OBJECTS, count); if (SUCCEEDED(webCoreStatistics->cachedFontDataInactiveCount(&count))) setWindowText(dialog, IDC_INACTIVE_FONT_OBJECTS, count); if (SUCCEEDED(webCoreStatistics->glyphPageCount(&count))) setWindowText(dialog, IDC_GLYPH_PAGES, count); // Site Icon Database. if (SUCCEEDED(webCoreStatistics->iconPageURLMappingCount(&count))) setWindowText(dialog, IDC_PAGE_URL_MAPPINGS, count); if (SUCCEEDED(webCoreStatistics->iconRetainedPageURLCount(&count))) setWindowText(dialog, IDC_RETAINED_PAGE_URLS, count); if (SUCCEEDED(webCoreStatistics->iconRecordCount(&count))) setWindowText(dialog, IDC_SITE_ICON_RECORDS, count); if (SUCCEEDED(webCoreStatistics->iconsWithDataCount(&count))) setWindowText(dialog, IDC_SITE_ICONS_WITH_DATA, count); }
void WebCam::EnumerateVideoDevicesForComboBox(HWND hwndComboBox) { HRESULT hr; // Create the system device enumerator. ICreateDevEnumPtr pDevEnum; hr = pDevEnum.CreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC); if (S_OK != hr) { return; } // Create an enumerator for video capture devices. IEnumMonikerPtr pClassEnum; pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pClassEnum, 0); if (FAILED(hr) || (pClassEnum == NULL)) { return; } ULONG cFetched; IMonikerPtr pMoniker; videoDevices.clear(); while (pClassEnum->Next(1, &pMoniker, &cFetched) == S_OK) { VideoDevice device; // Get the property bag of the moniker { IPropertyBagPtr propBag; hr = pMoniker->BindToStorage(NULL, NULL, IID_IPropertyBag, reinterpret_cast<void**>(&propBag)); if (FAILED(hr)) { pMoniker.Release(); continue; } _variant_t v; hr = propBag->Read(L"Description", &v, 0); if (FAILED(hr)) { hr = propBag->Read(L"FriendlyName", &v, 0); } if (S_OK == hr) { device.friendlyName = v.bstrVal; } hr = propBag->Read(L"DevicePath", &v, 0); if (S_OK == hr) { device.devicePath = v.bstrVal; } videoDevices.push_back(device); LRESULT index = SendMessage( hwndComboBox, CB_ADDSTRING, (WPARAM)0, (LPARAM)device.friendlyName.c_str()); if (index < 0) { pMoniker.Release(); continue; } SendMessage( hwndComboBox, CB_SETITEMDATA, (WPARAM)index, (LPARAM)(DWORD)videoDevices.size() - 1); if ((index == 0) || ((uDeviceType == deviceType_camera) && (device.devicePath == this->sDevicePath))) { SendMessage( hwndComboBox, CB_SETCURSEL, (WPARAM)index, (LPARAM)0); } } pMoniker.Release(); } }