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

Side by Side Diff: runtime/vm/malloc_hooks.cc

Issue 2700033003: Disabled MallocHooks code in Release due to performance concerns. Added enable_malloc_hooks flag to… (Closed)
Patch Set: Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "platform/globals.h" 5 #include "platform/globals.h"
6 6
7 #if defined(DART_USE_TCMALLOC) && !defined(PRODUCT) 7 #if defined(DART_USE_TCMALLOC) && !defined(PRODUCT)
8 8
9 #include "vm/malloc_hooks.h" 9 #include "vm/malloc_hooks.h"
10 10
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 intptr_t MallocHooksState::original_pid_ = MallocHooksState::kInvalidPid; 196 intptr_t MallocHooksState::original_pid_ = MallocHooksState::kInvalidPid;
197 Mutex* MallocHooksState::malloc_hook_mutex_ = new Mutex(); 197 Mutex* MallocHooksState::malloc_hook_mutex_ = new Mutex();
198 198
199 // Memory allocation state information. 199 // Memory allocation state information.
200 intptr_t MallocHooksState::allocation_count_ = 0; 200 intptr_t MallocHooksState::allocation_count_ = 0;
201 intptr_t MallocHooksState::heap_allocated_memory_in_bytes_ = 0; 201 intptr_t MallocHooksState::heap_allocated_memory_in_bytes_ = 0;
202 AddressMap* MallocHooksState::address_map_ = NULL; 202 AddressMap* MallocHooksState::address_map_ = NULL;
203 203
204 204
205 void MallocHooks::InitOnce() { 205 void MallocHooks::InitOnce() {
206 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 206 if (FLAG_enable_malloc_hooks) {
zra 2017/02/17 23:43:27 if (!FLAG_enable_malloc_hooks) { return; }
bkonyi 2017/02/18 00:01:11 Done.
207 ASSERT(!MallocHooksState::Active()); 207 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
208 ASSERT(!MallocHooksState::Active());
208 209
209 MallocHookScope::InitMallocHookFlag(); 210 MallocHookScope::InitMallocHookFlag();
210 MallocHooksState::Init(); 211 MallocHooksState::Init();
211 212
212 // Register malloc hooks. 213 // Register malloc hooks.
213 bool success = false; 214 bool success = false;
214 success = MallocHook::AddNewHook(&MallocHooksState::RecordAllocHook); 215 success = MallocHook::AddNewHook(&MallocHooksState::RecordAllocHook);
215 ASSERT(success); 216 ASSERT(success);
216 success = MallocHook::AddDeleteHook(&MallocHooksState::RecordFreeHook); 217 success = MallocHook::AddDeleteHook(&MallocHooksState::RecordFreeHook);
217 ASSERT(success); 218 ASSERT(success);
219 }
218 } 220 }
219 221
220 222
221 void MallocHooks::TearDown() { 223 void MallocHooks::TearDown() {
222 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 224 if (FLAG_enable_malloc_hooks) {
zra 2017/02/17 23:43:27 ditto
bkonyi 2017/02/18 00:01:11 Done.
223 ASSERT(MallocHooksState::Active()); 225 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
226 ASSERT(MallocHooksState::Active());
224 227
225 // Remove malloc hooks. 228 // Remove malloc hooks.
226 bool success = false; 229 bool success = false;
227 success = MallocHook::RemoveNewHook(&MallocHooksState::RecordAllocHook); 230 success = MallocHook::RemoveNewHook(&MallocHooksState::RecordAllocHook);
228 ASSERT(success); 231 ASSERT(success);
229 success = MallocHook::RemoveDeleteHook(&MallocHooksState::RecordFreeHook); 232 success = MallocHook::RemoveDeleteHook(&MallocHooksState::RecordFreeHook);
230 ASSERT(success); 233 ASSERT(success);
231 234
232 MallocHooksState::TearDown(); 235 MallocHooksState::TearDown();
233 MallocHookScope::DestroyMallocHookFlag(); 236 MallocHookScope::DestroyMallocHookFlag();
237 }
234 } 238 }
235 239
236 240
237 void MallocHooks::ResetStats() { 241 void MallocHooks::ResetStats() {
238 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 242 if (FLAG_enable_malloc_hooks) {
zra 2017/02/17 23:43:27 ditto
bkonyi 2017/02/18 00:01:11 Done.
239 if (MallocHooksState::Active()) { 243 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
240 MallocHooksState::ResetStats(); 244 if (MallocHooksState::Active()) {
245 MallocHooksState::ResetStats();
246 }
241 } 247 }
242 } 248 }
243 249
244 250
245 bool MallocHooks::Active() { 251 bool MallocHooks::Active() {
252 if (!FLAG_enable_malloc_hooks) {
253 return false;
254 }
246 ASSERT(MallocHooksState::malloc_hook_mutex()->IsOwnedByCurrentThread()); 255 ASSERT(MallocHooksState::malloc_hook_mutex()->IsOwnedByCurrentThread());
247 return MallocHooksState::Active(); 256 return MallocHooksState::Active();
248 } 257 }
249 258
250 259
251 void MallocHooks::PrintToJSONObject(JSONObject* jsobj) { 260 void MallocHooks::PrintToJSONObject(JSONObject* jsobj) {
261 if (!FLAG_enable_malloc_hooks) {
262 return;
263 }
252 intptr_t allocated_memory = 0; 264 intptr_t allocated_memory = 0;
253 intptr_t allocation_count = 0; 265 intptr_t allocation_count = 0;
254 bool add_usage = false; 266 bool add_usage = false;
255 // AddProperty may call malloc which would result in an attempt 267 // AddProperty may call malloc which would result in an attempt
256 // to acquire the lock recursively so we extract the values first 268 // to acquire the lock recursively so we extract the values first
257 // and then add the JSON properties. 269 // and then add the JSON properties.
258 { 270 {
259 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 271 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
260 if (Active()) { 272 if (Active()) {
261 allocated_memory = MallocHooksState::heap_allocated_memory_in_bytes(); 273 allocated_memory = MallocHooksState::heap_allocated_memory_in_bytes();
262 allocation_count = MallocHooksState::allocation_count(); 274 allocation_count = MallocHooksState::allocation_count();
263 add_usage = true; 275 add_usage = true;
264 } 276 }
265 } 277 }
266 if (add_usage) { 278 if (add_usage) {
267 jsobj->AddProperty("_heapAllocatedMemoryUsage", allocated_memory); 279 jsobj->AddProperty("_heapAllocatedMemoryUsage", allocated_memory);
268 jsobj->AddProperty("_heapAllocationCount", allocation_count); 280 jsobj->AddProperty("_heapAllocationCount", allocation_count);
269 } 281 }
270 } 282 }
271 283
272 284
273 intptr_t MallocHooks::allocation_count() { 285 intptr_t MallocHooks::allocation_count() {
286 if (!FLAG_enable_malloc_hooks) {
287 return 0;
288 }
274 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 289 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
275 return MallocHooksState::allocation_count(); 290 return MallocHooksState::allocation_count();
276 } 291 }
277 292
278 293
279 intptr_t MallocHooks::heap_allocated_memory_in_bytes() { 294 intptr_t MallocHooks::heap_allocated_memory_in_bytes() {
295 if (!FLAG_enable_malloc_hooks) {
296 return 0;
297 }
280 MutexLocker ml(MallocHooksState::malloc_hook_mutex()); 298 MutexLocker ml(MallocHooksState::malloc_hook_mutex());
281 return MallocHooksState::heap_allocated_memory_in_bytes(); 299 return MallocHooksState::heap_allocated_memory_in_bytes();
282 } 300 }
283 301
284 302
285 void MallocHooksState::RecordAllocHook(const void* ptr, size_t size) { 303 void MallocHooksState::RecordAllocHook(const void* ptr, size_t size) {
286 if (MallocHookScope::IsInHook() || !MallocHooksState::IsOriginalProcess()) { 304 if (MallocHookScope::IsInHook() || !MallocHooksState::IsOriginalProcess()) {
287 return; 305 return;
288 } 306 }
289 307
(...skipping 24 matching lines...) Expand all
314 if (MallocHooksState::address_map()->Lookup(ptr, &size)) { 332 if (MallocHooksState::address_map()->Lookup(ptr, &size)) {
315 MallocHooksState::DecrementHeapAllocatedMemoryInBytes(size); 333 MallocHooksState::DecrementHeapAllocatedMemoryInBytes(size);
316 MallocHooksState::address_map()->Remove(ptr); 334 MallocHooksState::address_map()->Remove(ptr);
317 } 335 }
318 } 336 }
319 } 337 }
320 338
321 } // namespace dart 339 } // namespace dart
322 340
323 #endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT) 341 #endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698