def test_cpu_counting(self):
        """In a legacy SysTrace trace, trappy gets the number of cpus"""

        trace = trappy.SysTrace("trace.html")

        self.assertTrue(hasattr(trace, "_cpus"))
        self.assertEquals(trace._cpus, 8)
Beispiel #2
0
    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.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_cpu_counting(self):
        """SysTrace traces know the number of cpus"""

        trace = trappy.SysTrace("trace.html")

        self.assertTrue(hasattr(trace, "_cpus"))
        self.assertEquals(trace._cpus, 3)
Beispiel #4
0
def plot_trace(trace, execnames=None, pids=None):
    """Creates a kernelshark like plot of the trace file

    :param trace: The path to the trace or a trace object
    :type trace: str, :mod:`trappy.trace.FTrace`, :mod:`trappy.trace.SysTrace`
        or :mod:`trappy.trace.BareTrace`.

    :param execnames: List of execnames to be filtered. If not
        specified all execnames will be plotted
    :type execnames: list, str

    :param pids: List of pids to be filtered. If not specified
        all pids will be plotted
    :type pids: list, str
    """

    if not IPythonConf.check_ipython():
        raise RuntimeError("plot_trace needs ipython environment")

    if not isinstance(trace, trappy.BareTrace):
        if trace.endswith("html"):
            trace = trappy.SysTrace(trace)
        else:
            trace = trappy.FTrace(trace)

    data, procs, domain = Utils.get_trace_event_data(trace, execnames, pids)
    trace_graph = EventPlot.EventPlot(data,
                                      procs,
                                      domain,
                                      lane_prefix="CPU :",
                                      num_lanes=int(trace._cpus))
    trace_graph.view()
Beispiel #5
0
 def test_parse_tracing_mark_write_events(self):
     """Check that tracing_mark_write events are parsed without errors"""
     events = ['tracing_mark_write']
     try:
         trace = trappy.SysTrace("trace.html", events=events)
     except TypeError as e:
         self.fail("tracing_mark_write parsing failed with {} exception"\
                   .format(e.message))
Beispiel #6
0
 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)
Beispiel #7
0
    def test_systrace_userspace(self):
        """Test parsing of userspace events"""

        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')
Beispiel #8
0
    def test_cache_not_created(self):
        """Test that cache should not be created when disabled """
        GenericFTrace.disable_cache = True
        traces = (trappy.FTrace(), trappy.SysTrace(path='./trace.html'))

        for trace in traces:
            trace_path = os.path.abspath(trace.trace_path)
            trace_dir = os.path.dirname(trace_path)
            trace_file = os.path.basename(trace_path)
            cache_dir = '.' + trace_file + '.cache'

            self.assertFalse(cache_dir in os.listdir(trace_dir))
Beispiel #9
0
    def test_systrace_html(self):
        """Tests parsing of a systrace embedded textual trace """

        events = ["sched_switch", "sched_wakeup", "trace_event_clock_sync"]
        trace = trappy.SysTrace("trace.html", events=events)

        self.assertTrue(hasattr(trace, "sched_switch"))
        self.assertEquals(len(trace.sched_switch.data_frame), 4)
        self.assertTrue("prev_comm" in trace.sched_switch.data_frame.columns)

        self.assertTrue(hasattr(trace, "sched_wakeup"))
        self.assertEquals(len(trace.sched_wakeup.data_frame), 4)
        self.assertTrue("target_cpu" in trace.sched_wakeup.data_frame.columns)

        self.assertTrue(hasattr(trace, "trace_event_clock_sync"))
        self.assertEquals(len(trace.trace_event_clock_sync.data_frame), 1)
        self.assertTrue("realtime_ts" in trace.trace_event_clock_sync.data_frame.columns)
Beispiel #10
0
    def test_systrace_html(self):
        """Tests parsing of a legacy systrace embedded textual trace """

        events = ["sched_switch", "sched_wakeup", "sched_contrib_scale_f"]
        trace = trappy.SysTrace("trace.html", events=events)

        self.assertTrue(hasattr(trace, "sched_switch"))
        self.assertEquals(len(trace.sched_switch.data_frame), 3)
        self.assertTrue("prev_comm" in trace.sched_switch.data_frame.columns)

        self.assertTrue(hasattr(trace, "sched_wakeup"))
        self.assertEquals(len(trace.sched_wakeup.data_frame), 2)
        self.assertTrue("target_cpu" in trace.sched_wakeup.data_frame.columns)

        self.assertTrue(hasattr(trace, "sched_contrib_scale_f"))
        self.assertEquals(len(trace.sched_contrib_scale_f.data_frame), 2)
        self.assertTrue("freq_scale_factor" in trace.sched_contrib_scale_f.data_frame.columns)
Beispiel #11
0
    if latpids[pid].running == 1 or latpids[pid].wake_pend == 1:
        if debug: print "already running or wake_pend"
        # Task already running or a wakeup->switch pending, ignore
        return

    if debug: print "recording wake"
    latpids[pid] = latpids[pid]._replace(last_wake_data=e, wake_pend=1)


if args.normalize:
    kwargs = {'window': (args.start_time, args.end_time)}
else:
    kwargs = {'abs_window': (args.start_time, args.end_time)}

systrace_obj = trappy.SysTrace(name="systrace", path=path_to_html, \
        scope="sched", events=["sched_switch", "sched_wakeup", "sched_waking"], normalize_time=args.normalize, **kwargs)

systrace_obj.apply_callbacks({ "sched_switch": switch_cb, "sched_wakeup": wake_cb, \
                          "sched_waking": wake_cb })

# Print the results: PID, latency, start, end, sort
if args.lat_total:
    result = sorted(latpids.items(),
                    key=lambda x: x[1].lat_total,
                    reverse=True)
else:
    result = sorted(latpids.items(), key=lambda x: x[1].latency, reverse=True)

print "PID".ljust(10) + "\t" + "name".ljust(20) + "\t" + "latency (secs)".ljust(20) + \
      "\t" + "start time".ljust(20) + "\t" + "end time".ljust(20) + "\t" + "total (secs)".ljust(20)
for r in result[:nrows]: