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