Index: content/app/content_main_runner.cc |
diff --git a/content/app/content_main_runner.cc b/content/app/content_main_runner.cc |
index 6df81377d6061dad505e9b56f326d89540a0b2cc..7522ebb103db92bf6e65b66c670ed4ee7220a100 100644 |
--- a/content/app/content_main_runner.cc |
+++ b/content/app/content_main_runner.cc |
@@ -58,10 +58,6 @@ |
#include "gin/v8_initializer.h" |
#endif |
-#if defined(USE_TCMALLOC) |
-#include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h" |
-#endif |
- |
#if !defined(OS_IOS) |
#include "content/app/mojo/mojo_init.h" |
#include "content/browser/gpu/gpu_process_host.h" |
@@ -111,11 +107,18 @@ |
#include "crypto/nss_util.h" |
#endif |
-#if !defined(OS_MACOSX) && defined(USE_TCMALLOC) |
-extern "C" { |
-int tc_set_new_mode(int mode); |
+#if defined(USE_TCMALLOC) |
+namespace { |
+ |
+// This method translates the tcmalloc bytes allocated function to now function |
+// for alternate time source. |
+unsigned int TimeSourceNowFunction() { |
+ return static_cast<unsigned int>( |
+ base::allocator::GetBytesAllocatedOnCurrentThread()); |
} |
-#endif |
+ |
+} // namespace |
+#endif // defined(USE_TCMALLOC) |
namespace content { |
extern int GpuMain(const content::MainFunctionParams&); |
@@ -413,35 +416,6 @@ class ContentMainRunnerImpl : public ContentMainRunner { |
Shutdown(); |
} |
-#if defined(USE_TCMALLOC) |
- static bool GetAllocatorWasteSizeThunk(size_t* size) { |
- size_t heap_size, allocated_bytes, unmapped_bytes; |
- MallocExtension* ext = MallocExtension::instance(); |
- if (ext->GetNumericProperty("generic.heap_size", &heap_size) && |
- ext->GetNumericProperty("generic.current_allocated_bytes", |
- &allocated_bytes) && |
- ext->GetNumericProperty("tcmalloc.pageheap_unmapped_bytes", |
- &unmapped_bytes)) { |
- *size = heap_size - allocated_bytes - unmapped_bytes; |
- return true; |
- } |
- DCHECK(false); |
- return false; |
- } |
- |
- static void GetStatsThunk(char* buffer, int buffer_length) { |
- MallocExtension::instance()->GetStats(buffer, buffer_length); |
- } |
- |
- static bool GetNumericPropertyThunk(const char* name, size_t* value) { |
- return MallocExtension::instance()->GetNumericProperty(name, value); |
- } |
- |
- static void ReleaseFreeMemoryThunk() { |
- MallocExtension::instance()->ReleaseFreeMemory(); |
- } |
-#endif |
- |
int Initialize(const ContentMainParams& params) override { |
ui_task_ = params.ui_task; |
@@ -460,22 +434,14 @@ class ContentMainRunnerImpl : public ContentMainRunner { |
TRACE_EVENT0("startup,benchmark", "ContentMainRunnerImpl::Initialize"); |
#endif // OS_ANDROID |
- // NOTE(willchan): One might ask why these TCMalloc-related calls are done |
- // here rather than in process_util_linux.cc with the definition of |
- // EnableTerminationOnOutOfMemory(). That's because base shouldn't have a |
- // dependency on TCMalloc. Really, we ought to have our allocator shim code |
- // implement this EnableTerminationOnOutOfMemory() function. Whateverz. |
- // This works for now. |
#if !defined(OS_MACOSX) && defined(USE_TCMALLOC) |
- // For tcmalloc, we need to tell it to behave like new. |
- tc_set_new_mode(1); |
- |
- // On windows, we've already set these thunks up in _heap_init() |
- base::allocator::SetGetAllocatorWasteSizeFunction( |
- GetAllocatorWasteSizeThunk); |
- base::allocator::SetGetStatsFunction(GetStatsThunk); |
- base::allocator::SetGetNumericPropertyFunction(GetNumericPropertyThunk); |
- base::allocator::SetReleaseFreeMemoryFunction(ReleaseFreeMemoryThunk); |
+ // Allocator initialization is needed for tcmalloc to set up the allocator |
+ // extension callbacks. This needs to happen before any threads are created |
+ // and any of the extension methods is used. To be able to call this method |
+ // implies that the executable target should link in the allocator shim |
+ // implementation. Note that the content target does not decide the |
+ // allocator. |
+ base::allocator::InitializeAllocator(); |
// Provide optional hook for monitoring allocation quantities on a |
// per-thread basis. Only set the hook if the environment indicates this |
@@ -484,8 +450,7 @@ class ContentMainRunnerImpl : public ContentMainRunner { |
if (profiling && |
(atoi(profiling) == tracked_objects::TIME_SOURCE_TYPE_TCMALLOC)) { |
tracked_objects::SetAlternateTimeSource( |
- MallocExtension::GetBytesAllocatedOnCurrentThread, |
- tracked_objects::TIME_SOURCE_TYPE_TCMALLOC); |
+ TimeSourceNowFunction, tracked_objects::TIME_SOURCE_TYPE_TCMALLOC); |
} |
#endif // !OS_MACOSX && USE_TCMALLOC |