xref: /linux-6.15/tools/perf/scripts/python/gecko.py (revision 0a02e44c)
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