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