From 9b221756628153638da5db1e46ca5ab42e12e88f Mon Sep 17 00:00:00 2001 From: "asargent@chromium.org" Date: Mon, 9 Mar 2009 21:26:28 +0000 Subject: 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 --- webkit/extensions/v8/profiler_extension.cc | 89 ++++++++++++++++++++++++++++++ webkit/extensions/v8/profiler_extension.h | 24 ++++++++ 2 files changed, 113 insertions(+) create mode 100644 webkit/extensions/v8/profiler_extension.cc create mode 100644 webkit/extensions/v8/profiler_extension.h (limited to 'webkit/extensions') 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 GetNativeFunction( + v8::Handle 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(); + } + + static v8::Handle ProfilerStart( + const v8::Arguments& args) { + base::Profiler::StartRecording(); + return v8::Undefined(); + } + + static v8::Handle ProfilerStop( + const v8::Arguments& args) { + base::Profiler::StopRecording(); + return v8::Undefined(); + } + + static v8::Handle ProfilerClearData( + const v8::Arguments& args) { + base::Profiler::ClearData(); + return v8::Undefined(); + } + + static v8::Handle ProfilerSetThreadName( + const v8::Arguments& args) { + if (args.Length() >= 1 && args[0]->IsString()) { + v8::Local 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_ + -- cgit v1.1