1e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#! /usr/bin/python
2e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# -*- python -*-
3e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng# -*- coding: utf-8 -*-
4e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   twatch - Experimental use of the perf python interface
5e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   Copyright (C) 2011 Arnaldo Carvalho de Melo <acme@redhat.com>
6e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
7e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   This application is free software; you can redistribute it and/or
8e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   modify it under the terms of the GNU General Public License
9e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   as published by the Free Software Foundation; version 2.
10e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#
11e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   This application is distributed in the hope that it will be useful,
12e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   but WITHOUT ANY WARRANTY; without even the implied warranty of
13e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng#   General Public License for more details.
15e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
16e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengimport perf
17e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
18e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengdef main():
19e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	cpus = perf.cpu_map()
20e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	threads = perf.thread_map()
21e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evsel = perf.evsel(task = 1, comm = 1, mmap = 0,
22e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			   wakeup_events = 1, sample_period = 1,
23e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			   sample_id_all = 1,
24e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			   sample_type = perf.SAMPLE_PERIOD | perf.SAMPLE_TID | perf.SAMPLE_CPU | perf.SAMPLE_TID)
25e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evsel.open(cpus = cpus, threads = threads);
26e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evlist = perf.evlist(cpus, threads)
27e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evlist.add(evsel)
28e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	evlist.mmap()
29e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng	while True:
30e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		evlist.poll(timeout = -1)
31e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng		for cpu in cpus:
32e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			event = evlist.read_on_cpu(cpu)
33e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			if not event:
34e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng				continue
35e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			print "cpu: %2d, pid: %4d, tid: %4d" % (event.sample_cpu,
36e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng								event.sample_pid,
37e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng								event.sample_tid),
38e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng			print event
39e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng
40e6817ec1d8ab31fc7b01906e305f848542df6413Ben Chengif __name__ == '__main__':
41e6817ec1d8ab31fc7b01906e305f848542df6413Ben Cheng    main()
42