WebKit/win/WebCoreStatistics.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     1 /*
       
     2  * Copyright (C) 2008 Apple Inc. All Rights Reserved.
       
     3  *
       
     4  * Redistribution and use in source and binary forms, with or without
       
     5  * modification, are permitted provided that the following conditions
       
     6  * are met:
       
     7  * 1. Redistributions of source code must retain the above copyright
       
     8  *    notice, this list of conditions and the following disclaimer.
       
     9  * 2. Redistributions in binary form must reproduce the above copyright
       
    10  *    notice, this list of conditions and the following disclaimer in the
       
    11  *    documentation and/or other materials provided with the distribution.
       
    12  *
       
    13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
       
    14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       
    15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       
    16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
       
    17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       
    18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       
    19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       
    20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
       
    21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
       
    22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
       
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
       
    24  */
       
    25 
       
    26 #include "config.h"
       
    27 #include "WebKitDLL.h"
       
    28 #include "WebCoreStatistics.h"
       
    29 
       
    30 #include "COMPropertyBag.h"
       
    31 #include <JavaScriptCore/JSLock.h>
       
    32 #include <WebCore/FontCache.h>
       
    33 #include <WebCore/GlyphPageTreeNode.h>
       
    34 #include <WebCore/IconDatabase.h>
       
    35 #include <WebCore/JSDOMWindow.h>
       
    36 
       
    37 using namespace JSC;
       
    38 using namespace WebCore;
       
    39 
       
    40 // WebCoreStatistics ---------------------------------------------------------------------------
       
    41 
       
    42 WebCoreStatistics::WebCoreStatistics()
       
    43 : m_refCount(0)
       
    44 {
       
    45     gClassCount++;
       
    46     gClassNameCount.add("WebCoreStatistics");
       
    47 }
       
    48 
       
    49 WebCoreStatistics::~WebCoreStatistics()
       
    50 {
       
    51     gClassCount--;
       
    52     gClassNameCount.remove("WebCoreStatistics");
       
    53 }
       
    54 
       
    55 WebCoreStatistics* WebCoreStatistics::createInstance()
       
    56 {
       
    57     WebCoreStatistics* instance = new WebCoreStatistics();
       
    58     instance->AddRef();
       
    59     return instance;
       
    60 }
       
    61 
       
    62 // IUnknown -------------------------------------------------------------------
       
    63 
       
    64 HRESULT STDMETHODCALLTYPE WebCoreStatistics::QueryInterface(REFIID riid, void** ppvObject)
       
    65 {
       
    66     *ppvObject = 0;
       
    67     if (IsEqualGUID(riid, IID_IUnknown))
       
    68         *ppvObject = static_cast<WebCoreStatistics*>(this);
       
    69     else if (IsEqualGUID(riid, IID_IWebCoreStatistics))
       
    70         *ppvObject = static_cast<WebCoreStatistics*>(this);
       
    71     else
       
    72         return E_NOINTERFACE;
       
    73 
       
    74     AddRef();
       
    75     return S_OK;
       
    76 }
       
    77 
       
    78 ULONG STDMETHODCALLTYPE WebCoreStatistics::AddRef(void)
       
    79 {
       
    80     return ++m_refCount;
       
    81 }
       
    82 
       
    83 ULONG STDMETHODCALLTYPE WebCoreStatistics::Release(void)
       
    84 {
       
    85     ULONG newRef = --m_refCount;
       
    86     if (!newRef)
       
    87         delete(this);
       
    88 
       
    89     return newRef;
       
    90 }
       
    91 
       
    92 // IWebCoreStatistics ------------------------------------------------------------------------------
       
    93 
       
    94 HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptObjectsCount( 
       
    95     /* [retval][out] */ UINT* count)
       
    96 {
       
    97     if (!count)
       
    98         return E_POINTER;
       
    99 
       
   100     JSLock lock(SilenceAssertionsOnly);
       
   101     *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.objectCount();
       
   102     return S_OK;
       
   103 }
       
   104 
       
   105 HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptGlobalObjectsCount( 
       
   106     /* [retval][out] */ UINT* count)
       
   107 {
       
   108     if (!count)
       
   109         return E_POINTER;
       
   110 
       
   111     JSLock lock(SilenceAssertionsOnly);
       
   112     *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.globalObjectCount();
       
   113     return S_OK;
       
   114 }
       
   115 
       
   116 HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptProtectedObjectsCount( 
       
   117     /* [retval][out] */ UINT* count)
       
   118 {
       
   119     if (!count)
       
   120         return E_POINTER;
       
   121 
       
   122     JSLock lock(SilenceAssertionsOnly);
       
   123     *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.protectedObjectCount();
       
   124     return S_OK;
       
   125 }
       
   126 
       
   127 HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptProtectedGlobalObjectsCount( 
       
   128     /* [retval][out] */ UINT* count)
       
   129 {
       
   130     if (!count)
       
   131         return E_POINTER;
       
   132 
       
   133     JSLock lock(SilenceAssertionsOnly);
       
   134     *count = (UINT)JSDOMWindow::commonJSGlobalData()->heap.protectedGlobalObjectCount();
       
   135     return S_OK;
       
   136 }
       
   137 
       
   138 HRESULT STDMETHODCALLTYPE WebCoreStatistics::javaScriptProtectedObjectTypeCounts( 
       
   139     /* [retval][out] */ IPropertyBag2** typeNamesAndCounts)
       
   140 {
       
   141     JSLock lock(SilenceAssertionsOnly);
       
   142     OwnPtr<HashCountedSet<const char*> > jsObjectTypeNames(JSDOMWindow::commonJSGlobalData()->heap.protectedObjectTypeCounts());
       
   143     typedef HashCountedSet<const char*>::const_iterator Iterator;
       
   144     Iterator end = jsObjectTypeNames->end();
       
   145     HashMap<String, int> typeCountMap;
       
   146     for (Iterator current = jsObjectTypeNames->begin(); current != end; ++current)
       
   147         typeCountMap.set(current->first, current->second);
       
   148 
       
   149     COMPtr<IPropertyBag2> results(AdoptCOM, COMPropertyBag<int>::createInstance(typeCountMap));
       
   150     results.copyRefTo(typeNamesAndCounts);
       
   151     return S_OK;
       
   152 }
       
   153 
       
   154 HRESULT STDMETHODCALLTYPE WebCoreStatistics::iconPageURLMappingCount( 
       
   155     /* [retval][out] */ UINT* count)
       
   156 {
       
   157     if (!count)
       
   158         return E_POINTER;
       
   159     *count = (UINT) iconDatabase()->pageURLMappingCount();
       
   160     return S_OK;
       
   161 }
       
   162 
       
   163 HRESULT STDMETHODCALLTYPE WebCoreStatistics::iconRetainedPageURLCount( 
       
   164     /* [retval][out] */ UINT *count)
       
   165 {
       
   166     if (!count)
       
   167         return E_POINTER;
       
   168     *count = (UINT) iconDatabase()->retainedPageURLCount();
       
   169     return S_OK;
       
   170 }
       
   171 
       
   172 HRESULT STDMETHODCALLTYPE WebCoreStatistics::iconRecordCount( 
       
   173     /* [retval][out] */ UINT *count)
       
   174 {
       
   175     if (!count)
       
   176         return E_POINTER;
       
   177     *count = (UINT) iconDatabase()->iconRecordCount();
       
   178     return S_OK;
       
   179 }
       
   180 
       
   181 HRESULT STDMETHODCALLTYPE WebCoreStatistics::iconsWithDataCount( 
       
   182     /* [retval][out] */ UINT *count)
       
   183 {
       
   184     if (!count)
       
   185         return E_POINTER;
       
   186     *count = (UINT) iconDatabase()->iconRecordCountWithData();
       
   187     return S_OK;
       
   188 }
       
   189 
       
   190 HRESULT STDMETHODCALLTYPE WebCoreStatistics::cachedFontDataCount( 
       
   191     /* [retval][out] */ UINT *count)
       
   192 {
       
   193     if (!count)
       
   194         return E_POINTER;
       
   195     *count = (UINT) fontCache()->fontDataCount();
       
   196     return S_OK;
       
   197 }
       
   198 
       
   199 HRESULT STDMETHODCALLTYPE WebCoreStatistics::cachedFontDataInactiveCount( 
       
   200     /* [retval][out] */ UINT *count)
       
   201 {
       
   202     if (!count)
       
   203         return E_POINTER;
       
   204     *count = (UINT) fontCache()->inactiveFontDataCount();
       
   205     return S_OK;
       
   206 }
       
   207 
       
   208 HRESULT STDMETHODCALLTYPE WebCoreStatistics::purgeInactiveFontData(void)
       
   209 {
       
   210     fontCache()->purgeInactiveFontData();
       
   211     return S_OK;
       
   212 }
       
   213 
       
   214 HRESULT STDMETHODCALLTYPE WebCoreStatistics::glyphPageCount( 
       
   215     /* [retval][out] */ UINT *count)
       
   216 {
       
   217     if (!count)
       
   218         return E_POINTER;
       
   219     *count = (UINT) GlyphPageTreeNode::treeGlyphPageCount();
       
   220     return S_OK;
       
   221 }