Chromium Code Reviews| Index: tools/ll_prof.py |
| diff --git a/tools/ll_prof.py b/tools/ll_prof.py |
| index f9bea4a61f2fc561f6f98070a840b7673f47e281..afc809f696903ce5be2ce982574f91b0d208e4c0 100755 |
| --- a/tools/ll_prof.py |
| +++ b/tools/ll_prof.py |
| @@ -568,7 +568,7 @@ PERF_EVENT_HEADER_DESC = Descriptor([ |
| ]) |
| -# Reference: kernel/events/core.c |
| +# Reference: kernel/tools/perf/util/event.h |
| PERF_MMAP_EVENT_BODY_DESC = Descriptor([ |
| ("pid", "u32"), |
| ("tid", "u32"), |
| @@ -577,6 +577,20 @@ PERF_MMAP_EVENT_BODY_DESC = Descriptor([ |
| ("pgoff", "u64") |
| ]) |
| +# Reference: kernel/tools/perf/util/event.h |
| +PERF_MMAP2_EVENT_BODY_DESC = Descriptor([ |
| + ("pid", "u32"), |
| + ("tid", "u32"), |
| + ("addr", "u64"), |
| + ("len", "u64"), |
| + ("pgoff", "u64"), |
| + ("maj", "u32"), |
| + ("min", "u32"), |
| + ("ino", "u64"), |
| + ("ino_generation", "u64"), |
| + ("prot", "u32"), |
| + ("flags","u32") |
| +]) |
| # perf_event_attr.sample_type bits control the set of |
| # perf_sample_event fields. |
| @@ -616,6 +630,7 @@ PERF_SAMPLE_EVENT_IP_FORMAT = "u64" |
| PERF_RECORD_MMAP = 1 |
| +PERF_RECORD_MMAP2 = 10 |
| PERF_RECORD_SAMPLE = 9 |
| @@ -663,6 +678,14 @@ class TraceReader(object): |
| offset + header.size] |
| mmap_info.filename = HOST_ROOT + filename[:filename.find(chr(0))] |
| return mmap_info |
|
Michael Achenbach
2015/11/24 10:05:19
nit: empty line
|
| + def ReadMmap2(self, header, offset): |
| + mmap_info = PERF_MMAP2_EVENT_BODY_DESC.Read(self.trace, |
| + offset + self.header_size) |
|
Michael Achenbach
2015/11/24 10:05:19
nit: indentation
|
| + # Read null-terminated filename. |
| + filename = self.trace[offset + self.header_size + ctypes.sizeof(mmap_info): |
| + offset + header.size] |
| + mmap_info.filename = HOST_ROOT + filename[:filename.find(chr(0))] |
| + return mmap_info |
| def ReadSample(self, header, offset): |
| sample = self.sample_event_body_desc.Read(self.trace, |
| @@ -973,6 +996,14 @@ if __name__ == "__main__": |
| else: |
| library_repo.Load(mmap_info, code_map, options) |
| mmap_time += time.time() - start |
| + elif header.type == PERF_RECORD_MMAP2: |
| + start = time.time() |
| + mmap_info = trace_reader.ReadMmap2(header, offset) |
| + if mmap_info.filename == HOST_ROOT + V8_GC_FAKE_MMAP: |
| + log_reader.ReadUpToGC() |
| + else: |
| + library_repo.Load(mmap_info, code_map, options) |
| + mmap_time += time.time() - start |
| elif header.type == PERF_RECORD_SAMPLE: |
| ticks += 1 |
| start = time.time() |