From: Stefan Hajnoczi <stefanha@redhat.com>
To: qemu-devel@nongnu.org
Cc: Peter Maydell <peter.maydell@linaro.org>,
Stefan Hajnoczi <stefanha@redhat.com>
Subject: [Qemu-devel] [PULL 2/5] simpletrace: add support for trace record pid field
Date: Mon, 9 Jun 2014 15:45:11 +0200 [thread overview]
Message-ID: <1402321522-18408-4-git-send-email-stefanha@redhat.com> (raw)
In-Reply-To: <1402321522-18408-1-git-send-email-stefanha@redhat.com>
Extract the pid field from the trace record and print it.
Change the trace record tuple from:
(event_num, timestamp, arg1, ..., arg6)
to:
(event_num, timestamp, pid, arg1, ..., arg6)
Trace event methods now support 3 prototypes:
1. <event-name>(arg1, arg2, arg3)
2. <event-name>(timestamp, arg1, arg2, arg3)
3. <event-name>(timestamp, pid, arg1, arg2, arg3)
Existing script continue to work without changes, they only know about
prototypes 1 and 2.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
---
scripts/simpletrace.py | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/scripts/simpletrace.py b/scripts/simpletrace.py
index 800835a..1aa9460 100755
--- a/scripts/simpletrace.py
+++ b/scripts/simpletrace.py
@@ -31,10 +31,10 @@ def read_header(fobj, hfmt):
return struct.unpack(hfmt, hdr)
def get_record(edict, rechdr, fobj):
- """Deserialize a trace record from a file into a tuple (event_num, timestamp, arg1, ..., arg6)."""
+ """Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6)."""
if rechdr is None:
return None
- rec = (rechdr[0], rechdr[1])
+ rec = (rechdr[0], rechdr[1], rechdr[3])
if rechdr[0] != dropped_event_id:
event_id = rechdr[0]
event = edict[event_id]
@@ -54,12 +54,12 @@ def get_record(edict, rechdr, fobj):
def read_record(edict, fobj):
- """Deserialize a trace record from a file into a tuple (event_num, timestamp, arg1, ..., arg6)."""
+ """Deserialize a trace record from a file into a tuple (event_num, timestamp, pid, arg1, ..., arg6)."""
rechdr = read_header(fobj, rec_header_fmt)
return get_record(edict, rechdr, fobj) # return tuple of record elements
def read_trace_file(edict, fobj):
- """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, arg1, ..., arg6)."""
+ """Deserialize trace records from a file, yielding record tuples (event_num, timestamp, pid, arg1, ..., arg6)."""
header = read_header(fobj, log_header_fmt)
if header is None or \
header[0] != header_event_id or \
@@ -127,10 +127,13 @@ def process(events, log, analyzer):
fn_argcount = len(inspect.getargspec(fn)[0]) - 1
if fn_argcount == event_argcount + 1:
# Include timestamp as first argument
- return lambda _, rec: fn(*rec[1:2 + event_argcount])
+ return lambda _, rec: fn(*((rec[1:2],) + rec[3:3 + event_argcount]))
+ elif fn_argcount == event_argcount + 2:
+ # Include timestamp and pid
+ return lambda _, rec: fn(*rec[1:3 + event_argcount])
else:
- # Just arguments, no timestamp
- return lambda _, rec: fn(*rec[2:2 + event_argcount])
+ # Just arguments, no timestamp or pid
+ return lambda _, rec: fn(*rec[3:3 + event_argcount])
analyzer.begin()
fn_cache = {}
@@ -162,19 +165,20 @@ if __name__ == '__main__':
self.last_timestamp = None
def catchall(self, event, rec):
- i = 1
timestamp = rec[1]
if self.last_timestamp is None:
self.last_timestamp = timestamp
delta_ns = timestamp - self.last_timestamp
self.last_timestamp = timestamp
- fields = [event.name, '%0.3f' % (delta_ns / 1000.0)]
+ fields = [event.name, '%0.3f' % (delta_ns / 1000.0),
+ 'pid=%d' % rec[2]]
+ i = 3
for type, name in event.args:
if is_string(type):
- fields.append('%s=%s' % (name, rec[i + 1]))
+ fields.append('%s=%s' % (name, rec[i]))
else:
- fields.append('%s=0x%x' % (name, rec[i + 1]))
+ fields.append('%s=0x%x' % (name, rec[i]))
i += 1
print ' '.join(fields)
--
1.9.3
next prev parent reply other threads:[~2014-06-09 13:45 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-09 13:45 [Qemu-devel] [PULL 0/5] Tracing patches Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 1/5] trace: add pid field to simpletrace record Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 1/9] trace: [tracetool] Add method 'Event.api' to build event names Stefan Hajnoczi
2014-06-09 13:45 ` Stefan Hajnoczi [this message]
2014-06-09 13:45 ` [Qemu-devel] [PULL 2/9] trace: [tracetool] Add methods 'Event.copy' and 'Arguments.copy' Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 3/5] trace: Replace error with warning if event is not defined Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 3/9] trace: [tracetool] Spacing changes Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 4/5] trace: Multi-backend tracing Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 4/9] trace: [tracetool] Cosmetic changes Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 5/5] trace: Replace fprintf with error_report and print location Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 5/9] trace: [tracetool] Show list of frontends and backends sorted by name Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 6/9] trace: [tracetool] Change format docs to point to the generated file Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 7/9] trace: [simple] Bump up log version number Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 8/9] trace: [tracetool] Minimize the amount of per-backend code Stefan Hajnoczi
2014-06-09 13:45 ` [Qemu-devel] [PULL 9/9] configure: Show trace output file conditionally Stefan Hajnoczi
2014-06-09 14:24 ` [Qemu-devel] [PULL 0/5] Tracing patches Stefan Hajnoczi
-- strict thread matches above, loose matches on Subject: below --
2014-06-09 15:23 [Qemu-devel] [PULL v2 0/5] Tracing pull request Stefan Hajnoczi
2014-06-09 15:23 ` [Qemu-devel] [PULL 2/5] simpletrace: add support for trace record pid field Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1402321522-18408-4-git-send-email-stefanha@redhat.com \
--to=stefanha@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).