diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 15:16:34 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-24 15:16:34 +0000 |
commit | a70ed8b33ca2c6ac5d9238f9247fe266229bdca9 (patch) | |
tree | c3d3647768836e7c77360536032465a44092d3a4 /content | |
parent | 5c9a70add376eb58bbf682de0c4614be8a5ca8f7 (diff) | |
download | chromium_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.cc | 42 | ||||
-rw-r--r-- | content/browser/renderer_host/memory_benchmark_message_filter.h | 30 | ||||
-rw-r--r-- | content/browser/renderer_host/render_process_host_impl.cc | 6 | ||||
-rw-r--r-- | content/common/content_message_generator.h | 1 | ||||
-rw-r--r-- | content/common/memory_benchmark_messages.h | 15 | ||||
-rw-r--r-- | content/content_browser.gypi | 2 | ||||
-rw-r--r-- | content/content_common.gypi | 1 | ||||
-rw-r--r-- | content/renderer/memory_benchmarking_extension.cc | 34 | ||||
-rw-r--r-- | content/renderer/render_thread_impl.cc | 2 |
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."; |