forked from luck/tmp_suning_uos_patched
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: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lore.kernel.org/lkml/20190821083216.1340-6-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
da4264f5cf
commit
e69d5df75d
|
@ -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):
|
||||||
|
|
||||||
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():
|
||||||
|
|
Loading…
Reference in New Issue
Block a user