162306a36Sopenharmony_ci#! /usr/bin/env python 262306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 362306a36Sopenharmony_ci# -*- python -*- 462306a36Sopenharmony_ci# -*- coding: utf-8 -*- 562306a36Sopenharmony_ci 662306a36Sopenharmony_ciimport perf 762306a36Sopenharmony_ci 862306a36Sopenharmony_ciclass tracepoint(perf.evsel): 962306a36Sopenharmony_ci def __init__(self, sys, name): 1062306a36Sopenharmony_ci config = perf.tracepoint(sys, name) 1162306a36Sopenharmony_ci perf.evsel.__init__(self, 1262306a36Sopenharmony_ci type = perf.TYPE_TRACEPOINT, 1362306a36Sopenharmony_ci config = config, 1462306a36Sopenharmony_ci freq = 0, sample_period = 1, wakeup_events = 1, 1562306a36Sopenharmony_ci sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU | perf.SAMPLE_RAW | perf.SAMPLE_TIME) 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cidef main(): 1862306a36Sopenharmony_ci tp = tracepoint("sched", "sched_switch") 1962306a36Sopenharmony_ci cpus = perf.cpu_map() 2062306a36Sopenharmony_ci threads = perf.thread_map(-1) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci evlist = perf.evlist(cpus, threads) 2362306a36Sopenharmony_ci evlist.add(tp) 2462306a36Sopenharmony_ci evlist.open() 2562306a36Sopenharmony_ci evlist.mmap() 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci while True: 2862306a36Sopenharmony_ci evlist.poll(timeout = -1) 2962306a36Sopenharmony_ci for cpu in cpus: 3062306a36Sopenharmony_ci event = evlist.read_on_cpu(cpu) 3162306a36Sopenharmony_ci if not event: 3262306a36Sopenharmony_ci continue 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci if not isinstance(event, perf.sample_event): 3562306a36Sopenharmony_ci continue 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci print("time %u prev_comm=%s prev_pid=%d prev_prio=%d prev_state=0x%x ==> next_comm=%s next_pid=%d next_prio=%d" % ( 3862306a36Sopenharmony_ci event.sample_time, 3962306a36Sopenharmony_ci event.prev_comm, 4062306a36Sopenharmony_ci event.prev_pid, 4162306a36Sopenharmony_ci event.prev_prio, 4262306a36Sopenharmony_ci event.prev_state, 4362306a36Sopenharmony_ci event.next_comm, 4462306a36Sopenharmony_ci event.next_pid, 4562306a36Sopenharmony_ci event.next_prio)) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciif __name__ == '__main__': 4862306a36Sopenharmony_ci main() 49