Commit 9a79c50c authored by Tianyou Li's avatar Tianyou Li Committed by Namhyung Kim
Browse files

perf script: Add -e option to flamegraph script



When processing the perf data file generated with multiple events,
the flamegraph script will count all the events regardless of
different event names.

This patch tries to add a -e option to specify the event name that
the flamegraph will be generated accordingly. If the -e option omitted,
the behavior remains unchanged.

Signed-off-by: default avatarTianyou Li <tianyou.li@intel.com>
Reviewed-by: default avatarPan Deng <pan.deng@intel.com>
Reviewed-by: default avatarZhiguo Zhou <zhiguo.zhou@intel.com>
Reviewed-by: default avatarWangyang Guo <wangyang.guo@intel.com>
Reviewed-by: default avatarTim Chen <tim.c.chen@linux.intel.com>
Link: https://lore.kernel.org/r/20250610040536.2390060-2-tianyou.li@intel.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent df9c2993
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -94,6 +94,11 @@ class FlameGraphCLI:
        return child

    def process_event(self, event):
        # ignore events where the event name does not match
        # the one specified by the user
        if self.args.event_name and event.get("ev_name") != self.args.event_name:
            return

        pid = event.get("sample", {}).get("pid", 0)
        # event["dso"] sometimes contains /usr/lib/debug/lib/modules/*/vmlinux
        # for user-space processes; let's use pid for kernel or user-space distinction
@@ -130,7 +135,10 @@ class FlameGraphCLI:
            else:
                output = subprocess.check_output(["perf", "report", "--header-only"])

            return output.decode("utf-8")
            result = output.decode("utf-8")
            if self.args.event_name:
                result += "\nFocused event: " + self.args.event_name
            return result
        except Exception as err:  # pylint: disable=broad-except
            print("Error reading report header: {}".format(err), file=sys.stderr)
            return ""
@@ -241,6 +249,11 @@ if __name__ == "__main__":
                        default=False,
                        action="store_true",
                        help="allow unprompted downloading of HTML template")
    parser.add_argument("-e", "--event",
                        default="",
                        dest="event_name",
                        type=str,
                        help="specify the event to generate flamegraph for")

    cli_args = parser.parse_args()
    cli = FlameGraphCLI(cli_args)