OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // The client dump tool for libheap_profiler. It attaches to a process (given | 5 // The client dump tool for libheap_profiler. It attaches to a process (given |
6 // its pid) and dumps all the libheap_profiler tracking information in JSON. | 6 // its pid) and dumps all the libheap_profiler tracking information in JSON. |
7 // The JSON output looks like this: | 7 // The JSON output looks like this: |
8 // { | 8 // { |
9 // "total_allocated": 908748493, # Total bytes allocated and not freed. | 9 // "total_allocated": 908748493, # Total bytes allocated and not freed. |
10 // "num_allocs": 37542, # Number of allocations. | 10 // "num_allocs": 37542, # Number of allocations. |
(...skipping 15 matching lines...) Expand all Loading... |
26 // ^ ^ ^ | 26 // ^ ^ ^ |
27 // | | +-----> Stack frames (absolute virtual addresses). | 27 // | | +-----> Stack frames (absolute virtual addresses). |
28 // | +--------------> Bytes allocated and not freed by the call site. | 28 // | +--------------> Bytes allocated and not freed by the call site. |
29 // +---------------------> Index of the entry (as for "allocs" xref). | 29 // +---------------------> Index of the entry (as for "allocs" xref). |
30 // Indexes are hex and might not be monotonic. | 30 // Indexes are hex and might not be monotonic. |
31 | 31 |
32 #include <errno.h> | 32 #include <errno.h> |
33 #include <fcntl.h> | 33 #include <fcntl.h> |
34 #include <inttypes.h> | 34 #include <inttypes.h> |
35 #include <stdbool.h> | 35 #include <stdbool.h> |
| 36 #include <stddef.h> |
| 37 #include <stdint.h> |
36 #include <stdio.h> | 38 #include <stdio.h> |
37 #include <stdlib.h> | 39 #include <stdlib.h> |
38 #include <string.h> | 40 #include <string.h> |
39 #include <time.h> | |
40 #include <unistd.h> | |
41 #include <sys/ptrace.h> | 41 #include <sys/ptrace.h> |
42 #include <sys/stat.h> | 42 #include <sys/stat.h> |
43 #include <sys/wait.h> | 43 #include <sys/wait.h> |
| 44 #include <time.h> |
| 45 #include <unistd.h> |
44 | 46 |
45 #include "tools/android/heap_profiler/heap_profiler.h" | 47 #include "tools/android/heap_profiler/heap_profiler.h" |
46 | 48 |
47 | |
48 static void lseek_abs(int fd, size_t off); | 49 static void lseek_abs(int fd, size_t off); |
49 static void read_proc_cmdline(char* cmdline, int size); | 50 static void read_proc_cmdline(char* cmdline, int size); |
50 static ssize_t read_safe(int fd, void* buf, size_t count); | 51 static ssize_t read_safe(int fd, void* buf, size_t count); |
51 | 52 |
52 static int pid; | 53 static int pid; |
53 | 54 |
54 | 55 |
55 static int dump_process_heap( | 56 static int dump_process_heap( |
56 int mem_fd, | 57 int mem_fd, |
57 FILE* fmaps, | 58 FILE* fmaps, |
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 ret = dump_process_heap(mem_fd, fmaps, dump_also_allocs, pedantic, comment); | 341 ret = dump_process_heap(mem_fd, fmaps, dump_also_allocs, pedantic, comment); |
341 | 342 |
342 ptrace(PTRACE_DETACH, pid, NULL, NULL); | 343 ptrace(PTRACE_DETACH, pid, NULL, NULL); |
343 | 344 |
344 // Cleanup. | 345 // Cleanup. |
345 fflush(stdout); | 346 fflush(stdout); |
346 close(mem_fd); | 347 close(mem_fd); |
347 fclose(fmaps); | 348 fclose(fmaps); |
348 return ret; | 349 return ret; |
349 } | 350 } |
OLD | NEW |