summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebKit/Android.mk1
-rw-r--r--WebKit/android/WebCoreSupport/V8Counters.cpp115
-rw-r--r--WebKit/android/WebCoreSupport/V8Counters.h76
-rw-r--r--WebKit/android/jni/WebCoreFrameBridge.cpp2
-rw-r--r--WebKit/android/jni/WebViewCore.cpp12
5 files changed, 206 insertions, 0 deletions
diff --git a/WebKit/Android.mk b/WebKit/Android.mk
index ca2a7ff..345bba3 100644
--- a/WebKit/Android.mk
+++ b/WebKit/Android.mk
@@ -26,6 +26,7 @@ LOCAL_SRC_FILES := \
android/WebCoreSupport/MediaPlayerPrivateAndroid.cpp \
android/WebCoreSupport/PlatformBridge.cpp \
android/WebCoreSupport/ResourceLoaderAndroid.cpp \
+ android/WebCoreSupport/V8Counters.cpp \
\
android/RenderSkinAndroid.cpp \
android/RenderSkinButton.cpp \
diff --git a/WebKit/android/WebCoreSupport/V8Counters.cpp b/WebKit/android/WebCoreSupport/V8Counters.cpp
new file mode 100644
index 0000000..c62efb9
--- /dev/null
+++ b/WebKit/android/WebCoreSupport/V8Counters.cpp
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * 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 THE COPYRIGHT HOLDERS ``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 THE COPYRIGHT OWNER OR
+ * 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.
+ */
+
+#if USE(V8)
+
+#ifdef ANROID_INSTRUMENT
+
+#define LOG_TAG "WebCore"
+
+#include "config.h"
+#include "V8Counters.h"
+#include "NotImplemented.h"
+
+#include <CString.h>
+#include <StringHash.h>
+#include <utils/Log.h>
+
+namespace WebCore {
+
+V8Counters::Counter::Counter(bool isHistogram)
+ : m_count(0), m_sampleTotal(0), m_isHistogram(isHistogram) { }
+
+void V8Counters::Counter::addSample(int sample)
+{
+ m_count++;
+ m_sampleTotal += sample;
+}
+
+HashMap<String, V8Counters::Counter*> V8Counters::m_counters;
+
+// static
+int* V8Counters::counterForName(const char* name)
+{
+ Counter* counter = m_counters.get(name);
+ if (!counter) {
+ counter = new Counter(false);
+ m_counters.add(name, counter);
+ }
+ return *counter;
+}
+
+// static
+void* V8Counters::createHistogram(const char* name, int min, int max,
+ size_t buckets)
+{
+ Counter* counter = new Counter(true);
+ m_counters.add(name, counter);
+ return counter;
+}
+
+// static
+void V8Counters::addHistogramSample(void* histogram, int sample)
+{
+ Counter* counter = reinterpret_cast<Counter*>(histogram);
+ counter->addSample(sample);
+}
+
+// static
+void V8Counters::initCounters()
+{
+ static bool isInitialized = false;
+ if (!isInitialized) {
+ v8::V8::SetCounterFunction(counterForName);
+ v8::V8::SetCreateHistogramFunction(createHistogram);
+ v8::V8::SetAddHistogramSampleFunction(addHistogramSample);
+ isInitialized = true;
+ }
+}
+
+// static
+void V8Counters::dumpCounters()
+{
+ LOGD("+----------------------------------------+-------------+\n");
+ LOGD("| Name | Value |\n");
+ LOGD("+----------------------------------------+-------------+\n");
+ typedef HashMap<String, V8Counters::Counter*>::iterator CounterIterator;
+ for (CounterIterator iter = m_counters.begin(); iter != m_counters.end(); ++iter) {
+ Counter* counter = iter->second;
+ if (counter->isHistogram()) {
+ LOGD("| c:%-36s | %11i |\n", iter->first.latin1().data(), counter->count());
+ LOGD("| t:%-36s | %11i |\n", iter->first.latin1().data(), counter->sampleTotal());
+ } else {
+ LOGD("| %-38s | %11i |\n", iter->first.latin1().data(), counter->count());
+ }
+ }
+ LOGD("+----------------------------------------+-------------+\n");
+}
+
+}
+
+#endif // ANDROID_INSTRUMENT
+
+#endif // USE(V8)
diff --git a/WebKit/android/WebCoreSupport/V8Counters.h b/WebKit/android/WebCoreSupport/V8Counters.h
new file mode 100644
index 0000000..dcce068
--- /dev/null
+++ b/WebKit/android/WebCoreSupport/V8Counters.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2010, The Android Open Source Project
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * 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 THE COPYRIGHT HOLDERS ``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 THE COPYRIGHT OWNER OR
+ * 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.
+ */
+
+#ifndef V8Counters_h
+#define V8Counters_h
+
+#if USE(V8)
+
+#ifdef ANDROID_INSTRUMENT
+
+#include <PlatformString.h>
+#include <v8.h>
+
+namespace WebCore {
+
+class V8Counters {
+public:
+ // Counter callbacks, see v8.h
+ static int* counterForName(const char* name);
+
+ static void* createHistogram(const char* name,
+ int min,
+ int max,
+ size_t buckets);
+
+ static void addHistogramSample(void* histogram, int sample);
+
+ static void initCounters();
+ static void dumpCounters();
+private:
+ class Counter {
+ public:
+ Counter(bool isHistogram);
+
+ int count() { return m_count; }
+ int sampleTotal() { return m_sampleTotal; }
+ bool isHistogram() { return m_isHistogram; }
+ void addSample(int32_t sample);
+
+ operator int*() { return &m_count; }
+ private:
+ int m_count;
+ int m_sampleTotal;
+ bool m_isHistogram;
+ };
+
+ static HashMap<String, Counter*> m_counters;
+};
+
+}
+
+#endif // ANDROID_INSTRUMENT
+#endif // USE(V8)
+#endif // V8Counters_h
diff --git a/WebKit/android/jni/WebCoreFrameBridge.cpp b/WebKit/android/jni/WebCoreFrameBridge.cpp
index e2a2f95..84cd70c 100644
--- a/WebKit/android/jni/WebCoreFrameBridge.cpp
+++ b/WebKit/android/jni/WebCoreFrameBridge.cpp
@@ -68,6 +68,7 @@
#elif USE(V8)
#include "JavaNPObjectV8.h"
#include "JavaInstanceV8.h"
+#include "V8Counters.h"
#endif // USE(JSC)
#include "KURL.h"
@@ -863,6 +864,7 @@ static void CreateFrame(JNIEnv* env, jobject obj, jobject javaview, jobject jAss
ScriptController::initializeThreading();
#ifdef ANDROID_INSTRUMENT
+ V8Counters::initCounters();
TimeCounterAuto counter(TimeCounter::NativeCallbackTimeCounter);
#endif
ChromeClientAndroid* chromeC = new ChromeClientAndroid;
diff --git a/WebKit/android/jni/WebViewCore.cpp b/WebKit/android/jni/WebViewCore.cpp
index 6dbd949..2ba29b9 100644
--- a/WebKit/android/jni/WebViewCore.cpp
+++ b/WebKit/android/jni/WebViewCore.cpp
@@ -110,6 +110,7 @@
#if USE(V8)
#include "CString.h"
#include "ScriptController.h"
+#include "V8Counters.h"
#endif
#if DEBUG_NAV_UI
@@ -2851,6 +2852,15 @@ static void DumpNavTree(JNIEnv *env, jobject obj)
viewImpl->dumpNavTree();
}
+static void DumpV8Counters(JNIEnv*, jobject)
+{
+#if USE(V8)
+#ifdef ANDROID_INSTRUMENT
+ V8Counters::dumpCounters();
+#endif
+#endif
+}
+
static void SetJsFlags(JNIEnv *env, jobject obj, jstring flags)
{
#if USE(V8)
@@ -3105,6 +3115,8 @@ static JNINativeMethod gJavaWebViewCoreMethods[] = {
(void*) DumpRenderTree },
{ "nativeDumpNavTree", "()V",
(void*) DumpNavTree },
+ { "nativeDumpV8Counters", "()V",
+ (void*) DumpV8Counters },
{ "nativeSetNewStorageLimit", "(J)V",
(void*) SetNewStorageLimit },
{ "nativeGeolocationPermissionsProvide", "(Ljava/lang/String;ZZ)V",