xref: /linux/tools/perf/pmu-events/arm64_metrics.py (revision c7decec2f2d2ab0366567f9e30c0e1418cece43f)
1#!/usr/bin/env python3
2# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
3import argparse
4import os
5from metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, LoadEvents,
6                    MetricGroup)
7from common_metrics import Cycles
8
9# Global command line arguments.
10_args = None
11
12
13def main() -> None:
14    global _args
15
16    def dir_path(path: str) -> str:
17        """Validate path is a directory for argparse."""
18        if os.path.isdir(path):
19            return path
20        raise argparse.ArgumentTypeError(
21            f'\'{path}\' is not a valid directory')
22
23    parser = argparse.ArgumentParser(description="ARM perf json generator")
24    parser.add_argument(
25        "-metricgroups", help="Generate metricgroups data", action='store_true')
26    parser.add_argument("vendor", help="e.g. arm")
27    parser.add_argument("model", help="e.g. neoverse-n1")
28    parser.add_argument(
29        'events_path',
30        type=dir_path,
31        help='Root of tree containing architecture directories containing json files'
32    )
33    _args = parser.parse_args()
34
35    directory = f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}/"
36    LoadEvents(directory)
37
38    all_metrics = MetricGroup("", [
39        Cycles(),
40    ])
41
42    if _args.metricgroups:
43        print(JsonEncodeMetricGroupDescriptions(all_metrics))
44    else:
45        print(JsonEncodeMetric(all_metrics))
46
47
48if __name__ == '__main__':
49    main()
50