summaryrefslogtreecommitdiffstats
path: root/webkit/extensions
diff options
context:
space:
mode:
authormbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-05 07:33:21 +0000
committermbelshe@google.com <mbelshe@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-05 07:33:21 +0000
commitb07f2909abb3f48f25a0e96f2a41b55199023375 (patch)
tree6fcd75248dfe672a8f9e87c4b1504ab235d7013e /webkit/extensions
parentafb14af4fd9db9c357b391c1cbb6b95e25bb82a3 (diff)
downloadchromium_src-b07f2909abb3f48f25a0e96f2a41b55199023375.zip
chromium_src-b07f2909abb3f48f25a0e96f2a41b55199023375.tar.gz
chromium_src-b07f2909abb3f48f25a0e96f2a41b55199023375.tar.bz2
Add an extension to expose some primitives to JS for doing
benchmarking from within Chrome. Because the JS resides in the renderer and the HTTP logic resides in the browser, this required creation of two new, control messages which can be sent from the renderer to the browser. These are controlled under a new commandline option "--enable-benchmarking" BUG=6754 TEST=none Review URL: http://codereview.chromium.org/119191 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17722 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/extensions')
-rw-r--r--webkit/extensions/v8/benchmarking_extension.cc63
-rw-r--r--webkit/extensions/v8/benchmarking_extension.h23
2 files changed, 86 insertions, 0 deletions
diff --git a/webkit/extensions/v8/benchmarking_extension.cc b/webkit/extensions/v8/benchmarking_extension.cc
new file mode 100644
index 0000000..e2e926d
--- /dev/null
+++ b/webkit/extensions/v8/benchmarking_extension.cc
@@ -0,0 +1,63 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "config.h"
+#include "Cache.h"
+#include "webkit/extensions/v8/benchmarking_extension.h"
+#include "webkit/glue/webkit_glue.h"
+
+namespace extensions_v8 {
+
+const char* kBenchmarkingExtensionName = "v8/Benchmarking";
+
+class BenchmarkingWrapper : public v8::Extension {
+ public:
+ BenchmarkingWrapper() :
+ v8::Extension(kBenchmarkingExtensionName,
+ "if (typeof(chromium) == 'undefined') {"
+ " chromium = {};"
+ "};"
+ "if (typeof(chromium.benchmarking) == 'undefined') {"
+ " chromium.benchmarking = {};"
+ "};"
+ "chromium.benchmarking.clearCache = function() {"
+ " native function ClearCache();"
+ " ClearCache();"
+ "};"
+ "chromium.benchmarking.closeConnections = function() {"
+ " native function CloseConnections();"
+ " CloseConnections();"
+ "};") {}
+
+ virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+ v8::Handle<v8::String> name) {
+ if (name->Equals(v8::String::New("CloseConnections"))) {
+ return v8::FunctionTemplate::New(CloseConnections);
+ } else if (name->Equals(v8::String::New("ClearCache"))) {
+ return v8::FunctionTemplate::New(ClearCache);
+ }
+ return v8::Handle<v8::FunctionTemplate>();
+ }
+
+ static v8::Handle<v8::Value> CloseConnections(const v8::Arguments& args) {
+ webkit_glue::CloseIdleConnections();
+ return v8::Undefined();
+ }
+
+ static v8::Handle<v8::Value> ClearCache(const v8::Arguments& args) {
+ // TODO(mbelshe): should be enable/disable?
+ webkit_glue::SetCacheMode(false);
+
+ // Disabling and re-enabling the cache forces it to flush.
+ WebCore::cache()->setDisabled(true);
+ WebCore::cache()->setDisabled(false);
+ return v8::Undefined();
+ }
+};
+
+v8::Extension* BenchmarkingExtension::Get() {
+ return new BenchmarkingWrapper();
+}
+
+} // namespace extensions_v8
diff --git a/webkit/extensions/v8/benchmarking_extension.h b/webkit/extensions/v8/benchmarking_extension.h
new file mode 100644
index 0000000..0ce9850
--- /dev/null
+++ b/webkit/extensions/v8/benchmarking_extension.h
@@ -0,0 +1,23 @@
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Profiler is an extension to allow javascript access to the API for
+// an external profiler program (such as Quantify). The "External" part of the
+// name is to distinguish it from the built-in V8 Profiler.
+
+#ifndef WEBKIT_EXTENSIONS_V8_BENCHMARKING_EXTENSION_H_
+#define WEBKIT_EXTENSIONS_V8_BENCHMARKING_EXTENSION_H_
+
+#include "v8/include/v8.h"
+
+namespace extensions_v8 {
+
+class BenchmarkingExtension {
+ public:
+ static v8::Extension* Get();
+};
+
+} // namespace extensions_v8
+
+#endif // WEBKIT_EXTENSIONS_V8_BENCHMARKING_EXTENSION_H_