summaryrefslogtreecommitdiffstats
path: root/Source/WebKit2/Shared/WebMemorySampler.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/Shared/WebMemorySampler.h')
-rw-r--r--Source/WebKit2/Shared/WebMemorySampler.h112
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