Chromium Code Reviews| Index: tools/cygprofile/mergetraces.py |
| diff --git a/tools/cygprofile/mergetraces.py b/tools/cygprofile/mergetraces.py |
| index f349ad3b885374cada16b86b1cc2c2ed2018f4da..671646491cee427b1277413ba051da218032c02f 100755 |
| --- a/tools/cygprofile/mergetraces.py |
| +++ b/tools/cygprofile/mergetraces.py |
| @@ -14,6 +14,7 @@ create a single log that is an ordered trace of calls by both processes. |
| import optparse |
| import string |
| +import sets |
| import sys |
| def ParseLogLines(lines): |
| @@ -143,21 +144,30 @@ def GroupByProcessAndThreadId(input_trace): |
| result each thread has its own contiguous segment of code (ordered by |
| timestamp) and processes also have their code isolated (i.e. not interleaved). |
| """ |
| - def MakeTimestamp(usec, sec): |
| - return usec * 1000000 + sec |
| + def MakeTimestamp(sec, usec): |
| + return sec * 1000000 + usec |
| def PidAndTidFromString(pid_and_tid): |
| strings = pid_and_tid.split(':') |
| return (int(strings[0]), int(strings[1])) |
| + tid_to_pids_map = {} |
| pid_first_seen = {} |
| tid_first_seen = {} |
| + |
| for (sec, usec, pid_and_tid, _) in input_trace: |
| (pid, tid) = PidAndTidFromString(pid_and_tid) |
| + |
| + # Make sure that thread IDs are unique since this a property we rely on. |
|
pasko
2014/06/06 09:41:44
s/this/this is/
Philippe
2014/06/06 09:50:23
Done.
Philippe
2014/06/06 09:50:23
Done.
|
| + pids_for_tid = tid_to_pids_map.setdefault(tid, sets.Set()) |
| + pids_for_tid.add(pid) |
| + if len(pids_for_tid) > 1: |
| + raise Exception('Thread IDs should be unique.') |
|
pasko
2014/06/06 09:41:44
in this context we actually have the tid and two p
Philippe
2014/06/06 09:50:23
Yeah :) I haven't slept much last night :)
|
| + |
| if not pid in pid_first_seen: |
| - pid_first_seen[pid] = MakeTimestamp(usec, sec) |
| + pid_first_seen[pid] = MakeTimestamp(sec, usec) |
| if not tid in tid_first_seen: |
| - tid_first_seen[tid] = MakeTimestamp(usec, sec) |
| + tid_first_seen[tid] = MakeTimestamp(sec, usec) |
| def CompareEvents(event1, event2): |
| (sec1, usec1, pid_and_tid, _) = event1 |
| @@ -171,7 +181,7 @@ def GroupByProcessAndThreadId(input_trace): |
| tid_cmp = cmp(tid_first_seen[tid1], tid_first_seen[tid2]) |
| if tid_cmp != 0: |
| return tid_cmp |
| - return cmp(MakeTimestamp(usec1, sec1), MakeTimestamp(usec2, sec2)) |
| + return cmp(MakeTimestamp(sec1, usec1), MakeTimestamp(sec2, usec2)) |
| return sorted(input_trace, cmp=CompareEvents) |