11699d3efSAnup Sharma# firefox-gecko-converter.py - Convert perf record output to Firefox's gecko profile format 21699d3efSAnup Sharma# SPDX-License-Identifier: GPL-2.0 31699d3efSAnup Sharma# 41699d3efSAnup Sharma# The script converts perf.data to Gecko Profile Format, 51699d3efSAnup Sharma# which can be read by https://profiler.firefox.com/. 61699d3efSAnup Sharma# 71699d3efSAnup Sharma# Usage: 81699d3efSAnup Sharma# 91699d3efSAnup Sharma# perf record -a -g -F 99 sleep 60 101699d3efSAnup Sharma# perf script report gecko > output.json 111699d3efSAnup Sharma 121699d3efSAnup Sharmaimport os 131699d3efSAnup Sharmaimport sys 141699d3efSAnup Sharmafrom typing import Dict 151699d3efSAnup Sharma 161699d3efSAnup Sharma# Add the Perf-Trace-Util library to the Python path 171699d3efSAnup Sharmasys.path.append(os.environ['PERF_EXEC_PATH'] + \ 181699d3efSAnup Sharma '/scripts/python/Perf-Trace-Util/lib/Perf/Trace') 191699d3efSAnup Sharma 201699d3efSAnup Sharmafrom perf_trace_context import * 211699d3efSAnup Sharmafrom Core import * 221699d3efSAnup Sharma 23*0a02e44cSAnup Sharma# start_time is intialiazed only once for the all event traces. 24*0a02e44cSAnup Sharmastart_time = None 25*0a02e44cSAnup Sharma 261699d3efSAnup Sharma# Uses perf script python interface to parse each 271699d3efSAnup Sharma# event and store the data in the thread builder. 281699d3efSAnup Sharmadef process_event(param_dict: Dict) -> None: 29*0a02e44cSAnup Sharma global start_time 30*0a02e44cSAnup Sharma global tid_to_thread 31*0a02e44cSAnup Sharma time_stamp = (param_dict['sample']['time'] // 1000) / 1000 32*0a02e44cSAnup Sharma pid = param_dict['sample']['pid'] 33*0a02e44cSAnup Sharma tid = param_dict['sample']['tid'] 34*0a02e44cSAnup Sharma comm = param_dict['comm'] 35*0a02e44cSAnup Sharma 36*0a02e44cSAnup Sharma # Start time is the time of the first sample 37*0a02e44cSAnup Sharma if not start_time: 38*0a02e44cSAnup Sharma start_time = time_stamp 391699d3efSAnup Sharma 401699d3efSAnup Sharma# Trace_end runs at the end and will be used to aggregate 411699d3efSAnup Sharma# the data into the final json object and print it out to stdout. 421699d3efSAnup Sharmadef trace_end() -> None: 431699d3efSAnup Sharma pass 44