perf scripts python: exported-sql-viewer.py: Factor out CallGraphModelBase
authorAdrian Hunter <adrian.hunter@intel.com>
Thu, 28 Feb 2019 13:00:30 +0000 (15:00 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Fri, 1 Mar 2019 17:56:17 +0000 (14:56 -0300)
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>
tools/perf/scripts/python/exported-sql-viewer.py

index b2a22525549d26bb6f093c4583fa81a3ca27ad20..c4a2134d85f5e300c181f1f7597020b385726466 100755 (executable)
@@ -558,26 +558,12 @@ class CallGraphRootItem(CallGraphLevelItemBase):
                        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:
@@ -597,34 +583,7 @@ class CallGraphModel(TreeModel):
                                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:
@@ -678,6 +637,57 @@ class CallGraphModel(TreeModel):
        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():