OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/debug/thread_heap_usage_tracker.h" | 5 #include "base/debug/thread_heap_usage_tracker.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 | 8 |
9 #include "base/allocator/allocator_shim.h" | 9 #include "base/allocator/allocator_shim.h" |
10 #include "base/allocator/features.h" | 10 #include "base/allocator/features.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 dispatch_under_test_->next = &g_mock_dispatch; | 61 dispatch_under_test_->next = &g_mock_dispatch; |
62 } | 62 } |
63 | 63 |
64 void TearDown() override { | 64 void TearDown() override { |
65 ASSERT_EQ(&g_mock_dispatch, dispatch_under_test_->next); | 65 ASSERT_EQ(&g_mock_dispatch, dispatch_under_test_->next); |
66 | 66 |
67 dispatch_under_test_->next = nullptr; | 67 dispatch_under_test_->next = nullptr; |
68 } | 68 } |
69 | 69 |
70 void* MockMalloc(size_t size) { | 70 void* MockMalloc(size_t size) { |
71 return dispatch_under_test_->alloc_function(dispatch_under_test_, size); | 71 return dispatch_under_test_->alloc_function(dispatch_under_test_, size, |
| 72 nullptr); |
72 } | 73 } |
73 | 74 |
74 void* MockCalloc(size_t n, size_t size) { | 75 void* MockCalloc(size_t n, size_t size) { |
75 return dispatch_under_test_->alloc_zero_initialized_function( | 76 return dispatch_under_test_->alloc_zero_initialized_function( |
76 dispatch_under_test_, n, size); | 77 dispatch_under_test_, n, size, nullptr); |
77 } | 78 } |
78 | 79 |
79 void* MockAllocAligned(size_t alignment, size_t size) { | 80 void* MockAllocAligned(size_t alignment, size_t size) { |
80 return dispatch_under_test_->alloc_aligned_function(dispatch_under_test_, | 81 return dispatch_under_test_->alloc_aligned_function( |
81 alignment, size); | 82 dispatch_under_test_, alignment, size, nullptr); |
82 } | 83 } |
83 | 84 |
84 void* MockRealloc(void* address, size_t size) { | 85 void* MockRealloc(void* address, size_t size) { |
85 return dispatch_under_test_->realloc_function(dispatch_under_test_, address, | 86 return dispatch_under_test_->realloc_function(dispatch_under_test_, address, |
86 size); | 87 size, nullptr); |
87 } | 88 } |
88 | 89 |
89 void MockFree(void* address) { | 90 void MockFree(void* address) { |
90 dispatch_under_test_->free_function(dispatch_under_test_, address); | 91 dispatch_under_test_->free_function(dispatch_under_test_, address, nullptr); |
91 } | 92 } |
92 | 93 |
93 size_t MockGetSizeEstimate(void* address) { | 94 size_t MockGetSizeEstimate(void* address) { |
94 return dispatch_under_test_->get_size_estimate_function( | 95 return dispatch_under_test_->get_size_estimate_function( |
95 dispatch_under_test_, address); | 96 dispatch_under_test_, address, nullptr); |
96 } | 97 } |
97 | 98 |
98 private: | 99 private: |
99 void RecordAlloc(void* address, size_t size) { | 100 void RecordAlloc(void* address, size_t size) { |
100 if (address != nullptr) | 101 if (address != nullptr) |
101 allocation_size_map_[address] = size; | 102 allocation_size_map_[address] = size; |
102 } | 103 } |
103 | 104 |
104 void DeleteAlloc(void* address) { | 105 void DeleteAlloc(void* address) { |
105 if (address != nullptr) | 106 if (address != nullptr) |
(...skipping 13 matching lines...) Expand all Loading... |
119 ret += kAllocationPadding; | 120 ret += kAllocationPadding; |
120 break; | 121 break; |
121 case ZERO_SIZE_FUNCTION: | 122 case ZERO_SIZE_FUNCTION: |
122 ret = 0; | 123 ret = 0; |
123 break; | 124 break; |
124 } | 125 } |
125 | 126 |
126 return ret; | 127 return ret; |
127 } | 128 } |
128 | 129 |
129 static void* OnAllocFn(const AllocatorDispatch* self, size_t size) { | 130 static void* OnAllocFn(const AllocatorDispatch* self, |
| 131 size_t size, |
| 132 void* context) { |
130 EXPECT_EQ(&g_mock_dispatch, self); | 133 EXPECT_EQ(&g_mock_dispatch, self); |
131 | 134 |
132 void* ret = malloc(size); | 135 void* ret = malloc(size); |
133 g_self->RecordAlloc(ret, size); | 136 g_self->RecordAlloc(ret, size); |
134 return ret; | 137 return ret; |
135 } | 138 } |
136 | 139 |
137 static void* OnAllocZeroInitializedFn(const AllocatorDispatch* self, | 140 static void* OnAllocZeroInitializedFn(const AllocatorDispatch* self, |
138 size_t n, | 141 size_t n, |
139 size_t size) { | 142 size_t size, |
| 143 void* context) { |
140 EXPECT_EQ(&g_mock_dispatch, self); | 144 EXPECT_EQ(&g_mock_dispatch, self); |
141 | 145 |
142 void* ret = calloc(n, size); | 146 void* ret = calloc(n, size); |
143 g_self->RecordAlloc(ret, n * size); | 147 g_self->RecordAlloc(ret, n * size); |
144 return ret; | 148 return ret; |
145 } | 149 } |
146 | 150 |
147 static void* OnAllocAlignedFn(const AllocatorDispatch* self, | 151 static void* OnAllocAlignedFn(const AllocatorDispatch* self, |
148 size_t alignment, | 152 size_t alignment, |
149 size_t size) { | 153 size_t size, |
| 154 void* context) { |
150 EXPECT_EQ(&g_mock_dispatch, self); | 155 EXPECT_EQ(&g_mock_dispatch, self); |
151 | 156 |
152 // This is a cheat as it doesn't return aligned allocations. This has the | 157 // This is a cheat as it doesn't return aligned allocations. This has the |
153 // advantage of working for all platforms for this test. | 158 // advantage of working for all platforms for this test. |
154 void* ret = malloc(size); | 159 void* ret = malloc(size); |
155 g_self->RecordAlloc(ret, size); | 160 g_self->RecordAlloc(ret, size); |
156 return ret; | 161 return ret; |
157 } | 162 } |
158 | 163 |
159 static void* OnReallocFn(const AllocatorDispatch* self, | 164 static void* OnReallocFn(const AllocatorDispatch* self, |
160 void* address, | 165 void* address, |
161 size_t size) { | 166 size_t size, |
| 167 void* context) { |
162 EXPECT_EQ(&g_mock_dispatch, self); | 168 EXPECT_EQ(&g_mock_dispatch, self); |
163 | 169 |
164 g_self->DeleteAlloc(address); | 170 g_self->DeleteAlloc(address); |
165 void* ret = realloc(address, size); | 171 void* ret = realloc(address, size); |
166 g_self->RecordAlloc(ret, size); | 172 g_self->RecordAlloc(ret, size); |
167 return ret; | 173 return ret; |
168 } | 174 } |
169 | 175 |
170 static void OnFreeFn(const AllocatorDispatch* self, void* address) { | 176 static void OnFreeFn(const AllocatorDispatch* self, |
| 177 void* address, |
| 178 void* context) { |
171 EXPECT_EQ(&g_mock_dispatch, self); | 179 EXPECT_EQ(&g_mock_dispatch, self); |
172 | 180 |
173 g_self->DeleteAlloc(address); | 181 g_self->DeleteAlloc(address); |
174 free(address); | 182 free(address); |
175 } | 183 } |
176 | 184 |
177 static size_t OnGetSizeEstimateFn(const AllocatorDispatch* self, | 185 static size_t OnGetSizeEstimateFn(const AllocatorDispatch* self, |
178 void* address) { | 186 void* address, |
| 187 void* context) { |
179 EXPECT_EQ(&g_mock_dispatch, self); | 188 EXPECT_EQ(&g_mock_dispatch, self); |
180 | 189 |
181 return g_self->GetSizeEstimate(address); | 190 return g_self->GetSizeEstimate(address); |
182 } | 191 } |
183 | 192 |
184 using AllocationSizeMap = std::map<void*, size_t>; | 193 using AllocationSizeMap = std::map<void*, size_t>; |
185 | 194 |
186 SizeFunctionKind size_function_kind_; | 195 SizeFunctionKind size_function_kind_; |
187 AllocationSizeMap allocation_size_map_; | 196 AllocationSizeMap allocation_size_map_; |
188 AllocatorDispatch* dispatch_under_test_; | 197 AllocatorDispatch* dispatch_under_test_; |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
582 EXPECT_LE(u2.free_ops + 1, u3.free_ops); | 591 EXPECT_LE(u2.free_ops + 1, u3.free_ops); |
583 | 592 |
584 TestingThreadHeapUsageTracker::DisableHeapTrackingForTesting(); | 593 TestingThreadHeapUsageTracker::DisableHeapTrackingForTesting(); |
585 | 594 |
586 ASSERT_FALSE(ThreadHeapUsageTracker::IsHeapTrackingEnabled()); | 595 ASSERT_FALSE(ThreadHeapUsageTracker::IsHeapTrackingEnabled()); |
587 } | 596 } |
588 #endif // BUILDFLAG(USE_EXPERIMENTAL_ALLOCATOR_SHIM) | 597 #endif // BUILDFLAG(USE_EXPERIMENTAL_ALLOCATOR_SHIM) |
589 | 598 |
590 } // namespace debug | 599 } // namespace debug |
591 } // namespace base | 600 } // namespace base |
OLD | NEW |