void WebCache::getResourceTypeStats(ResourceTypeStats* result) { MemoryCache* cache = memoryCache(); if (cache) { MemoryCache::Statistics stats = cache->getStatistics(); ToResourceTypeStat(stats.images, result->images); ToResourceTypeStat(stats.cssStyleSheets, result->cssStyleSheets); ToResourceTypeStat(stats.scripts, result->scripts); ToResourceTypeStat(stats.fonts, result->fonts); } else memset(result, 0, sizeof(WebCache::ResourceTypeStats)); }
static String memoryPage() { String page; page = writeHeader("Memory") + "<div class=\"box\"><div class=\"box-title\">Cache Information<br><div style='font-size:11px;color:#A8A8A8'>Size, Living, and Decoded are expressed in KB.</div><br></div><table class='fixed-table'><col width=75%><col width=25%>"; // generate cache information MemoryCache* cacheInc = memoryCache(); MemoryCache::Statistics cacheStat = cacheInc->getStatistics(); page += "<tr> <th align=left>Item</th> <th align=left>Count</th> <th align=left>Size</th> <th align=left>Living</th> <th align=left>Decoded</th></tr>"; MemoryCache::TypeStatistic total; total.count = cacheStat.images.count + cacheStat.cssStyleSheets.count + cacheStat.scripts.count + cacheStat.xslStyleSheets.count + cacheStat.fonts.count; total.size = cacheInc->totalSize(); total.liveSize = cacheStat.images.liveSize + cacheStat.cssStyleSheets.liveSize + cacheStat.scripts.liveSize + cacheStat.xslStyleSheets.liveSize + cacheStat.fonts.liveSize; total.decodedSize = cacheStat.images.decodedSize + cacheStat.cssStyleSheets.decodedSize + cacheStat.scripts.decodedSize + cacheStat.xslStyleSheets.decodedSize + cacheStat.fonts.decodedSize; page += cacheTypeStatisticToHTMLTr("Total", total); page += cacheTypeStatisticToHTMLTr("Images", cacheStat.images); page += cacheTypeStatisticToHTMLTr("CSS Style Sheets", cacheStat.cssStyleSheets); page += cacheTypeStatisticToHTMLTr("Scripts", cacheStat.scripts); #if ENABLE(XSLT) page += cacheTypeStatisticToHTMLTr("XSL Style Sheets", cacheStat.xslStyleSheets); #endif page += cacheTypeStatisticToHTMLTr("Fonts", cacheStat.fonts); page += "</table></div><br>"; #if !defined(PUBLIC_BUILD) || !PUBLIC_BUILD // JS engine memory usage. JSC::GlobalMemoryStatistics jscMemoryStat = JSC::globalMemoryStatistics(); JSC::Heap& mainHeap = JSDOMWindow::commonJSGlobalData()->heap; OwnPtr<JSC::TypeCountSet> objectTypeCounts = mainHeap.objectTypeCounts(); OwnPtr<JSC::TypeCountSet> protectedObjectTypeCounts = mainHeap.protectedObjectTypeCounts(); // Malloc info. struct mallinfo mallocInfo = mallinfo(); page += "<div class='box'><div class='box-title'>Process memory usage summary</div><table class='fixed-table'><col width=75%><col width=25%>"; page += numberToHTMLTr("Total used memory (malloc + JSC)", mallocInfo.usmblks + mallocInfo.uordblks + jscMemoryStat.stackBytes + jscMemoryStat.JITBytes + mainHeap.capacity()); if (unsigned totalCommittedMemoryOfChromeProcess = BlackBerry::Platform::totalCommittedMemoryOfChromeProcess()) { page += numberToHTMLTr("Total committed memory of tab process", BlackBerry::Platform::totalCommittedMemoryOfCurrentProcess()); page += numberToHTMLTr("Total committed memory of chrome process", totalCommittedMemoryOfChromeProcess); } else page += numberToHTMLTr("Total committed memory", BlackBerry::Platform::totalCommittedMemoryOfCurrentProcess()); struct stat processInfo; if (!stat(String::format("/proc/%u/as", getpid()).latin1().data(), &processInfo)) page += numberToHTMLTr("Total mapped memory", processInfo.st_size); page += numberToHTMLTr("System free memory", BlackBerry::Platform::systemFreeMemory()); page += "</table></div><br>"; page += "<div class='box'><div class='box-title'>JS engine memory usage</div><table class='fixed-table'><col width=75%><col width=25%>"; page += numberToHTMLTr("Stack size", jscMemoryStat.stackBytes); page += numberToHTMLTr("JIT memory usage", jscMemoryStat.JITBytes); page += numberToHTMLTr("Main heap capacity", mainHeap.capacity()); page += numberToHTMLTr("Main heap size", mainHeap.size()); page += numberToHTMLTr("Object count", mainHeap.objectCount()); page += numberToHTMLTr("Global object count", mainHeap.globalObjectCount()); page += numberToHTMLTr("Protected object count", mainHeap.protectedObjectCount()); page += numberToHTMLTr("Protected global object count", mainHeap.protectedGlobalObjectCount()); page += "</table></div><br>"; page += "<div class='box'><div class='box-title'>JS object type counts</div><table class='fixed-table'><col width=75%><col width=25%>"; dumpJSCTypeCountSetToTableHTML(page, objectTypeCounts.get()); page += "</table></div><br>"; page += "<div class='box'><div class='box-title'>JS protected object type counts</div><table class='fixed-table'><col width=75%><col width=25%>"; dumpJSCTypeCountSetToTableHTML(page, protectedObjectTypeCounts.get()); page += "</table></div><br>"; page += "<div class='box'><div class='box-title'>Malloc Information</div><table class='fixed-table'><col width=75%><col width=25%>"; page += numberToHTMLTr("Total space in use", mallocInfo.usmblks + mallocInfo.uordblks); page += numberToHTMLTr("Total space in free blocks", mallocInfo.fsmblks + mallocInfo.fordblks); page += numberToHTMLTr("Size of the arena", mallocInfo.arena); page += numberToHTMLTr("Number of big blocks in use", mallocInfo.ordblks); page += numberToHTMLTr("Number of small blocks in use", mallocInfo.smblks); page += numberToHTMLTr("Number of header blocks in use", mallocInfo.hblks); page += numberToHTMLTr("Space in header block headers", mallocInfo.hblkhd); page += numberToHTMLTr("Space in small blocks in use", mallocInfo.usmblks); page += numberToHTMLTr("Memory in free small blocks", mallocInfo.fsmblks); page += numberToHTMLTr("Space in big blocks in use", mallocInfo.uordblks); page += numberToHTMLTr("Memory in free big blocks", mallocInfo.fordblks); page += "</table></div>"; #endif page += "</body></html>"; return page; }
String memoryPage() { String page; // generate memory information page = String("<html><head><title>BlackBerry Browser Memory Information</title></head><body><h2>BlackBerry Browser Memory Information</h2>"); // generate cache information MemoryCache* cacheInc = memoryCache(); MemoryCache::Statistics cacheStat = cacheInc->getStatistics(); page += String("<h2>Cache Information</h2>") + "<table align=\"center\" rules=\"all\"><tr> <th>Item</th> <th>Count</th> <th>Size<br>KB</th> <th>Living<br>KB</th> <th>Decoded<br>KB</th></tr>"; MemoryCache::TypeStatistic total; total.count = cacheStat.images.count + cacheStat.cssStyleSheets.count + cacheStat.scripts.count + cacheStat.xslStyleSheets.count + cacheStat.fonts.count; total.size = cacheInc->totalSize(); total.liveSize = cacheStat.images.liveSize + cacheStat.cssStyleSheets.liveSize + cacheStat.scripts.liveSize + cacheStat.xslStyleSheets.liveSize + cacheStat.fonts.liveSize; total.decodedSize = cacheStat.images.decodedSize + cacheStat.cssStyleSheets.decodedSize + cacheStat.scripts.decodedSize + cacheStat.xslStyleSheets.decodedSize + cacheStat.fonts.decodedSize; page += cacheTypeStatisticToHTMLTr("Total", total); page += cacheTypeStatisticToHTMLTr("Images", cacheStat.images); page += cacheTypeStatisticToHTMLTr("CSS Style Sheets", cacheStat.cssStyleSheets); page += cacheTypeStatisticToHTMLTr("Scripts", cacheStat.scripts); #if ENABLE(XSLT) page += cacheTypeStatisticToHTMLTr("XSL Style Sheets", cacheStat.xslStyleSheets); #endif page += cacheTypeStatisticToHTMLTr("Fonts", cacheStat.fonts); page += "</table>"; #if !defined(PUBLIC_BUILD) || !PUBLIC_BUILD struct mallinfo mallocInfo = mallinfo(); page += String("<h2>Malloc Information</h2>") + "<table align=\"center\" rules=\"all\">"; page += numberToHTMLTr("Total space in use", mallocInfo.usmblks + mallocInfo.uordblks); page += numberToHTMLTr("Total space in free blocks", mallocInfo.fsmblks + mallocInfo.fordblks); page += numberToHTMLTr("Size of the arena", mallocInfo.arena); page += numberToHTMLTr("Number of big blocks in use", mallocInfo.ordblks); page += numberToHTMLTr("Number of small blocks in use", mallocInfo.smblks); page += numberToHTMLTr("Number of header blocks in use", mallocInfo.hblks); page += numberToHTMLTr("Space in header block headers", mallocInfo.hblkhd); page += numberToHTMLTr("Space in small blocks in use", mallocInfo.usmblks); page += numberToHTMLTr("Memory in free small blocks", mallocInfo.fsmblks); page += numberToHTMLTr("Space in big blocks in use", mallocInfo.uordblks); page += numberToHTMLTr("Memory in free big blocks", mallocInfo.fordblks); struct stat processInfo; if (!stat(String::format("/proc/%u/as", getpid()).latin1().data(), &processInfo)) page += numberToHTMLTr("Process total mapped memory", processInfo.st_size); page += "</table>"; #endif page += "</body></html>"; return page; }
String memoryPage() { String page; // generate memory information page = "<html><head><title>BlackBerry Browser Memory Information</title></head><body><h2>BlackBerry Browser Memory Information</h2>"; // generate cache information MemoryCache* cacheInc = memoryCache(); MemoryCache::Statistics cacheStat = cacheInc->getStatistics(); page += "<h2>Cache Information</h2>" "<table align=\"center\" rules=\"all\"><tr> <th>Item</th> <th>Count</th> <th>Size<br>KB</th> <th>Living<br>KB</th> <th>Decoded<br>KB</th></tr>"; MemoryCache::TypeStatistic total; total.count = cacheStat.images.count + cacheStat.cssStyleSheets.count + cacheStat.scripts.count + cacheStat.xslStyleSheets.count + cacheStat.fonts.count; total.size = cacheInc->totalSize(); total.liveSize = cacheStat.images.liveSize + cacheStat.cssStyleSheets.liveSize + cacheStat.scripts.liveSize + cacheStat.xslStyleSheets.liveSize + cacheStat.fonts.liveSize; total.decodedSize = cacheStat.images.decodedSize + cacheStat.cssStyleSheets.decodedSize + cacheStat.scripts.decodedSize + cacheStat.xslStyleSheets.decodedSize + cacheStat.fonts.decodedSize; page += cacheTypeStatisticToHTMLTr("Total", total); page += cacheTypeStatisticToHTMLTr("Images", cacheStat.images); page += cacheTypeStatisticToHTMLTr("CSS Style Sheets", cacheStat.cssStyleSheets); page += cacheTypeStatisticToHTMLTr("Scripts", cacheStat.scripts); #if ENABLE(XSLT) page += cacheTypeStatisticToHTMLTr("XSL Style Sheets", cacheStat.xslStyleSheets); #endif page += cacheTypeStatisticToHTMLTr("Fonts", cacheStat.fonts); page += "</table>"; #if !defined(PUBLIC_BUILD) || !PUBLIC_BUILD // JS engine memory usage. JSC::GlobalMemoryStatistics jscMemoryStat = JSC::globalMemoryStatistics(); JSC::Heap& mainHeap = JSDOMWindow::commonJSGlobalData()->heap; OwnPtr<JSC::TypeCountSet> objectTypeCounts = mainHeap.objectTypeCounts(); OwnPtr<JSC::TypeCountSet> protectedObjectTypeCounts = mainHeap.protectedObjectTypeCounts(); page += "<h2>JS engine memory usage</h2><table align=\"center\" rules=\"all\">"; page += numberToHTMLTr("Stack size", jscMemoryStat.stackBytes); page += numberToHTMLTr("JIT memory usage", jscMemoryStat.JITBytes); page += numberToHTMLTr("Main heap capacity", mainHeap.capacity()); page += numberToHTMLTr("Main heap size", mainHeap.size()); page += numberToHTMLTr("Object count", mainHeap.objectCount()); page += numberToHTMLTr("Global object count", mainHeap.globalObjectCount()); page += numberToHTMLTr("Protected object count", mainHeap.protectedObjectCount()); page += numberToHTMLTr("Protected global object count", mainHeap.protectedGlobalObjectCount()); page += "</table>"; page += "<h3>Object type counts</h3><table align=\"center\" rules=\"all\">"; dumpJSCTypeCountSetToTableHTML(page, objectTypeCounts.get()); page += "</table>"; page += "<h3>Protected object type counts</h3><table align=\"center\" rules=\"all\">"; dumpJSCTypeCountSetToTableHTML(page, protectedObjectTypeCounts.get()); page += "</table>"; // Malloc info. struct mallinfo mallocInfo = mallinfo(); page += "<h2>Malloc Information</h2><table align=\"center\" rules=\"all\">"; page += numberToHTMLTr("Total space in use", mallocInfo.usmblks + mallocInfo.uordblks); page += numberToHTMLTr("Total space in free blocks", mallocInfo.fsmblks + mallocInfo.fordblks); page += numberToHTMLTr("Size of the arena", mallocInfo.arena); page += numberToHTMLTr("Number of big blocks in use", mallocInfo.ordblks); page += numberToHTMLTr("Number of small blocks in use", mallocInfo.smblks); page += numberToHTMLTr("Number of header blocks in use", mallocInfo.hblks); page += numberToHTMLTr("Space in header block headers", mallocInfo.hblkhd); page += numberToHTMLTr("Space in small blocks in use", mallocInfo.usmblks); page += numberToHTMLTr("Memory in free small blocks", mallocInfo.fsmblks); page += numberToHTMLTr("Space in big blocks in use", mallocInfo.uordblks); page += numberToHTMLTr("Memory in free big blocks", mallocInfo.fordblks); struct stat processInfo; if (!stat(String::format("/proc/%u/as", getpid()).latin1().data(), &processInfo)) page += numberToHTMLTr("Process total mapped memory", processInfo.st_size); page += "</table>"; #endif page += "</body></html>"; return page; }