Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(741)

Unified Diff: webkit/extensions/v8/heap_profiler_extension.cc

Issue 390015: linux: TCMalloc-based C++ heap profiler. (Closed)
Patch Set: Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/extensions/v8/heap_profiler_extension.h ('k') | webkit/tools/test_shell/test_shell_main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/extensions/v8/heap_profiler_extension.cc
diff --git a/webkit/extensions/v8/heap_profiler_extension.cc b/webkit/extensions/v8/heap_profiler_extension.cc
new file mode 100644
index 0000000000000000000000000000000000000000..058a5c298a8c20269e2a5a404b097360a21a6ce2
--- /dev/null
+++ b/webkit/extensions/v8/heap_profiler_extension.cc
@@ -0,0 +1,111 @@
+// Copyright (c) 2006-2009 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 "webkit/extensions/v8/heap_profiler_extension.h"
+
+#include "base/basictypes.h"
+
+#if defined(LINUX_USE_TCMALLOC)
+#include "third_party/tcmalloc/tcmalloc/src/google/heap-profiler.h"
+#endif
+
+namespace extensions_v8 {
+
+namespace {
+
+const char kHeapProfilerExtensionName[] = "v8/HeapProfiler";
+
+class HeapProfilerWrapper : public v8::Extension {
+ public:
+ HeapProfilerWrapper()
+ : v8::Extension(kHeapProfilerExtensionName,
+ "if (typeof(chromium) == 'undefined') {"
+ " chromium = {};"
+ "}"
+ "(function() {"
+ " native function HeapProfilerStart();"
+ " native function HeapProfilerStop();"
+ " native function HeapProfilerDump();"
+ " chromium.HeapProfiler = {};"
+ " chromium.HeapProfiler.start = function(opt_prefix) {"
+ " var prefix = opt_prefix;"
+ " if (!prefix) {"
+ " var d = new Date();"
+ " prefix = \"chromium-\" + "
+ " (1900 + d.getYear()) + "
+ " \"-\" + d.getMonth() + "
+ " \"-\" + d.getDay() + "
+ " \"-\" + d.getTime();"
+ " }"
+ " HeapProfilerStart(prefix);"
+ " };"
+ " chromium.HeapProfiler.stop = function() {"
+ " HeapProfilerStop();"
+ " };"
+ " chromium.HeapProfiler.dump = function(opt_reason) {"
+ " HeapProfilerDump(opt_reason || \"\");"
+ " };"
+ "})();") {}
+
+ virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction(
+ v8::Handle<v8::String> name) {
+ if (name->Equals(v8::String::New("HeapProfilerStart"))) {
+ return v8::FunctionTemplate::New(HeapProfilerStart);
+ } else if (name->Equals(v8::String::New("HeapProfilerStop"))) {
+ return v8::FunctionTemplate::New(HeapProfilerStop);
+ } else if (name->Equals(v8::String::New("HeapProfilerDump"))) {
+ return v8::FunctionTemplate::New(HeapProfilerDump);
+ }
+ return v8::Handle<v8::FunctionTemplate>();
+ }
+
+#if defined(LINUX_USE_TCMALLOC)
+ static v8::Handle<v8::Value> HeapProfilerStart(const v8::Arguments& args) {
+ if (args.Length() >= 1 && args[0]->IsString()) {
+ v8::Local<v8::String> js_prefix = args[0]->ToString();
+ char prefix[256];
+ js_prefix->WriteAscii(prefix, 0, arraysize(prefix) - 1);
+ ::HeapProfilerStart(prefix);
+ }
+ return v8::Undefined();
+ }
+
+ static v8::Handle<v8::Value> HeapProfilerStop(const v8::Arguments& args) {
+ ::HeapProfilerStop();
+ return v8::Undefined();
+ }
+
+ static v8::Handle<v8::Value> HeapProfilerDump(const v8::Arguments& args) {
+ if (args.Length() >= 1 && args[0]->IsString()) {
+ v8::Local<v8::String> js_reason = args[0]->ToString();
+ char reason[256];
+ js_reason->WriteAscii(reason, 0, arraysize(reason) - 1);
+ ::HeapProfilerDump(reason);
+ }
+ return v8::Undefined();
+ }
+
+#else
+
+ static v8::Handle<v8::Value> HeapProfilerStart(const v8::Arguments& args) {
+ return v8::Undefined();
+ }
+
+ static v8::Handle<v8::Value> HeapProfilerStop(const v8::Arguments& args) {
+ return v8::Undefined();
+ }
+
+ static v8::Handle<v8::Value> HeapProfilerDump(const v8::Arguments& args) {
+ return v8::Undefined();
+ }
+#endif
+};
+
+} // namespace
+
+v8::Extension* HeapProfilerExtension::Get() {
+ return new HeapProfilerWrapper;
+}
+
+} // namespace extensions_v8
« no previous file with comments | « webkit/extensions/v8/heap_profiler_extension.h ('k') | webkit/tools/test_shell/test_shell_main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698