diff options
author | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 21:26:28 +0000 |
---|---|---|
committer | asargent@chromium.org <asargent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 21:26:28 +0000 |
commit | 9b221756628153638da5db1e46ca5ab42e12e88f (patch) | |
tree | 908d7ba18dce8eaab48779f2a3371ea78a0f0d91 /webkit | |
parent | db811c343705e846aba6fe47015de1eb5bacaf14 (diff) | |
download | chromium_src-9b221756628153638da5db1e46ca5ab42e12e88f.zip chromium_src-9b221756628153638da5db1e46ca5ab42e12e88f.tar.gz chromium_src-9b221756628153638da5db1e46ca5ab42e12e88f.tar.bz2 |
Add API functions to control Quantify, as well as expose these
functions to javascript.
Review URL: http://codereview.chromium.org/40255
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11291 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/build/V8Bindings/SConscript | 1 | ||||
-rw-r--r-- | webkit/build/V8Bindings/V8Bindings.vcproj | 8 | ||||
-rw-r--r-- | webkit/extensions/v8/profiler_extension.cc | 89 | ||||
-rw-r--r-- | webkit/extensions/v8/profiler_extension.h | 24 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_shell_main.cc | 5 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_shell_switches.cc | 3 | ||||
-rw-r--r-- | webkit/tools/test_shell/test_shell_switches.h | 1 | ||||
-rw-r--r-- | webkit/webkit.gyp | 2 |
8 files changed, 133 insertions, 0 deletions
diff --git a/webkit/build/V8Bindings/SConscript b/webkit/build/V8Bindings/SConscript index 7739356..46417a7 100644 --- a/webkit/build/V8Bindings/SConscript +++ b/webkit/build/V8Bindings/SConscript @@ -391,6 +391,7 @@ inputs = [ '$WEBKIT_DIR/extensions/v8/gears_extension.cc', '$WEBKIT_DIR/extensions/v8/interval_extension.cc', '$WEBKIT_DIR/extensions/v8/playback_extension.cc', + '$WEBKIT_DIR/extensions/v8/profiler_extension.cc', ] if env.Bit('windows'): diff --git a/webkit/build/V8Bindings/V8Bindings.vcproj b/webkit/build/V8Bindings/V8Bindings.vcproj index 87d4964..1958c33 100644 --- a/webkit/build/V8Bindings/V8Bindings.vcproj +++ b/webkit/build/V8Bindings/V8Bindings.vcproj @@ -2699,6 +2699,14 @@ RelativePath="..\..\extensions\v8\playback_extension.h" > </File> + <File + RelativePath="..\..\extensions\v8\profiler_extension.cc" + > + </File> + <File + RelativePath="..\..\extensions\v8\profiler_extension.h" + > + </File> </Filter> <File RelativePath="..\..\port\bindings\v8\dom_wrapper_map.h" diff --git a/webkit/extensions/v8/profiler_extension.cc b/webkit/extensions/v8/profiler_extension.cc new file mode 100644 index 0000000..e4c64d1 --- /dev/null +++ b/webkit/extensions/v8/profiler_extension.cc @@ -0,0 +1,89 @@ +// 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 "webkit/extensions/v8/profiler_extension.h" + +#include "base/profiler.h" + +namespace extensions_v8 { + +const char* kProfilerExtensionName = "v8/Profiler"; + +class ProfilerWrapper : public v8::Extension { + public: + ProfilerWrapper() : + v8::Extension(kProfilerExtensionName, + "if (typeof(chromium) == 'undefined') {" + " chromium = {};" + "}" + "chromium.Profiler = function() {" + " native function ProfilerStart();" + " native function ProfilerStop();" + " native function ProfilerClearData();" + " native function ProfilerSetThreadName();" + " this.start = function() {" + " ProfilerStart();" + " };" + " this.stop = function() {" + " ProfilerStop();" + " };" + " this.clear = function() {" + " ProfilerClearData();" + " };" + " this.setThreadName = function(name) {" + " ProfilerSetThreadName(name);" + " };" + "};") {} + + virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( + v8::Handle<v8::String> name) { + if (name->Equals(v8::String::New("ProfilerStart"))) { + return v8::FunctionTemplate::New(ProfilerStart); + } else if (name->Equals(v8::String::New("ProfilerStop"))) { + return v8::FunctionTemplate::New(ProfilerStop); + } else if (name->Equals(v8::String::New("ProfilerClearData"))) { + return v8::FunctionTemplate::New(ProfilerClearData); + } else if (name->Equals(v8::String::New("ProfilerSetThreadName"))) { + return v8::FunctionTemplate::New(ProfilerSetThreadName); + } + return v8::Handle<v8::FunctionTemplate>(); + } + + static v8::Handle<v8::Value> ProfilerStart( + const v8::Arguments& args) { + base::Profiler::StartRecording(); + return v8::Undefined(); + } + + static v8::Handle<v8::Value> ProfilerStop( + const v8::Arguments& args) { + base::Profiler::StopRecording(); + return v8::Undefined(); + } + + static v8::Handle<v8::Value> ProfilerClearData( + const v8::Arguments& args) { + base::Profiler::ClearData(); + return v8::Undefined(); + } + + static v8::Handle<v8::Value> ProfilerSetThreadName( + const v8::Arguments& args) { + if (args.Length() >= 1 && args[0]->IsString()) { + v8::Local<v8::String> inputString = args[0]->ToString(); + char nameBuffer[256]; + inputString->WriteAscii(nameBuffer, 0, sizeof(nameBuffer)-1); + base::Profiler::SetThreadName(nameBuffer); + } + return v8::Undefined(); + } +}; + +v8::Extension* ProfilerExtension::Get() { + return new ProfilerWrapper(); +} + +} // namespace extensions_v8 + diff --git a/webkit/extensions/v8/profiler_extension.h b/webkit/extensions/v8/profiler_extension.h new file mode 100644 index 0000000..8112da3 --- /dev/null +++ b/webkit/extensions/v8/profiler_extension.h @@ -0,0 +1,24 @@ +// 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_PROFILER_EXTENSION_H_ +#define WEBKIT_EXTENSIONS_V8_PROFILER_EXTENSION_H_ + +#include "v8/include/v8.h" + +namespace extensions_v8 { + +class ProfilerExtension { + public: + static v8::Extension* Get(); +}; + +} // namespace extensions_v8 + +#endif // WEBKIT_EXTENSIONS_V8_PROFILER_EXTENSION_H_ + diff --git a/webkit/tools/test_shell/test_shell_main.cc b/webkit/tools/test_shell/test_shell_main.cc index dcf2557..fb0ecae 100644 --- a/webkit/tools/test_shell/test_shell_main.cc +++ b/webkit/tools/test_shell/test_shell_main.cc @@ -29,6 +29,7 @@ #include "webkit/glue/window_open_disposition.h" #include "webkit/extensions/v8/gc_extension.h" #include "webkit/extensions/v8/playback_extension.h" +#include "webkit/extensions/v8/profiler_extension.h" #include "webkit/tools/test_shell/simple_resource_loader_bridge.h" #include "webkit/tools/test_shell/test_shell.h" #include "webkit/tools/test_shell/test_shell_platform_delegate.h" @@ -192,6 +193,10 @@ int main(int argc, char* argv[]) { // Expose GCController to JavaScript. WebKit::registerExtension(extensions_v8::GCExtension::Get()); + if (parsed_command_line.HasSwitch(test_shell::kProfiler)) { + WebKit::registerExtension(extensions_v8::ProfilerExtension::Get()); + } + // Load and initialize the stats table. Attempt to construct a somewhat // unique name to isolate separate instances from each other. StatsTable *table = new StatsTable( diff --git a/webkit/tools/test_shell/test_shell_switches.cc b/webkit/tools/test_shell/test_shell_switches.cc index b271f18..6604769 100644 --- a/webkit/tools/test_shell/test_shell_switches.cc +++ b/webkit/tools/test_shell/test_shell_switches.cc @@ -71,5 +71,8 @@ extern const wchar_t kEnableVideo[] = L"enable-video"; // to happen even if in layout test mode. extern const wchar_t kGDB[] = L"gdb"; +// Make functions of the Profiler class available in javascript +extern const wchar_t kProfiler[] = L"profiler"; + } // namespace test_shell diff --git a/webkit/tools/test_shell/test_shell_switches.h b/webkit/tools/test_shell/test_shell_switches.h index c6c52c2..aad92e9 100644 --- a/webkit/tools/test_shell/test_shell_switches.h +++ b/webkit/tools/test_shell/test_shell_switches.h @@ -30,6 +30,7 @@ extern const wchar_t kAllowScriptsToCloseWindows[]; extern const wchar_t kCheckLayoutTestSystemDeps[]; extern const wchar_t kEnableVideo[]; extern const wchar_t kGDB[]; +extern const wchar_t kProfiler[]; } // namespace test_shell diff --git a/webkit/webkit.gyp b/webkit/webkit.gyp index a258baa..77c2b62 100644 --- a/webkit/webkit.gyp +++ b/webkit/webkit.gyp @@ -1035,6 +1035,8 @@ 'extensions/v8/interval_extension.h', 'extensions/v8/playback_extension.cc', 'extensions/v8/playback_extension.h', + 'extensions/v8/profiler_extension.cc', + 'extensions/v8/profiler_extension.h', 'port/bindings/v8/JSDOMBinding.cpp', 'port/bindings/v8/JSDOMBinding.h', 'port/bindings/v8/JSXPathNSResolver.cpp', |