Commit e69d5df7 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf scripts python: exported-sql-viewer.py: Add ability for Call tree to open...

perf scripts python: exported-sql-viewer.py: Add ability for Call tree to open at a specified task and time

Add ability for Call tree to open at a specified task and time.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: http://lore.kernel.org/lkml/20190821083216.1340-6-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent da4264f5
...@@ -1094,7 +1094,7 @@ class CallGraphWindow(TreeWindowBase): ...@@ -1094,7 +1094,7 @@ class CallGraphWindow(TreeWindowBase):
class CallTreeWindow(TreeWindowBase): class CallTreeWindow(TreeWindowBase):
def __init__(self, glb, parent=None): def __init__(self, glb, parent=None, thread_at_time=None):
super(CallTreeWindow, self).__init__(parent) super(CallTreeWindow, self).__init__(parent)
self.model = LookupCreateModel("Call Tree", lambda x=glb: CallTreeModel(x)) self.model = LookupCreateModel("Call Tree", lambda x=glb: CallTreeModel(x))
...@@ -1112,6 +1112,48 @@ class CallTreeWindow(TreeWindowBase): ...@@ -1112,6 +1112,48 @@ class CallTreeWindow(TreeWindowBase):
AddSubWindow(glb.mainwindow.mdi_area, self, "Call Tree") AddSubWindow(glb.mainwindow.mdi_area, self, "Call Tree")
if thread_at_time:
self.DisplayThreadAtTime(*thread_at_time)
def DisplayThreadAtTime(self, comm_id, thread_id, time):
parent = QModelIndex()
for dbid in (comm_id, thread_id):
found = False
n = self.model.rowCount(parent)
for row in xrange(n):
child = self.model.index(row, 0, parent)
if child.internalPointer().dbid == dbid:
found = True
self.view.setCurrentIndex(child)
parent = child
break
if not found:
return
found = False
while True:
n = self.model.rowCount(parent)
if not n:
return
last_child = None
for row in xrange(n):
child = self.model.index(row, 0, parent)
child_call_time = child.internalPointer().call_time
if child_call_time < time:
last_child = child
elif child_call_time == time:
self.view.setCurrentIndex(child)
return
elif child_call_time > time:
break
if not last_child:
if not found:
child = self.model.index(0, 0, parent)
self.view.setCurrentIndex(child)
return
found = True
self.view.setCurrentIndex(last_child)
parent = last_child
# Child data item finder # Child data item finder
class ChildDataItemFinder(): class ChildDataItemFinder():
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment