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

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

Issue 2829833003: [Fuchsia] Grab the number of malloc'd bytes from jemalloc (Closed)
Patch Set: Fix guards Created 3 years, 8 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) && !defined(TARGET_ARCH_DBC)
8 !defined(TARGET_ARCH_DBC) && !defined(HOST_OS_FUCHSIA)
9 8
10 #include "vm/malloc_hooks.h" 9 #include "vm/malloc_hooks.h"
11 10
12 #include "gperftools/malloc_hook.h" 11 #include "gperftools/malloc_hook.h"
13 12
14 #include "platform/assert.h" 13 #include "platform/assert.h"
15 #include "vm/hash_map.h" 14 #include "vm/hash_map.h"
16 #include "vm/json_stream.h" 15 #include "vm/json_stream.h"
17 #include "vm/os_thread.h" 16 #include "vm/os_thread.h"
18 #include "vm/profiler.h" 17 #include "vm/profiler.h"
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 ASSERT(malloc_hook_mutex()->IsOwnedByCurrentThread()); 254 ASSERT(malloc_hook_mutex()->IsOwnedByCurrentThread());
256 active_ = false; 255 active_ = false;
257 original_pid_ = kInvalidPid; 256 original_pid_ = kInvalidPid;
258 ResetStats(); 257 ResetStats();
259 delete address_map_; 258 delete address_map_;
260 address_map_ = NULL; 259 address_map_ = NULL;
261 } 260 }
262 261
263 262
264 void MallocHooks::InitOnce() { 263 void MallocHooks::InitOnce() {
265 if (!FLAG_enable_malloc_hooks || MallocHooks::Active()) { 264 if (!FLAG_profiler_native_memory || MallocHooks::Active()) {
266 return; 265 return;
267 } 266 }
268 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 267 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
269 MallocHooksState::malloc_hook_mutex_owner()); 268 MallocHooksState::malloc_hook_mutex_owner());
270 ASSERT(!MallocHooksState::Active()); 269 ASSERT(!MallocHooksState::Active());
271 270
272 MallocHooksState::Init(); 271 MallocHooksState::Init();
273 272
274 // Register malloc hooks. 273 // Register malloc hooks.
275 bool success = false; 274 bool success = false;
276 success = MallocHook::AddNewHook(&MallocHooksState::RecordAllocHook); 275 success = MallocHook::AddNewHook(&MallocHooksState::RecordAllocHook);
277 ASSERT(success); 276 ASSERT(success);
278 success = MallocHook::AddDeleteHook(&MallocHooksState::RecordFreeHook); 277 success = MallocHook::AddDeleteHook(&MallocHooksState::RecordFreeHook);
279 ASSERT(success); 278 ASSERT(success);
280 } 279 }
281 280
282 281
283 void MallocHooks::TearDown() { 282 void MallocHooks::TearDown() {
284 if (!FLAG_enable_malloc_hooks || !MallocHooks::Active()) { 283 if (!FLAG_profiler_native_memory || !MallocHooks::Active()) {
285 return; 284 return;
286 } 285 }
287 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 286 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
288 MallocHooksState::malloc_hook_mutex_owner()); 287 MallocHooksState::malloc_hook_mutex_owner());
289 ASSERT(MallocHooksState::Active()); 288 ASSERT(MallocHooksState::Active());
290 289
291 // Remove malloc hooks. 290 // Remove malloc hooks.
292 bool success = false; 291 bool success = false;
293 success = MallocHook::RemoveNewHook(&MallocHooksState::RecordAllocHook); 292 success = MallocHook::RemoveNewHook(&MallocHooksState::RecordAllocHook);
294 ASSERT(success); 293 ASSERT(success);
(...skipping 17 matching lines...) Expand all
312 311
313 312
314 void MallocHooks::set_stack_trace_collection_enabled(bool enabled) { 313 void MallocHooks::set_stack_trace_collection_enabled(bool enabled) {
315 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 314 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
316 MallocHooksState::malloc_hook_mutex_owner()); 315 MallocHooksState::malloc_hook_mutex_owner());
317 MallocHooksState::set_stack_trace_collection_enabled(enabled); 316 MallocHooksState::set_stack_trace_collection_enabled(enabled);
318 } 317 }
319 318
320 319
321 void MallocHooks::ResetStats() { 320 void MallocHooks::ResetStats() {
322 if (!FLAG_enable_malloc_hooks) { 321 if (!FLAG_profiler_native_memory) {
323 return; 322 return;
324 } 323 }
325 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 324 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
326 MallocHooksState::malloc_hook_mutex_owner()); 325 MallocHooksState::malloc_hook_mutex_owner());
327 if (MallocHooksState::Active()) { 326 if (MallocHooksState::Active()) {
328 MallocHooksState::ResetStats(); 327 MallocHooksState::ResetStats();
329 } 328 }
330 } 329 }
331 330
332 331
333 bool MallocHooks::Active() { 332 bool MallocHooks::Active() {
334 if (!FLAG_enable_malloc_hooks) { 333 if (!FLAG_profiler_native_memory) {
335 return false; 334 return false;
336 } 335 }
337 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 336 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
338 MallocHooksState::malloc_hook_mutex_owner()); 337 MallocHooksState::malloc_hook_mutex_owner());
339 338
340 return MallocHooksState::Active(); 339 return MallocHooksState::Active();
341 } 340 }
342 341
343 342
344 void MallocHooks::PrintToJSONObject(JSONObject* jsobj) { 343 void MallocHooks::PrintToJSONObject(JSONObject* jsobj) {
345 if (!FLAG_enable_malloc_hooks) { 344 if (!FLAG_profiler_native_memory) {
346 return; 345 return;
347 } 346 }
348 intptr_t allocated_memory = 0; 347 intptr_t allocated_memory = 0;
349 intptr_t allocation_count = 0; 348 intptr_t allocation_count = 0;
350 bool add_usage = false; 349 bool add_usage = false;
351 // AddProperty may call malloc which would result in an attempt 350 // AddProperty may call malloc which would result in an attempt
352 // to acquire the lock recursively so we extract the values first 351 // to acquire the lock recursively so we extract the values first
353 // and then add the JSON properties. 352 // and then add the JSON properties.
354 { 353 {
355 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 354 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
356 MallocHooksState::malloc_hook_mutex_owner()); 355 MallocHooksState::malloc_hook_mutex_owner());
357 if (MallocHooksState::Active()) { 356 if (MallocHooksState::Active()) {
358 allocated_memory = MallocHooksState::heap_allocated_memory_in_bytes(); 357 allocated_memory = MallocHooksState::heap_allocated_memory_in_bytes();
359 allocation_count = MallocHooksState::allocation_count(); 358 allocation_count = MallocHooksState::allocation_count();
360 add_usage = true; 359 add_usage = true;
361 } 360 }
362 } 361 }
363 if (add_usage) { 362 if (add_usage) {
364 jsobj->AddProperty("_heapAllocatedMemoryUsage", allocated_memory); 363 jsobj->AddProperty("_heapAllocatedMemoryUsage", allocated_memory);
365 jsobj->AddProperty("_heapAllocationCount", allocation_count); 364 jsobj->AddProperty("_heapAllocationCount", allocation_count);
366 } 365 }
367 } 366 }
368 367
369 368
370 intptr_t MallocHooks::allocation_count() { 369 intptr_t MallocHooks::allocation_count() {
371 if (!FLAG_enable_malloc_hooks) { 370 if (!FLAG_profiler_native_memory) {
372 return 0; 371 return 0;
373 } 372 }
374 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 373 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
375 MallocHooksState::malloc_hook_mutex_owner()); 374 MallocHooksState::malloc_hook_mutex_owner());
376 return MallocHooksState::allocation_count(); 375 return MallocHooksState::allocation_count();
377 } 376 }
378 377
379 378
380 intptr_t MallocHooks::heap_allocated_memory_in_bytes() { 379 intptr_t MallocHooks::heap_allocated_memory_in_bytes() {
381 if (!FLAG_enable_malloc_hooks) { 380 if (!FLAG_profiler_native_memory) {
382 return 0; 381 return 0;
383 } 382 }
384 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 383 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
385 MallocHooksState::malloc_hook_mutex_owner()); 384 MallocHooksState::malloc_hook_mutex_owner());
386 return MallocHooksState::heap_allocated_memory_in_bytes(); 385 return MallocHooksState::heap_allocated_memory_in_bytes();
387 } 386 }
388 387
389 388
390 Sample* MallocHooks::GetSample(const void* ptr) { 389 Sample* MallocHooks::GetSample(const void* ptr) {
391 MallocLocker ml(MallocHooksState::malloc_hook_mutex(), 390 MallocLocker ml(MallocHooksState::malloc_hook_mutex(),
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 ASSERT(result); 438 ASSERT(result);
440 delete allocation_info; 439 delete allocation_info;
441 } 440 }
442 } 441 }
443 } 442 }
444 443
445 } // namespace dart 444 } // namespace dart
446 445
447 #endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT) && 446 #endif // defined(DART_USE_TCMALLOC) && !defined(PRODUCT) &&
448 // !defined(TARGET_ARCH_DBC) && !defined(HOST_OS_FUCHSIA) 447 // !defined(TARGET_ARCH_DBC) && !defined(HOST_OS_FUCHSIA)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698