aboutsummaryrefslogtreecommitdiffstats
path: root/tracecmd.py
diff options
context:
space:
mode:
authorDarren Hart <dvhltc@us.ibm.com>2009-12-28 12:36:30 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-12-29 14:06:52 -0500
commit554aae82850b51e86167322bd946343d98a1ebfd (patch)
treecb11a94256b53d606c2c44e3d2f5c278f439b5ec /tracecmd.py
parentdb89240bf8f2455ef0b88dffd414f69f43201acb (diff)
trace-cmd: Cleanup 64-bit handling for python wrapper
Wrap pevent_read_number_field() with a more intelligent wrapper that returns None on error and a python long on success. Eliminate the hi/lo 64 bit marshalling junk. Use a typemap to get automatic struct accessors (ie record_ts_get()) to return a python long for unsigned long long fields rather than truncating to 32-bits. Signed-off-by: Darren Hart <dvhltc@us.ibm.com> LKML-Reference: <4B38F21B.2020504@us.ibm.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'tracecmd.py')
-rw-r--r--tracecmd.py15
1 files changed, 3 insertions, 12 deletions
diff --git a/tracecmd.py b/tracecmd.py
index 6520a48..f9a2708 100644
--- a/tracecmd.py
+++ b/tracecmd.py
@@ -31,13 +31,6 @@ and it is recommended applications not use it directly.
31TODO: consider a complete class hierarchy of ftrace events... 31TODO: consider a complete class hierarchy of ftrace events...
32""" 32"""
33 33
34def _pevent_read_number_field(field, data):
35 ret,hi,lo = pevent_read_number_field_32(field, data)
36 if ret == 0:
37 return ret,long(long(hi).__lshift__(32)+lo)
38 return ret,None
39
40
41class Event(object): 34class Event(object):
42 def __init__(self, trace, record): 35 def __init__(self, trace, record):
43 self.trace = trace 36 self.trace = trace
@@ -46,8 +39,8 @@ class Event(object):
46 self.ec = pevent_data_event_from_type(trace.pe, type) 39 self.ec = pevent_data_event_from_type(trace.pe, type)
47 40
48 def __str__(self): 41 def __str__(self):
49 return "%f %s: pid=%d comm=%s type=%d" % \ 42 return "%d.%d %s: pid=%d comm=%s type=%d" % \
50 (self.ts, self.name, self.num_field("common_pid"), self.comm, self.type) 43 (self.ts/1000000000, self.ts%1000000000, self.name, self.num_field("common_pid"), self.comm, self.type)
51 44
52 45
53 # TODO: consider caching the results of the properties 46 # TODO: consider caching the results of the properties
@@ -65,7 +58,6 @@ class Event(object):
65 58
66 @property 59 @property
67 def ts(self): 60 def ts(self):
68 # FIXME: this currently returns a float instead of a 64bit nsec value
69 return record_ts_get(self.rec) 61 return record_ts_get(self.rec)
70 62
71 @property 63 @property
@@ -73,9 +65,8 @@ class Event(object):
73 return pevent_data_type(self.trace.pe, self.rec) 65 return pevent_data_type(self.trace.pe, self.rec)
74 66
75 def num_field(self, name): 67 def num_field(self, name):
76 # FIXME: need to find an elegant way to handle 64bit fields
77 f = pevent_find_any_field(self.ec, name) 68 f = pevent_find_any_field(self.ec, name)
78 ret,val = _pevent_read_number_field(f, record_data_get(self.rec)) 69 val = pevent_read_number_field_py(f, record_data_get(self.rec))
79 return val 70 return val
80 71
81 72