All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Jiri Olsa <jolsa@redhat.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 7/8] perf scripts python: exported-sql-viewer.py: Factor out CallGraphModelBase
Date: Fri, 1 Mar 2019 14:56:36 -0300	[thread overview]
Message-ID: <20190301175636.GR13100@kernel.org> (raw)
In-Reply-To: <20190228130031.23064-8-adrian.hunter@intel.com>

Em Thu, Feb 28, 2019 at 03:00:30PM +0200, Adrian Hunter escreveu:
> Factor out a base class CallGraphModelBase from CallGraphModel, so that
> CallGraphModelBase can be reused.

Thanks, applied.

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  .../scripts/python/exported-sql-viewer.py     | 100 ++++++++++--------
>  1 file changed, 55 insertions(+), 45 deletions(-)
> 
> diff --git a/tools/perf/scripts/python/exported-sql-viewer.py b/tools/perf/scripts/python/exported-sql-viewer.py
> index b2a22525549d..c4a2134d85f5 100755
> --- a/tools/perf/scripts/python/exported-sql-viewer.py
> +++ b/tools/perf/scripts/python/exported-sql-viewer.py
> @@ -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():
> -- 
> 2.17.1

-- 

- Arnaldo

  parent reply	other threads:[~2019-03-01 17:56 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20190228130031.23064-1-adrian.hunter@intel.com>
     [not found] ` <20190228130031.23064-2-adrian.hunter@intel.com>
2019-03-01 17:52   ` [PATCH 1/8] perf db-export: Add calls parent_id Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-3-adrian.hunter@intel.com>
2019-03-01 17:52   ` [PATCH 2/8] perf scripts python: export-to-sqlite.py: Export " Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-5-adrian.hunter@intel.com>
2019-03-01 17:54   ` [PATCH 4/8] perf scripts python: export-to-postgresql.py: " Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-4-adrian.hunter@intel.com>
2019-03-01 17:54   ` [PATCH 3/8] perf scripts python: export-to-postgresql.py: Fix invalid input syntax for integer error Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-6-adrian.hunter@intel.com>
2019-03-01 17:55   ` [PATCH 5/8] perf scripts python: exported-sql-viewer.py: Factor out TreeWindowBase Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-7-adrian.hunter@intel.com>
2019-03-01 17:55   ` [PATCH 6/8] perf scripts python: exported-sql-viewer.py: Improve TreeModel abstraction Arnaldo Carvalho de Melo
     [not found] ` <20190228130031.23064-8-adrian.hunter@intel.com>
2019-03-01 17:56   ` Arnaldo Carvalho de Melo [this message]
     [not found] ` <20190228130031.23064-9-adrian.hunter@intel.com>
2019-03-01 18:20   ` [PATCH 8/8] perf scripts python: exported-sql-viewer.py: Add call tree Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190301175636.GR13100@kernel.org \
    --to=arnaldo.melo@gmail.com \
    --cc=adrian.hunter@intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.