aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKP Singh <kpsingh@google.com>2017-06-21 22:10:14 +0200
committerKP Singh <kpsingh@google.com>2017-06-21 22:10:14 +0200
commit3b9f139fdcdb086e7ac8314a4beb3441a0b1418c (patch)
tree98550b0059ea3f694ded757f23fd8c18b4071465
parent16ad8df451f9280ba91f3bc03f91c781b4f4596a (diff)
parent609a57afbb408c756357aa95f36713fa77be1865 (diff)
downloadtrappy-3b9f139fdcdb086e7ac8314a4beb3441a0b1418c.tar.gz
Merge branch 'joelagnel-systrace-line-test'
-rw-r--r--tests/test_systrace.py41
-rw-r--r--trappy/systrace.py12
2 files changed, 42 insertions, 11 deletions
diff --git a/tests/test_systrace.py b/tests/test_systrace.py
index 0442458..667bf2c 100644
--- a/tests/test_systrace.py
+++ b/tests/test_systrace.py
@@ -17,6 +17,8 @@ import utils_tests
import trappy
+import numpy as np
+
class TestSystrace(utils_tests.SetupDirectory):
def __init__(self, *args, **kwargs):
@@ -55,14 +57,41 @@ class TestSystrace(utils_tests.SetupDirectory):
def test_systrace_userspace(self):
"""Test parsing of userspace events"""
+ # Test a 'B' event (begin)
trace = trappy.SysTrace("trace_sf.html")
dfr = trace.tracing_mark_write.data_frame
- self.assertTrue(dfr['__pid'].iloc[2], 7459)
- self.assertTrue(dfr['__comm'].iloc[2], 'RenderThread')
- self.assertTrue(dfr['pid'].iloc[2], 7459)
- self.assertTrue(dfr['event'].iloc[2], 'B')
- self.assertTrue(dfr['func'].iloc[2], 'notifyFramePending')
- self.assertTrue(dfr['data'].iloc[-2], 'HW_VSYNC_0')
+ self.assertEquals(dfr['__pid'].iloc[2], 7591)
+ self.assertEquals(dfr['__comm'].iloc[2], 'RenderThread')
+ self.assertEquals(dfr['pid'].iloc[2], 7459)
+ self.assertEquals(dfr['event'].iloc[2], 'B')
+ self.assertEquals(dfr['func'].iloc[2], 'notifyFramePending')
+ self.assertEquals(dfr['data'].iloc[2], None)
+
+ # Test a 'C' event (count)
+ self.assertEquals(dfr['__pid'].iloc[-2], 612)
+ self.assertEquals(dfr['__comm'].iloc[-2], 'HwBinder:594_1')
+ self.assertEquals(dfr['pid'].iloc[-2], 594)
+ self.assertEquals(dfr['func'].iloc[-2], 'HW_VSYNC_0')
+ self.assertEquals(dfr['event'].iloc[-2], 'C')
+ self.assertEquals(dfr['data'].iloc[-2], '0')
+
+ # Test an 'E' event (end)
+ edfr = dfr[dfr['event'] == 'E']
+ self.assertEquals(edfr['__pid'].iloc[0], 7591)
+ self.assertEquals(edfr['__comm'].iloc[0], 'RenderThread')
+ self.assertTrue(np.isnan(edfr['pid'].iloc[0]))
+ self.assertEquals(edfr['func'].iloc[0], None)
+ self.assertEquals(edfr['event'].iloc[0], 'E')
+ self.assertEquals(edfr['data'].iloc[0], None)
+
+ def test_systrace_line_num(self):
+ """Test for line numbers in a systrace"""
+ trace = trappy.SysTrace("trace_sf.html")
+ dfr = trace.sched_switch.data_frame
+ self.assertEquals(trace.lines, 2506)
+ self.assertEquals(dfr['__line'].iloc[0], 0)
+ self.assertEquals(dfr['__line'].iloc[1], 6)
+ self.assertEquals(dfr['__line'].iloc[-1], 2505)
class TestLegacySystrace(utils_tests.SetupDirectory):
diff --git a/trappy/systrace.py b/trappy/systrace.py
index 0a7f42b..2404f92 100644
--- a/trappy/systrace.py
+++ b/trappy/systrace.py
@@ -17,7 +17,7 @@ from trappy.ftrace import GenericFTrace
import re
SYSTRACE_EVENT = re.compile(
- r'^(?P<event>[A-Z])(\|(?P<pid>\d+)\|(?P<func>.*)(\|(?P<data>\d+))?)?')
+ r'^(?P<event>[A-Z])(\|(?P<pid>\d+)\|(?P<func>[^|]*)(\|(?P<data>.*))?)?')
class drop_before_trace(object):
"""Object that, when called, returns True if the line is not part of
@@ -88,9 +88,11 @@ class SysTrace(GenericFTrace):
match = SYSTRACE_EVENT.match(data_str)
if match:
- data_dict = { 'event': match.group('event'),
- 'pid' : match.group('pid'),
- 'func' : match.group('func'),
- 'data' : match.group('data') }
+ data_dict = {
+ 'event': match.group('event'),
+ 'pid' : int(match.group('pid')) if match.group('pid') else None,
+ 'func' : match.group('func' ),
+ 'data' : match.group('data' )
+ }
return data_dict