Index: tools/turbolizer/perf-turbo.py |
diff --git a/tools/turbolizer/perf-turbo.py b/tools/turbolizer/perf-turbo.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c90a1174d48769f7a544cb18d70977b4448f9588 |
--- /dev/null |
+++ b/tools/turbolizer/perf-turbo.py |
@@ -0,0 +1,56 @@ |
+# Copyright 2016 the V8 project authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import os |
+import sys |
+import json |
+import re |
+import argparse |
+ |
+sys.path.append(os.environ['PERF_EXEC_PATH'] + \ |
+ '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') |
+ |
+from perf_trace_context import * |
+from Core import * |
+ |
+def trace_begin(): |
+ json_obj['eventCounts'] = {} |
+ prog = re.compile(r'0x[0-9a-fA-F]+') |
+ for phase in reversed(json_obj['phases']): |
+ if phase['name'] == "disassembly": |
+ for line in phase['data'].splitlines(): |
+ result = re.match(prog, line) |
+ if result: |
+ known_addrs.add(result.group(0)) |
+ |
+def trace_end(): |
+ print json.dumps(json_obj) |
+ |
+def process_event(param_dict): |
+ addr = "0x%x" % int(param_dict['sample']['ip']) |
+ |
+ # Only count samples that belong to the function |
+ if addr not in known_addrs: |
+ return |
+ |
+ ev_name = param_dict['ev_name'] |
+ if ev_name not in json_obj['eventCounts']: |
+ json_obj['eventCounts'][ev_name] = {} |
+ if addr not in json_obj['eventCounts'][ev_name]: |
+ json_obj['eventCounts'][ev_name][addr] = 0 |
+ json_obj['eventCounts'][ev_name][addr] += 1 |
+ |
+if __name__ == "__main__": |
+ parser = argparse.ArgumentParser( |
+ description="Perf script to merge profiling data with turbofan compiler " |
+ "traces.") |
+ parser.add_argument("file_name", metavar="JSON File", |
+ help="turbo trace json file.") |
+ |
+ args = parser.parse_args() |
+ |
+ with open(args.file_name, 'r') as json_file: |
+ json_obj = json.load(json_file) |
+ |
+ known_addrs = set() |