summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-24 15:16:34 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-24 15:16:34 +0000
commita70ed8b33ca2c6ac5d9238f9247fe266229bdca9 (patch)
treec3d3647768836e7c77360536032465a44092d3a4 /content
parent5c9a70add376eb58bbf682de0c4614be8a5ca8f7 (diff)
downloadchromium_src-a70ed8b33ca2c6ac5d9238f9247fe266229bdca9.zip
chromium_src-a70ed8b33ca2c6ac5d9238f9247fe266229bdca9.tar.gz
chromium_src-a70ed8b33ca2c6ac5d9238f9247fe266229bdca9.tar.bz2
Adds chrome.memoryBenchmarking.heapProfilerDump for the browser process.
This function will be used in conjunction with --enable-memory-benchmarking switch in order to obtain TCMalloc's heap dumps. BUG=239836 Review URL: https://chromiumcodereview.appspot.com/15082004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@202087 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/renderer_host/memory_benchmark_message_filter.cc42
-rw-r--r--content/browser/renderer_host/memory_benchmark_message_filter.h30
-rw-r--r--content/browser/renderer_host/render_process_host_impl.cc6
-rw-r--r--content/common/content_message_generator.h1
-rw-r--r--content/common/memory_benchmark_messages.h15
-rw-r--r--content/content_browser.gypi2
-rw-r--r--content/content_common.gypi1
-rw-r--r--content/renderer/memory_benchmarking_extension.cc34
-rw-r--r--content/renderer/render_thread_impl.cc2
9 files changed, 119 insertions, 14 deletions
diff --git a/content/browser/renderer_host/memory_benchmark_message_filter.cc b/content/browser/renderer_host/memory_benchmark_message_filter.cc
new file mode 100644
index 0000000..d559852
--- /dev/null
+++ b/content/browser/renderer_host/memory_benchmark_message_filter.cc
@@ -0,0 +1,42 @@
+// Copyright (c) 2013 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 "content/browser/renderer_host/memory_benchmark_message_filter.h"
+
+#include "content/common/memory_benchmark_messages.h"
+
+#if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
+
+#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
+
+namespace content {
+
+MemoryBenchmarkMessageFilter::MemoryBenchmarkMessageFilter() {
+}
+
+bool MemoryBenchmarkMessageFilter::OnMessageReceived(
+ const IPC::Message& message,
+ bool* message_was_ok) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP_EX(MemoryBenchmarkMessageFilter,
+ message,
+ *message_was_ok)
+ IPC_MESSAGE_HANDLER(MemoryBenchmarkHostMsg_HeapProfilerDump,
+ OnHeapProfilerDump)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+MemoryBenchmarkMessageFilter::~MemoryBenchmarkMessageFilter() {
+}
+
+void MemoryBenchmarkMessageFilter::OnHeapProfilerDump(
+ const std::string& reason) {
+ ::HeapProfilerDump(reason.c_str());
+}
+
+} // namespace content
+
+#endif // defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
diff --git a/content/browser/renderer_host/memory_benchmark_message_filter.h b/content/browser/renderer_host/memory_benchmark_message_filter.h
new file mode 100644
index 0000000..da5a6aa
--- /dev/null
+++ b/content/browser/renderer_host/memory_benchmark_message_filter.h
@@ -0,0 +1,30 @@
+// Copyright (c) 2013 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.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_MEMORY_BENCHMARK_MESSAGE_FILTER_H_
+#define CONTENT_BROWSER_RENDERER_HOST_MEMORY_BENCHMARK_MESSAGE_FILTER_H_
+
+#include <string>
+
+#include "content/public/browser/browser_message_filter.h"
+
+namespace content {
+
+class MemoryBenchmarkMessageFilter : public BrowserMessageFilter {
+ public:
+ MemoryBenchmarkMessageFilter();
+
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ bool* message_was_ok) OVERRIDE;
+ private:
+ virtual ~MemoryBenchmarkMessageFilter();
+
+ void OnHeapProfilerDump(const std::string& reason);
+
+ DISALLOW_COPY_AND_ASSIGN(MemoryBenchmarkMessageFilter);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_MEMORY_BENCHMARK_MESSAGE_FILTER_H_
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc
index 341d878..41a363a 100644
--- a/content/browser/renderer_host/render_process_host_impl.cc
+++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -75,6 +75,7 @@
#include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
#include "content/browser/renderer_host/media/peer_connection_tracker_host.h"
#include "content/browser/renderer_host/media/video_capture_host.h"
+#include "content/browser/renderer_host/memory_benchmark_message_filter.h"
#include "content/browser/renderer_host/p2p/socket_dispatcher_host.h"
#include "content/browser/renderer_host/pepper/pepper_message_filter.h"
#include "content/browser/renderer_host/quota_dispatcher_host.h"
@@ -697,6 +698,11 @@ void RenderProcessHostImpl::CreateMessageFilters() {
#if defined(ENABLE_WEBRTC)
channel_->AddFilter(new WebRtcLoggingHandlerHost());
#endif
+#if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableMemoryBenchmarking))
+ channel_->AddFilter(new MemoryBenchmarkMessageFilter());
+#endif
}
int RenderProcessHostImpl::GetNextRoutingID() {
diff --git a/content/common/content_message_generator.h b/content/common/content_message_generator.h
index de5adbd..955d5e4 100644
--- a/content/common/content_message_generator.h
+++ b/content/common/content_message_generator.h
@@ -38,6 +38,7 @@
#include "content/common/media/peer_connection_tracker_messages.h"
#include "content/common/media/video_capture_messages.h"
#include "content/common/media/webrtc_logging_messages.h"
+#include "content/common/memory_benchmark_messages.h"
#include "content/common/mime_registry_messages.h"
#include "content/common/p2p_messages.h"
#include "content/common/pepper_messages.h"
diff --git a/content/common/memory_benchmark_messages.h b/content/common/memory_benchmark_messages.h
new file mode 100644
index 0000000..3955630
--- /dev/null
+++ b/content/common/memory_benchmark_messages.h
@@ -0,0 +1,15 @@
+// Copyright (c) 2013 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.
+
+// IPC messages for memory benchmark.
+// Multiply-included message file, hence no include guard.
+
+#include <string>
+
+#include "ipc/ipc_message_macros.h"
+
+#define IPC_MESSAGE_START MemoryBenchmarkMsgStart
+
+IPC_MESSAGE_CONTROL1(MemoryBenchmarkHostMsg_HeapProfilerDump,
+ std::string /* dump reason */)
diff --git a/content/content_browser.gypi b/content/content_browser.gypi
index 505365b..63802fb 100644
--- a/content/content_browser.gypi
+++ b/content/content_browser.gypi
@@ -757,6 +757,8 @@
'browser/renderer_host/media/web_contents_video_capture_device.h',
'browser/renderer_host/media/webrtc_logging_handler_host.cc',
'browser/renderer_host/media/webrtc_logging_handler_host.h',
+ 'browser/renderer_host/memory_benchmark_message_filter.cc',
+ 'browser/renderer_host/memory_benchmark_message_filter.h',
'browser/renderer_host/native_web_keyboard_event_android.cc',
'browser/renderer_host/native_web_keyboard_event_aura.cc',
'browser/renderer_host/native_web_keyboard_event.cc',
diff --git a/content/content_common.gypi b/content/content_common.gypi
index 397fb93..7fe0c69 100644
--- a/content/content_common.gypi
+++ b/content/content_common.gypi
@@ -280,6 +280,7 @@
'common/media/video_capture.h',
'common/media/video_capture_messages.h',
'common/media/webrtc_logging_messages.h',
+ 'common/memory_benchmark_messages.h',
'common/message_router.cc',
'common/message_router.h',
'common/mime_registry_messages.h',
diff --git a/content/renderer/memory_benchmarking_extension.cc b/content/renderer/memory_benchmarking_extension.cc
index e6efc74..7db2c6f 100644
--- a/content/renderer/memory_benchmarking_extension.cc
+++ b/content/renderer/memory_benchmarking_extension.cc
@@ -5,11 +5,12 @@
#include "content/renderer/memory_benchmarking_extension.h"
#include "base/string_util.h"
-#include "content/public/renderer/render_thread.h"
+#include "content/common/memory_benchmark_messages.h"
+#include "content/renderer/render_thread_impl.h"
+
+#if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
namespace {
@@ -33,9 +34,10 @@ class MemoryBenchmarkingWrapper : public v8::Extension {
" native function IsHeapProfilerRunning();"
" return IsHeapProfilerRunning();"
"};"
- "chrome.memoryBenchmarking.heapProfilerDump = function(reason) {"
+ "chrome.memoryBenchmarking.heapProfilerDump = "
+ " function(process_type, reason) {"
" native function HeapProfilerDump();"
- " HeapProfilerDump(reason);"
+ " HeapProfilerDump(process_type, reason);"
"};"
) {}
@@ -51,20 +53,22 @@ class MemoryBenchmarkingWrapper : public v8::Extension {
static v8::Handle<v8::Value> IsHeapProfilerRunning(
const v8::Arguments& args) {
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
return v8::Boolean::New(::IsHeapProfilerRunning());
-#else
- return v8::Boolean::New(false);
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
}
static v8::Handle<v8::Value> HeapProfilerDump(const v8::Arguments& args) {
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
- std::string reason("benchmarking_extension");
+ std::string process_type;
if (args.Length() && args[0]->IsString())
- reason = *v8::String::AsciiValue(args[0]);
- ::HeapProfilerDump(reason.c_str());
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
+ process_type = *v8::String::AsciiValue(args[0]);
+ std::string reason("benchmarking_extension");
+ if (args.Length() > 1 && args[1]->IsString())
+ reason = *v8::String::AsciiValue(args[1]);
+ if (process_type == "browser") {
+ content::RenderThreadImpl::current()->Send(
+ new MemoryBenchmarkHostMsg_HeapProfilerDump(reason));
+ } else {
+ ::HeapProfilerDump(reason.c_str());
+ }
return v8::Undefined();
}
};
@@ -78,3 +82,5 @@ v8::Extension* MemoryBenchmarkingExtension::Get() {
}
} // namespace content
+
+#endif // defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index b5958a8..9b7524a 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -399,8 +399,10 @@ void RenderThreadImpl::Init() {
if (command_line.HasSwitch(switches::kEnableGpuBenchmarking))
RegisterExtension(GpuBenchmarkingExtension::Get());
+#if defined(USE_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
if (command_line.HasSwitch(switches::kEnableMemoryBenchmarking))
RegisterExtension(MemoryBenchmarkingExtension::Get());
+#endif // USE_TCMALLOC
if (command_line.HasSwitch(switches::kEnableSkiaBenchmarking)) {
LOG(WARNING) << "Enabling unsafe Skia benchmarking extension.";