Skip to content

Commit

Permalink
perf scripts python: exported-sql-viewer.py: Factor out CallGraphMode…
Browse files Browse the repository at this point in the history
…lBase

Factor out a base class CallGraphModelBase from CallGraphModel, so that
CallGraphModelBase can be reused.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Link: https://lkml.kernel.org/n/tip-76eybebzjwvgnadkm2oufrqi@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Mar 1, 2019
1 parent a448ba2 commit 254c0d8
Showing 1 changed file with 55 additions and 45 deletions.
100 changes: 55 additions & 45 deletions tools/perf/scripts/python/exported-sql-viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -558,26 +558,12 @@ def __init__(self, glb):
self.child_items.append(child_item)
self.child_count += 1

# Context-sensitive call graph data model
# Context-sensitive call graph data model base

class CallGraphModel(TreeModel):
class CallGraphModelBase(TreeModel):

def __init__(self, glb, parent=None):
super(CallGraphModel, self).__init__(glb, parent)

def GetRoot(self):
return CallGraphRootItem(self.glb)

def columnCount(self, parent=None):
return 7

def columnHeader(self, column):
headers = ["Call Path", "Object", "Count ", "Time (ns) ", "Time (%) ", "Branch Count ", "Branch Count (%) "]
return headers[column]

def columnAlignment(self, column):
alignment = [ Qt.AlignLeft, Qt.AlignLeft, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight ]
return alignment[column]
super(CallGraphModelBase, self).__init__(glb, parent)

def FindSelect(self, value, pattern, query):
if pattern:
Expand All @@ -597,34 +583,7 @@ def FindSelect(self, value, pattern, query):
match = " GLOB '" + str(value) + "'"
else:
match = " = '" + str(value) + "'"
QueryExec(query, "SELECT call_path_id, comm_id, thread_id"
" FROM calls"
" INNER JOIN call_paths ON calls.call_path_id = call_paths.id"
" INNER JOIN symbols ON call_paths.symbol_id = symbols.id"
" WHERE symbols.name" + match +
" GROUP BY comm_id, thread_id, call_path_id"
" ORDER BY comm_id, thread_id, call_path_id")

def FindPath(self, query):
# Turn the query result into a list of ids that the tree view can walk
# to open the tree at the right place.
ids = []
parent_id = query.value(0)
while parent_id:
ids.insert(0, parent_id)
q2 = QSqlQuery(self.glb.db)
QueryExec(q2, "SELECT parent_id"
" FROM call_paths"
" WHERE id = " + str(parent_id))
if not q2.next():
break
parent_id = q2.value(0)
# The call path root is not used
if ids[0] == 1:
del ids[0]
ids.insert(0, query.value(2))
ids.insert(0, query.value(1))
return ids
self.DoFindSelect(query, match)

def Found(self, query, found):
if found:
Expand Down Expand Up @@ -678,6 +637,57 @@ def Update(self, *x):
def FindDone(self, thread, callback, ids):
callback(ids)

# Context-sensitive call graph data model

class CallGraphModel(CallGraphModelBase):

def __init__(self, glb, parent=None):
super(CallGraphModel, self).__init__(glb, parent)

def GetRoot(self):
return CallGraphRootItem(self.glb)

def columnCount(self, parent=None):
return 7

def columnHeader(self, column):
headers = ["Call Path", "Object", "Count ", "Time (ns) ", "Time (%) ", "Branch Count ", "Branch Count (%) "]
return headers[column]

def columnAlignment(self, column):
alignment = [ Qt.AlignLeft, Qt.AlignLeft, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight, Qt.AlignRight ]
return alignment[column]

def DoFindSelect(self, query, match):
QueryExec(query, "SELECT call_path_id, comm_id, thread_id"
" FROM calls"
" INNER JOIN call_paths ON calls.call_path_id = call_paths.id"
" INNER JOIN symbols ON call_paths.symbol_id = symbols.id"
" WHERE symbols.name" + match +
" GROUP BY comm_id, thread_id, call_path_id"
" ORDER BY comm_id, thread_id, call_path_id")

def FindPath(self, query):
# Turn the query result into a list of ids that the tree view can walk
# to open the tree at the right place.
ids = []
parent_id = query.value(0)
while parent_id:
ids.insert(0, parent_id)
q2 = QSqlQuery(self.glb.db)
QueryExec(q2, "SELECT parent_id"
" FROM call_paths"
" WHERE id = " + str(parent_id))
if not q2.next():
break
parent_id = q2.value(0)
# The call path root is not used
if ids[0] == 1:
del ids[0]
ids.insert(0, query.value(2))
ids.insert(0, query.value(1))
return ids

# Vertical widget layout

class VBox():
Expand Down

0 comments on commit 254c0d8

Please sign in to comment.