xref: /linux/tools/perf/pmu-events/arm64_metrics.py (revision c7decec2f2d2ab0366567f9e30c0e1418cece43f)
119eab0efSIan Rogers#!/usr/bin/env python3
219eab0efSIan Rogers# SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
319eab0efSIan Rogersimport argparse
419eab0efSIan Rogersimport os
56bd6c5efSIan Rogersfrom metric import (JsonEncodeMetric, JsonEncodeMetricGroupDescriptions, LoadEvents,
66bd6c5efSIan Rogers                    MetricGroup)
7*82e53e7aSIan Rogersfrom common_metrics import Cycles
819eab0efSIan Rogers
919eab0efSIan Rogers# Global command line arguments.
1019eab0efSIan Rogers_args = None
1119eab0efSIan Rogers
1219eab0efSIan Rogers
1319eab0efSIan Rogersdef main() -> None:
1419eab0efSIan Rogers    global _args
1519eab0efSIan Rogers
1619eab0efSIan Rogers    def dir_path(path: str) -> str:
1719eab0efSIan Rogers        """Validate path is a directory for argparse."""
1819eab0efSIan Rogers        if os.path.isdir(path):
1919eab0efSIan Rogers            return path
2019eab0efSIan Rogers        raise argparse.ArgumentTypeError(
2119eab0efSIan Rogers            f'\'{path}\' is not a valid directory')
2219eab0efSIan Rogers
2319eab0efSIan Rogers    parser = argparse.ArgumentParser(description="ARM perf json generator")
2419eab0efSIan Rogers    parser.add_argument(
2519eab0efSIan Rogers        "-metricgroups", help="Generate metricgroups data", action='store_true')
2619eab0efSIan Rogers    parser.add_argument("vendor", help="e.g. arm")
2719eab0efSIan Rogers    parser.add_argument("model", help="e.g. neoverse-n1")
2819eab0efSIan Rogers    parser.add_argument(
2919eab0efSIan Rogers        'events_path',
3019eab0efSIan Rogers        type=dir_path,
3119eab0efSIan Rogers        help='Root of tree containing architecture directories containing json files'
3219eab0efSIan Rogers    )
3319eab0efSIan Rogers    _args = parser.parse_args()
3419eab0efSIan Rogers
356bd6c5efSIan Rogers    directory = f"{_args.events_path}/arm64/{_args.vendor}/{_args.model}/"
366bd6c5efSIan Rogers    LoadEvents(directory)
376bd6c5efSIan Rogers
38*82e53e7aSIan Rogers    all_metrics = MetricGroup("", [
39*82e53e7aSIan Rogers        Cycles(),
40*82e53e7aSIan Rogers    ])
4119eab0efSIan Rogers
4219eab0efSIan Rogers    if _args.metricgroups:
4319eab0efSIan Rogers        print(JsonEncodeMetricGroupDescriptions(all_metrics))
4419eab0efSIan Rogers    else:
4519eab0efSIan Rogers        print(JsonEncodeMetric(all_metrics))
4619eab0efSIan Rogers
4719eab0efSIan Rogers
4819eab0efSIan Rogersif __name__ == '__main__':
4919eab0efSIan Rogers    main()
50