1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- # 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.
- # for py2/py3 compatibility
- from __future__ import print_function
- 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()
|