18c2ecf20Sopenharmony_ci#! /usr/bin/env python 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci# -*- python -*- 48c2ecf20Sopenharmony_ci# -*- coding: utf-8 -*- 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ciimport perf 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ciclass tracepoint(perf.evsel): 98c2ecf20Sopenharmony_ci def __init__(self, sys, name): 108c2ecf20Sopenharmony_ci config = perf.tracepoint(sys, name) 118c2ecf20Sopenharmony_ci perf.evsel.__init__(self, 128c2ecf20Sopenharmony_ci type = perf.TYPE_TRACEPOINT, 138c2ecf20Sopenharmony_ci config = config, 148c2ecf20Sopenharmony_ci freq = 0, sample_period = 1, wakeup_events = 1, 158c2ecf20Sopenharmony_ci sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU | perf.SAMPLE_RAW | perf.SAMPLE_TIME) 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_cidef main(): 188c2ecf20Sopenharmony_ci tp = tracepoint("sched", "sched_switch") 198c2ecf20Sopenharmony_ci cpus = perf.cpu_map() 208c2ecf20Sopenharmony_ci threads = perf.thread_map(-1) 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci evlist = perf.evlist(cpus, threads) 238c2ecf20Sopenharmony_ci evlist.add(tp) 248c2ecf20Sopenharmony_ci evlist.open() 258c2ecf20Sopenharmony_ci evlist.mmap() 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci while True: 288c2ecf20Sopenharmony_ci evlist.poll(timeout = -1) 298c2ecf20Sopenharmony_ci for cpu in cpus: 308c2ecf20Sopenharmony_ci event = evlist.read_on_cpu(cpu) 318c2ecf20Sopenharmony_ci if not event: 328c2ecf20Sopenharmony_ci continue 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci if not isinstance(event, perf.sample_event): 358c2ecf20Sopenharmony_ci continue 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_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" % ( 388c2ecf20Sopenharmony_ci event.sample_time, 398c2ecf20Sopenharmony_ci event.prev_comm, 408c2ecf20Sopenharmony_ci event.prev_pid, 418c2ecf20Sopenharmony_ci event.prev_prio, 428c2ecf20Sopenharmony_ci event.prev_state, 438c2ecf20Sopenharmony_ci event.next_comm, 448c2ecf20Sopenharmony_ci event.next_pid, 458c2ecf20Sopenharmony_ci event.next_prio) 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ciif __name__ == '__main__': 488c2ecf20Sopenharmony_ci main() 49