mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	perf scripts python: exported-sql-viewer.py: Factor out CallGraphModelBase
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>
This commit is contained in:
		
							parent
							
								
									a448ba232a
								
							
						
					
					
						commit
						254c0d820b
					
				
					 1 changed files with 55 additions and 45 deletions
				
			
		| 
						 | 
				
			
			@ -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():
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue