From b07f2909abb3f48f25a0e96f2a41b55199023375 Mon Sep 17 00:00:00 2001 From: "mbelshe@google.com" Date: Fri, 5 Jun 2009 07:33:21 +0000 Subject: 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 --- webkit/extensions/v8/benchmarking_extension.cc | 63 ++++++++++++++++++++++++++ webkit/extensions/v8/benchmarking_extension.h | 23 ++++++++++ 2 files changed, 86 insertions(+) create mode 100644 webkit/extensions/v8/benchmarking_extension.cc create mode 100644 webkit/extensions/v8/benchmarking_extension.h (limited to 'webkit/extensions') 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 GetNativeFunction( + v8::Handle 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(); + } + + static v8::Handle CloseConnections(const v8::Arguments& args) { + webkit_glue::CloseIdleConnections(); + return v8::Undefined(); + } + + static v8::Handle 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_ -- cgit v1.1