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
					
				| @ -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 New Issue
	
	Block a user