blob: 9a3d114f7290db53eb1b203a7d6309f8af7a9734 [file] [log] [blame]
[email protected]237a14852012-04-28 02:56:381// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/allocator/allocator_extension.h"
6
7#include "base/logging.h"
8
primianod3a81ab2016-01-25 22:21:159#if defined(USE_TCMALLOC)
10#include "third_party/tcmalloc/chromium/src/gperftools/heap-profiler.h"
11#include "third_party/tcmalloc/chromium/src/gperftools/malloc_extension.h"
squebe8dae532016-03-15 19:55:1512#include "third_party/tcmalloc/chromium/src/gperftools/malloc_hook.h"
primianod3a81ab2016-01-25 22:21:1513#endif
14
[email protected]237a14852012-04-28 02:56:3815namespace base {
16namespace allocator {
17
[email protected]237a14852012-04-28 02:56:3818void ReleaseFreeMemory() {
primianod3a81ab2016-01-25 22:21:1519#if defined(USE_TCMALLOC)
20 ::MallocExtension::instance()->ReleaseFreeMemory();
21#endif
primianodda6c272015-12-07 16:51:0422}
23
24bool GetNumericProperty(const char* name, size_t* value) {
primianod3a81ab2016-01-25 22:21:1525#if defined(USE_TCMALLOC)
26 return ::MallocExtension::instance()->GetNumericProperty(name, value);
27#endif
28 return false;
[email protected]237a14852012-04-28 02:56:3829}
30
primianod3a81ab2016-01-25 22:21:1531bool IsHeapProfilerRunning() {
32#if defined(USE_TCMALLOC)
33 return ::IsHeapProfilerRunning();
34#endif
35 return false;
ssid09434092015-10-26 23:05:0436}
37
squebe8dae532016-03-15 19:55:1538void SetHooks(AllocHookFunc alloc_hook, FreeHookFunc free_hook) {
39// TODO(sque): Use allocator shim layer instead.
40#if defined(USE_TCMALLOC)
41 // Make sure no hooks get overwritten.
42 auto prev_alloc_hook = MallocHook::SetNewHook(alloc_hook);
43 if (alloc_hook)
44 DCHECK(!prev_alloc_hook);
45
46 auto prev_free_hook = MallocHook::SetDeleteHook(free_hook);
47 if (free_hook)
48 DCHECK(!prev_free_hook);
49#endif
50}
51
52int GetCallStack(void** stack, int max_stack_size) {
53#if defined(USE_TCMALLOC)
54 return MallocHook::GetCallerStackTrace(stack, max_stack_size, 0);
55#endif
56 return 0;
57}
58
[email protected]237a14852012-04-28 02:56:3859} // namespace allocator
60} // namespace base