diff options
Diffstat (limited to 'Source/WebKit2/Shared/WebMemorySampler.h')
-rw-r--r-- | Source/WebKit2/Shared/WebMemorySampler.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/Source/WebKit2/Shared/WebMemorySampler.h b/Source/WebKit2/Shared/WebMemorySampler.h new file mode 100644 index 0000000..93254d9 --- /dev/null +++ b/Source/WebKit2/Shared/WebMemorySampler.h @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The MemorySampler class samples a number of internal and external memory + * metrics every second while running. Sample data is written to a log file. + * Sampling occurs over a duration specified when started. If duration is set + * to 0 (default), the memory sampler will run indefinitely until the stop + * function is called. MemorySampler allows the option of sampling "in use" + * memory (committed memory minus free list byte count) or committed memory for + * any allocator which keeps a free list. This includes FastMalloc and the + * JavaScriptCore heap at this time. + * The following memory metrics are recorded: + * + * WebCore + * - FastMalloc allocations bytes (in use or committed) + * JavaScriptCore + * - Garbage collector heap bytes (in use or committed) + * - Stack bytes (committed only!) + * - JIT Code bytes (committed only!) + * Malloc zones + * - In use bytes for the following zones: + * * Default zone (in use or committed) + * * DispCon zone (in use or committed) + * * Purgable zone (in use or committed) + * Task Info + * - Resident size memory (RSIZE) + */ + +#ifndef WebMemorySampler_h +#define WebMemorySampler_h + +#if ENABLE(MEMORY_SAMPLER) + +#include "SandboxExtension.h" +#include <WebCore/Timer.h> +#include <WebCore/FileSystem.h> +#include <wtf/Noncopyable.h> +#include <wtf/RefPtr.h> +#include <wtf/text/WTFString.h> +#include <wtf/Vector.h> + +namespace WebKit { + +struct SystemMallocStats; + +struct WebMemoryStatistics +{ + Vector<String> keys; + Vector<size_t> values; +}; + +class WebMemorySampler : public Noncopyable { + +public: + static WebMemorySampler* shared(); + void start(const double interval=0); + void start(const SandboxExtension::Handle&, const String&, const double interval=0); + void stop(); + bool isRunning() const; + +private: + WebMemorySampler(); + ~WebMemorySampler(); + + void initializeTempLogFile(); + void initializeSandboxedLogFile(const SandboxExtension::Handle&, const String&); + void writeHeaders(); + void initializeTimers(double); + void sampleTimerFired(WebCore::Timer<WebMemorySampler>*); + void stopTimerFired(WebCore::Timer<WebMemorySampler>*); + void appendCurrentMemoryUsageToFile(WebCore::PlatformFileHandle&); + + SystemMallocStats sampleSystemMalloc() const; + size_t sampleProcessCommittedBytes() const; + WebMemoryStatistics sampleWebKit() const; + String processName() const; + + WebCore::PlatformFileHandle m_sampleLogFile; + String m_sampleLogFilePath; + String m_separator; + WebCore::Timer<WebMemorySampler> m_sampleTimer; + WebCore::Timer<WebMemorySampler> m_stopTimer; + bool m_isRunning; + double m_runningTime; + RefPtr<SandboxExtension> m_sampleLogSandboxExtension; +}; + +} + +#endif + +#endif |