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