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

Unified Diff: content/renderer/memory_benchmarking_extension.cc

Issue 15082004: Adds chrome.memoryBenchmarking.heapProfilerDump for the browser process. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Patch Created 7 years, 7 months 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
Index: content/renderer/memory_benchmarking_extension.cc
diff --git a/content/renderer/memory_benchmarking_extension.cc b/content/renderer/memory_benchmarking_extension.cc
index 2dbfbda58c2923a096f5bf607516c61975fcd1f6..9838d957b04d7943c261a8e445242a0813f64b99 100644
--- a/content/renderer/memory_benchmarking_extension.cc
+++ b/content/renderer/memory_benchmarking_extension.cc
@@ -5,11 +5,19 @@
#include "content/renderer/memory_benchmarking_extension.h"
#include "base/string_util.h"
+#include "content/common/memory_benchmark_messages.h"
#include "content/public/renderer/render_thread.h"
-
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#include "content/renderer/render_view_impl.h"
+#if !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_ANDROID))
+#define HAS_MEMORY_BENCHMARK 1
#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#endif
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h"
+
+using content::RenderViewImpl;
+using WebKit::WebFrame;
+using WebKit::WebView;
namespace {
@@ -51,24 +59,48 @@ class MemoryBenchmarkingWrapper : public v8::Extension {
static v8::Handle<v8::Value> IsHeapProfilerRunning(
const v8::Arguments& args) {
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#if defined(HAS_MEMORY_BENCHMARK)
return v8::Boolean::New(::IsHeapProfilerRunning());
#else
return v8::Boolean::New(false);
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#endif // defined(HAS_MEMORY_BENCHMARK)
+ }
+
+#if defined(HAS_MEMORY_BENCHMARK)
+ static v8::Handle<v8::Value> HeapProfilerDumpBrowser() {
+ WebFrame* web_frame = WebFrame::frameForCurrentContext();
+ if (!web_frame)
+ return v8::Undefined();
+
+ WebView* web_view = web_frame->view();
+ if (!web_view)
+ return v8::Undefined();
+
+ RenderViewImpl* render_view_impl = RenderViewImpl::FromWebView(web_view);
+ if (!render_view_impl)
+ return v8::Undefined();
+ std::string dump_file_name;
+
+ render_view_impl->Send(
+ new MemoryBenchmarkHostMsg_HeapProfilerDump(
+ render_view_impl->routing_id(), &dump_file_name));
+ return v8::String::New(dump_file_name.c_str());
}
+#endif // defined(HAS_MEMORY_BENCHMARK)
static v8::Handle<v8::Value> HeapProfilerDump(const v8::Arguments& args) {
-#if !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#if defined(HAS_MEMORY_BENCHMARK)
char dumped_filename_buffer[1000];
std::string reason("benchmarking_extension");
if (args.Length() && args[0]->IsString())
reason = *v8::String::AsciiValue(args[0]);
+ if (reason == "browser")
+ return HeapProfilerDumpBrowser();
::HeapProfilerDumpWithFileName(reason.c_str(),
dumped_filename_buffer,
sizeof(dumped_filename_buffer));
return v8::String::New(dumped_filename_buffer);
-#endif // !defined(NO_TCMALLOC) && defined(OS_LINUX)
+#endif // defined(HAS_MEMORY_BENCHMARK)
return v8::Undefined();
}
};

Powered by Google App Engine
This is Rietveld 408576698