18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebCoreStatistics.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#import "DOMElementInternal.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebCache.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 3468513a70bcd92384395513322f1b801e7bf9c729Steve Block#import <JavaScriptCore/JSLock.h> 3568513a70bcd92384395513322f1b801e7bf9c729Steve Block#import <JavaScriptCore/MemoryStatistics.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Console.h> 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FontCache.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Frame.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/GCController.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/GlyphPageTreeNode.h> 41967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#import <WebCore/GraphicsContext.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/IconDatabase.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/JSDOMWindow.h> 440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/PageCache.h> 455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#import <WebCore/PrintContext.h> 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/RenderTreeAsText.h> 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/RenderView.h> 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebCoreStatistics 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSArray *)statistics 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [WebCache statistics]; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptObjectsCount 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return JSDOMWindow::commonJSGlobalData()->heap.objectCount(); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptGlobalObjectsCount 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return JSDOMWindow::commonJSGlobalData()->heap.globalObjectCount(); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptProtectedObjectsCount 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return JSDOMWindow::commonJSGlobalData()->heap.protectedObjectCount(); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptProtectedGlobalObjectsCount 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return JSDOMWindow::commonJSGlobalData()->heap.protectedGlobalObjectCount(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSCountedSet *)javaScriptProtectedObjectTypeCounts 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSCountedSet *result = [NSCountedSet set]; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block OwnPtr<TypeCountSet> counts(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts()); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HashCountedSet<const char*>::iterator end = counts->end(); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (HashCountedSet<const char*>::iterator it = counts->begin(); it != end; ++it) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < it->second; ++i) 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [result addObject:[NSString stringWithUTF8String:it->first]]; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 988a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block+ (NSCountedSet *)javaScriptObjectTypeCounts 998a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 1008a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block JSLock lock(SilenceAssertionsOnly); 1018a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block NSCountedSet *result = [NSCountedSet set]; 1038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block OwnPtr<TypeCountSet> counts(JSDOMWindow::commonJSGlobalData()->heap.objectTypeCounts()); 1058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block HashCountedSet<const char*>::iterator end = counts->end(); 1068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (HashCountedSet<const char*>::iterator it = counts->begin(); it != end; ++it) 1078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block for (unsigned i = 0; i < it->second; ++i) 1088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block [result addObject:[NSString stringWithUTF8String:it->first]]; 1098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1108a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return result; 1118a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 1128a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)garbageCollectJavaScriptObjects 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gcController().garbageCollectNow(); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 118563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark+ (void)garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging:(BOOL)waitUntilDone 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gcController().garbageCollectOnAlternateThreadForDebugging(waitUntilDone); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)iconPageURLMappingCount 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return iconDatabase().pageURLMappingCount(); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)iconRetainedPageURLCount 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return iconDatabase().retainedPageURLCount(); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)iconRecordCount 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return iconDatabase().iconRecordCount(); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)iconsWithDataCount 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return iconDatabase().iconRecordCountWithData(); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)cachedFontDataCount 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return fontCache()->fontDataCount(); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)cachedFontDataInactiveCount 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return fontCache()->inactiveFontDataCount(); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)purgeInactiveFontData 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project fontCache()->purgeInactiveFontData(); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)glyphPageCount 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return GlyphPageTreeNode::treeGlyphPageCount(); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)shouldPrintExceptions 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Console::shouldPrintExceptions(); 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)setShouldPrintExceptions:(BOOL)print 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Console::setShouldPrintExceptions(print); 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)emptyCache 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebCache empty]; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)setCacheDisabled:(BOOL)disabled 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebCache setDisabled:disabled]; 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)startIgnoringWebCoreNodeLeaks 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Node::startIgnoringLeaks(); 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (void)stopIgnoringWebCoreNodeLeaks 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCore::Node::stopIgnoringLeaks(); 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 195635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (NSDictionary *)memoryStatistics 196635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 197635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WTF::FastMallocStatistics fastMallocStatistics = WTF::fastMallocStatistics(); 19868513a70bcd92384395513322f1b801e7bf9c729Steve Block 1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 2002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block size_t heapSize = JSDOMWindow::commonJSGlobalData()->heap.size(); 2012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block size_t heapFree = JSDOMWindow::commonJSGlobalData()->heap.capacity() - heapSize; 20268513a70bcd92384395513322f1b801e7bf9c729Steve Block GlobalMemoryStatistics globalMemoryStats = globalMemoryStatistics(); 20368513a70bcd92384395513322f1b801e7bf9c729Steve Block 204635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [NSDictionary dictionaryWithObjectsAndKeys: 205dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [NSNumber numberWithInt:fastMallocStatistics.reservedVMBytes], @"FastMallocReservedVMBytes", 206dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [NSNumber numberWithInt:fastMallocStatistics.committedVMBytes], @"FastMallocCommittedVMBytes", 207dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [NSNumber numberWithInt:fastMallocStatistics.freeListBytes], @"FastMallocFreeListBytes", 2082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [NSNumber numberWithInt:heapSize], @"JavaScriptHeapSize", 2092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block [NSNumber numberWithInt:heapFree], @"JavaScriptFreeSize", 21068513a70bcd92384395513322f1b801e7bf9c729Steve Block [NSNumber numberWithUnsignedInt:(unsigned int)globalMemoryStats.stackBytes], @"JavaScriptStackSize", 21168513a70bcd92384395513322f1b801e7bf9c729Steve Block [NSNumber numberWithUnsignedInt:(unsigned int)globalMemoryStats.JITBytes], @"JavaScriptJITSize", 212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project nil]; 213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (void)returnFreeMemoryToSystem 216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WTF::releaseFastMallocFreeMemory(); 218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch+ (int)cachedPageCount 2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return pageCache()->pageCount(); 2230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch+ (int)cachedFrameCount 2260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return pageCache()->frameCount(); 2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch+ (int)autoreleasedPageCount 2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return pageCache()->autoreleasedPageCount(); 2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 2340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Deprecated 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptNoGCAllowedObjectsCount 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptReferencedObjectsCount 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return JSDOMWindow::commonJSGlobalData()->heap.protectedObjectCount(); 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSSet *)javaScriptRootObjectClasses 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self javaScriptRootObjectTypeCounts]; 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (size_t)javaScriptInterpretersCount 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self javaScriptProtectedGlobalObjectsCount]; 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSCountedSet *)javaScriptRootObjectTypeCounts 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self javaScriptProtectedObjectTypeCounts]; 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebFrame (WebKitDebug) 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 26621939df44de1705786c545cd1bf519d47250322dBen Murdoch- (NSString *)renderTreeAsExternalRepresentationForPrinting:(BOOL)forPrinting 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 26821939df44de1705786c545cd1bf519d47250322dBen Murdoch return externalRepresentation(_private->coreFrame, forPrinting ? RenderAsTextPrintingMode : RenderAsTextBehaviorNormal); 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 271cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block- (NSString *)counterValueForElement:(DOMElement*)element 272cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 273cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return counterValueForElement(core(element)); 274cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 275cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2765e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block- (int)pageNumberForElement:(DOMElement*)element:(float)pageWidthInPixels:(float)pageHeightInPixels 2775e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 2785e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return PrintContext::pageNumberForElement(core(element), FloatSize(pageWidthInPixels, pageHeightInPixels)); 2795e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 2805e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 2818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block- (int)numberOfPages:(float)pageWidthInPixels:(float)pageHeightInPixels 2828a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block{ 2838a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return PrintContext::numberOfPages(_private->coreFrame, FloatSize(pageWidthInPixels, pageHeightInPixels)); 2848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block} 2858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 28606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (NSString *)pageProperty:(const char *)propertyName:(int)pageNumber 28706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 28806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return PrintContext::pageProperty(_private->coreFrame, propertyName, pageNumber); 28906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 29006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 29106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (bool)isPageBoxVisible:(int)pageNumber 29206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 29306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return PrintContext::isPageBoxVisible(_private->coreFrame, pageNumber); 29406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 29506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 296ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block- (NSString *)pageSizeAndMarginsInPixels:(int)pageNumber:(int)width:(int)height:(int)marginTop:(int)marginRight:(int)marginBottom:(int)marginLeft 29706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 298ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return PrintContext::pageSizeAndMarginsInPixels(_private->coreFrame, pageNumber, width, height, marginTop, marginRight, marginBottom, marginLeft); 29906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 300967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 301967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (void)printToCGContext:(CGContextRef)cgContext:(float)pageWidthInPixels:(float)pageHeightInPixels 302967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 303967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch Frame* coreFrame = _private->coreFrame; 304967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!coreFrame) 305967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return; 306967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 307967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch GraphicsContext graphicsContext(cgContext); 308967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch PrintContext::spoolAllPagesWithBoundaries(coreFrame, graphicsContext, FloatSize(pageWidthInPixels, pageHeightInPixels)); 309967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 310967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 312