summaryrefslogtreecommitdiffstats
path: root/webkit/extensions/v8/benchmarking_extension.cc
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/v8/benchmarking_extension.cc
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/v8/benchmarking_extension.cc')
-rw-r--r--webkit/extensions/v8/benchmarking_extension.cc63
1 files changed, 63 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