From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Anup Sharma <anupnewsmail@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Namhyung Kim <namhyung@kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 4/6] perf scripts python: Add trace end processing and PRODUCT and CATEGORIES information
Date: Thu, 20 Jul 2023 12:09:37 -0300 [thread overview]
Message-ID: <ZLlOMR9UjRFnCfS+@kernel.org> (raw)
In-Reply-To: <662239f70618982ef659362ae5729422f318db66.1689718662.git.anupnewsmail@gmail.com>
Em Wed, Jul 19, 2023 at 04:20:08AM +0530, Anup Sharma escreveu:
> The final output will now be presented in JSON format following the Gecko
> profile structure. Additionally, the inclusion of PRODUCT allows easy retrieval
> of header information for UI.
>
> Furthermore, CATEGORIES have been introduced to enable customization of
> kernel and user colors using input arguments. To facilitate this functionality,
> an argparse-based parser has been implemented.
>
> Note that the implementation of threads will be addressed in subsequent commits."
It is failing here:
[root@five ~]# perf script firefox-gecko-converter.py
Traceback (most recent call last):
File "/var/home/acme/libexec/perf-core/scripts/python/firefox-gecko-converter.py", line 202, in trace_end
"threads": threads,
NameError: name 'threads' is not defined. Did you mean: 'Thread'?
Fatal Python error: handler_call_die: problem in Python trace event handler
Python runtime state: initialized
Current thread 0x00007fde43f98f40 (most recent call first):
<no Python frame>
Extension modules: perf_trace_context (total: 1)
Aborted (core dumped)
[root@five ~]#
We need to be able to test it at each changeset, not just at the end of
the patchkit, so please reorganize this so that running:
perf script firefox-gecko-converter.py
After each patch works.
We need this to bisect problems, etc.
- Arnaldo
> Signed-off-by: Anup Sharma <anupnewsmail@gmail.com>
> ---
> .../scripts/python/firefox-gecko-converter.py | 64 ++++++++++++++++++-
> 1 file changed, 63 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/scripts/python/firefox-gecko-converter.py b/tools/perf/scripts/python/firefox-gecko-converter.py
> index d9b1ec18997a..a0218e2245f2 100644
> --- a/tools/perf/scripts/python/firefox-gecko-converter.py
> +++ b/tools/perf/scripts/python/firefox-gecko-converter.py
> @@ -11,6 +11,8 @@
>
> import os
> import sys
> +import json
> +import argparse
> from dataclasses import dataclass, field
> from typing import List, Dict, Optional, NamedTuple, Set, Tuple, Any
>
> @@ -30,6 +32,13 @@ Milliseconds = float
> # start_time is intialiazed only once for the all event traces.
> start_time = None
>
> +# https://github.com/firefox-devtools/profiler/blob/53970305b51b9b472e26d7457fee1d66cd4e2737/src/types/profile.js#L425
> +# Follow Brendan Gregg's Flamegraph convention: orange for kernel and yellow for user space by default.
> +CATEGORIES = None
> +
> +# The product name is used by the profiler UI to show the Operating system and Processor.
> +PRODUCT = os.popen('uname -op').read().strip()
> +
> # https://github.com/firefox-devtools/profiler/blob/53970305b51b9b472e26d7457fee1d66cd4e2737/src/types/gecko-profile.js#L156
> class Frame(NamedTuple):
> string_id: StringID
> @@ -172,4 +181,57 @@ def process_event(param_dict: Dict) -> None:
> # Trace_end runs at the end and will be used to aggregate
> # the data into the final json object and print it out to stdout.
> def trace_end() -> None:
> - pass
> + # Schema: https://github.com/firefox-devtools/profiler/blob/53970305b51b9b472e26d7457fee1d66cd4e2737/src/types/gecko-profile.js#L305
> + gecko_profile_with_meta = {
> + "meta": {
> + "interval": 1,
> + "processType": 0,
> + "product": PRODUCT,
> + "stackwalk": 1,
> + "debug": 0,
> + "gcpoison": 0,
> + "asyncstack": 1,
> + "startTime": start_time,
> + "shutdownTime": None,
> + "version": 24,
> + "presymbolicated": True,
> + "categories": CATEGORIES,
> + "markerSchema": [],
> + },
> + "libs": [],
> + "threads": threads,
> + "processes": [],
> + "pausedRanges": [],
> + }
> + json.dump(gecko_profile_with_meta, sys.stdout, indent=2)
> +
> +def main() -> None:
> + global CATEGORIES
> + parser = argparse.ArgumentParser(description="Convert perf.data to Firefox\'s Gecko Profile format")
> +
> + # Add the command-line options
> + # Colors must be defined according to this:
> + # https://github.com/firefox-devtools/profiler/blob/50124adbfa488adba6e2674a8f2618cf34b59cd2/res/css/categories.css
> + parser.add_argument('--user-color', default='yellow', help='Color for the User category')
> + parser.add_argument('--kernel-color', default='orange', help='Color for the Kernel category')
> + # Parse the command-line arguments
> + args = parser.parse_args()
> + # Access the values provided by the user
> + user_color = args.user_color
> + kernel_color = args.kernel_color
> +
> + CATEGORIES = [
> + {
> + "name": 'User',
> + "color": user_color,
> + "subcategories": ['Other']
> + },
> + {
> + "name": 'Kernel',
> + "color": kernel_color,
> + "subcategories": ['Other']
> + },
> + ]
> +
> +if __name__ == '__main__':
> + main()
> --
> 2.34.1
>
--
- Arnaldo
next prev parent reply other threads:[~2023-07-20 15:09 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-18 22:45 [PATCH v4 0/6] Add support for Firefox's gecko profile format Anup Sharma
2023-07-18 22:47 ` [PATCH v4 1/6] perf scripts python: Add initial script file with usage information Anup Sharma
2023-07-18 22:48 ` [PATCH v4 2/6] perf scripts python: Extact necessary information from process event Anup Sharma
2023-07-18 22:49 ` [PATCH v4 3/6] perf scripts python: Add classes and conversion functions Anup Sharma
2023-07-18 22:50 ` [PATCH v4 4/6] perf scripts python: Add trace end processing and PRODUCT and CATEGORIES information Anup Sharma
2023-07-20 15:09 ` Arnaldo Carvalho de Melo [this message]
2023-07-18 22:50 ` [PATCH v4 5/6] perf scripts python: implement internal get or create frame, stack and string function Anup Sharma
2023-07-18 22:52 ` [PATCH v4 6/6] perf scripts python: Implement add sample function and thread processing Anup Sharma
2023-07-20 15:13 ` Arnaldo Carvalho de Melo
2023-07-19 11:04 ` [PATCH v4 0/6] Add support for Firefox's gecko profile format Anup Sharma
2023-07-19 15:22 ` Ian Rogers
2023-07-19 21:21 ` Anup Sharma
2023-07-20 15:14 ` Arnaldo Carvalho de Melo
2023-07-20 15:36 ` Arnaldo Carvalho de Melo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZLlOMR9UjRFnCfS+@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=anupnewsmail@gmail.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.