v8/tools/turbolizer-perf.py

60 lines
1.6 KiB
Python
Raw Normal View History

# 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()