#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
"""Example for counting perf events."""
# -*- python -*-
# -*- coding: utf-8 -*-

import argparse
import perf

def main(event: str):
    evlist = perf.parse_events(event)

    for evsel in evlist:
        evsel.read_format = perf.FORMAT_TOTAL_TIME_ENABLED | perf.FORMAT_TOTAL_TIME_RUNNING

    evlist.open()
    evlist.enable()

    count = 100000
    while count > 0:
        count -= 1

    evlist.disable()

    for evsel in evlist:
        for cpu in evsel.cpus():
            for thread in evsel.threads():
                counts = evsel.read(cpu, thread)
                print(f"For {evsel} val: {counts.val} enable: {counts.ena} run: {counts.run}")

    evlist.close()

if __name__ == '__main__':
    ap = argparse.ArgumentParser()
    ap.add_argument('-e', '--event', help="Events to open", default="cpu-clock,task-clock")
    args = ap.parse_args()
    main(args.event)
