diff options
Diffstat (limited to 'unit_trace/trace_reader.py')
-rw-r--r-- | unit_trace/trace_reader.py | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/unit_trace/trace_reader.py b/unit_trace/trace_reader.py index a4c3c05..fe5c03c 100644 --- a/unit_trace/trace_reader.py +++ b/unit_trace/trace_reader.py | |||
@@ -93,7 +93,6 @@ def trace_reader(files): | |||
93 | 93 | ||
94 | # Keep pulling records as long as we have a buffer | 94 | # Keep pulling records as long as we have a buffer |
95 | while len(file_iter_buff) > 0: | 95 | while len(file_iter_buff) > 0: |
96 | |||
97 | # Select the earliest record from those at the heads of the buffers | 96 | # Select the earliest record from those at the heads of the buffers |
98 | earliest = -1 | 97 | earliest = -1 |
99 | buff_to_refill = -1 | 98 | buff_to_refill = -1 |
@@ -120,7 +119,8 @@ def trace_reader(files): | |||
120 | del file_iters[buff_to_refill] | 119 | del file_iters[buff_to_refill] |
121 | 120 | ||
122 | # Check for monotonically increasing time | 121 | # Check for monotonically increasing time |
123 | if last_time is not None and earliest.when < last_time: | 122 | if last_time is not None and earliest.when != 0 and earliest.when < last_time: |
123 | print("FATAL Old: %s, New: %s" % (last_time, earliest.when)) | ||
124 | exit("FATAL ERROR: trace_reader.py: out-of-order record produced") | 124 | exit("FATAL ERROR: trace_reader.py: out-of-order record produced") |
125 | else: | 125 | else: |
126 | last_time = earliest.when | 126 | last_time = earliest.when |
@@ -203,6 +203,12 @@ class StHeader: | |||
203 | keys = ['type','cpu','pid','job'] | 203 | keys = ['type','cpu','pid','job'] |
204 | message = 'The header.' | 204 | message = 'The header.' |
205 | 205 | ||
206 | class StActionData: | ||
207 | format = 'Qb' | ||
208 | formatStr = struct.Struct(StHeader.format + format) | ||
209 | keys = StHeader.keys + ['when','action'] | ||
210 | message = 'An action was performed.' | ||
211 | |||
206 | class StNameData: | 212 | class StNameData: |
207 | format = '16s' | 213 | format = '16s' |
208 | formatStr = struct.Struct(StHeader.format + format) | 214 | formatStr = struct.Struct(StHeader.format + format) |
@@ -269,7 +275,7 @@ class StSysReleaseData: | |||
269 | def _get_type(type_num): | 275 | def _get_type(type_num): |
270 | types = [None,StNameData,StParamData,StReleaseData,StAssignedData, | 276 | types = [None,StNameData,StParamData,StReleaseData,StAssignedData, |
271 | StSwitchToData,StSwitchAwayData,StCompletionData,StBlockData, | 277 | StSwitchToData,StSwitchAwayData,StCompletionData,StBlockData, |
272 | StResumeData,StSysReleaseData] | 278 | StResumeData,StActionData,StSysReleaseData] |
273 | if type_num > len(types)-1 or type_num < 1: | 279 | if type_num > len(types)-1 or type_num < 1: |
274 | raise Exception | 280 | raise Exception |
275 | return types[type_num] | 281 | return types[type_num] |
@@ -278,5 +284,5 @@ def _get_type(type_num): | |||
278 | # programmers of other modules) | 284 | # programmers of other modules) |
279 | def _get_type_name(type_num): | 285 | def _get_type_name(type_num): |
280 | type_names = [None,"name","params","release","assign","switch_to", | 286 | type_names = [None,"name","params","release","assign","switch_to", |
281 | "switch_away","completion","block","resume","sys_release"] | 287 | "switch_away","completion","block","resume","action","sys_release"] |
282 | return type_names[type_num] | 288 | return type_names[type_num] |