summaryrefslogtreecommitdiffstats
path: root/base/allocator
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-07 23:33:43 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-11-07 23:33:43 +0000
commite1bc6c35121a7dd50d6cde85f15a4794bd8efec1 (patch)
tree0d163c02f37df8d2367b64de0de5200aba7c807c /base/allocator
parentc5e288381ef30a847e5458b82c80a9d1a4db2126 (diff)
downloadchromium_src-e1bc6c35121a7dd50d6cde85f15a4794bd8efec1.zip
chromium_src-e1bc6c35121a7dd50d6cde85f15a4794bd8efec1.tar.gz
chromium_src-e1bc6c35121a7dd50d6cde85f15a4794bd8efec1.tar.bz2
Use tcmalloc's debugallocation for Debug builds
to catch memory problems early, easily, and cleanly. Because of gyp limitations, this can't be now controlled by a flag. BUG=30715 TEST=none Review URL: https://codereview.chromium.org/11266019 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@166547 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/allocator')
-rw-r--r--base/allocator/allocator.gyp39
-rw-r--r--base/allocator/allocator_shim.cc2
-rw-r--r--base/allocator/debugallocation_shim.cc9
3 files changed, 31 insertions, 19 deletions
diff --git a/base/allocator/allocator.gyp b/base/allocator/allocator.gyp
index f669298..fc4b902 100644
--- a/base/allocator/allocator.gyp
+++ b/base/allocator/allocator.gyp
@@ -203,6 +203,7 @@
'allocator_shim.cc',
'allocator_shim.h',
+ 'debugallocation_shim.cc',
'generic_allocators.cc',
'win_allocator.cc',
],
@@ -212,6 +213,10 @@
'generic_allocators.cc',
'win_allocator.cc',
+ # Included by debugallocation_shim.cc.
+ '<(tcmalloc_dir)/src/debugallocation.cc',
+ '<(tcmalloc_dir)/src/tcmalloc.cc',
+
# We simply don't use these, but list them above so that IDE
# users can view the full available source for reference, etc.
'<(tcmalloc_dir)/src/addressmap-inl.h',
@@ -300,6 +305,21 @@
'RuntimeLibrary': '0',
},
},
+ 'variables': {
+ # Provide a way to force disable debugallocation in Debug builds,
+ # e.g. for profiling (it's more rare to profile Debug builds,
+ # but people sometimes need to do that).
+ 'disable_debugallocation%': 0,
+ },
+ 'conditions': [
+ ['disable_debugallocation==0', {
+ 'defines': [
+ # Use debugallocation for Debug builds to catch problems early
+ # and cleanly, http://crbug.com/30715 .
+ 'TCMALLOC_FOR_DEBUGALLOCATION',
+ ],
+ }],
+ ],
},
},
'conditions': [
@@ -346,7 +366,7 @@
'<(tcmalloc_dir)/src/system-alloc.h',
# included by allocator_shim.cc
- '<(tcmalloc_dir)/src/tcmalloc.cc',
+ 'debugallocation_shim.cc',
# heap-profiler/checker/cpuprofiler
'<(tcmalloc_dir)/src/base/thread_lister.c',
@@ -365,9 +385,6 @@
'<(tcmalloc_dir)/src/profile-handler.cc',
'<(tcmalloc_dir)/src/profile-handler.h',
'<(tcmalloc_dir)/src/profiler.cc',
-
- # debugallocation
- '<(tcmalloc_dir)/src/debugallocation.cc',
],
}],
['OS=="linux" or OS=="freebsd" or OS=="solaris"', {
@@ -414,20 +431,6 @@
'-fvtable-verify=preinit',
],
}],
- [ 'linux_use_debugallocation==1', {
- 'sources!': [
- # debugallocation.cc #includes tcmalloc.cc,
- # so only one of them should be used.
- '<(tcmalloc_dir)/src/tcmalloc.cc',
- ],
- 'defines': [
- 'TCMALLOC_FOR_DEBUGALLOCATION',
- ],
- }, { # linux_use_debugallocation != 1
- 'sources!': [
- '<(tcmalloc_dir)/src/debugallocation.cc',
- ],
- }],
[ 'linux_keep_shadow_stacks==1', {
'sources': [
'<(tcmalloc_dir)/src/linux_shadow_stacks.cc',
diff --git a/base/allocator/allocator_shim.cc b/base/allocator/allocator_shim.cc
index bcc84aa..5acc533 100644
--- a/base/allocator/allocator_shim.cc
+++ b/base/allocator/allocator_shim.cc
@@ -56,7 +56,7 @@ static const char secondary_name[] = "CHROME_ALLOCATOR_2";
// We include tcmalloc and the win_allocator to get as much inlining as
// possible.
-#include "tcmalloc.cc"
+#include "debugallocation_shim.cc"
#include "win_allocator.cc"
// Forward declarations from jemalloc.
diff --git a/base/allocator/debugallocation_shim.cc b/base/allocator/debugallocation_shim.cc
new file mode 100644
index 0000000..d1cf52a
--- /dev/null
+++ b/base/allocator/debugallocation_shim.cc
@@ -0,0 +1,9 @@
+// Copyright (c) 2012 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.
+
+#if defined(TCMALLOC_FOR_DEBUGALLOCATION)
+#include "third_party/tcmalloc/chromium/src/debugallocation.cc"
+#else
+#include "third_party/tcmalloc/chromium/src/tcmalloc.cc"
+#endif