aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/scripts/python/exported-sql-viewer.py
diff options
context:
space:
mode:
authorAdrian Hunter <adrian.hunter@intel.com>2019-05-03 08:08:27 -0400
committerArnaldo Carvalho de Melo <acme@redhat.com>2019-05-15 15:36:47 -0400
commit9bc4e4bfe6169343a8f019cd5d7843a558b78363 (patch)
tree8676f574ab1cbb415e51feede6c8f4c63b44ddca /tools/perf/scripts/python/exported-sql-viewer.py
parent96c43b9a7ab3b70bc35d762f7b76082dfd118a6a (diff)
perf scripts python: exported-sql-viewer.py: Add context menu
Add a context menu (right-click) that provides options for copying to clipboard, including, for trees, the ability to copy only the cell under the mouse pointer. Committer testing: $ python ~acme/libexec/perf-core/scripts/python/exported-sql-viewer.py ~/c/adrian.hunter/simple-retpoline.db Simply right click and pick "Copy selection", that at this point has just the first line, not expanded, then see what was copied by pressing shift+control+v on a terminal: Call Path,Object,Count,Time (ns),Time (%),Branch Count,Branch Count (%) ▶ simple-retpolin,,,,,, Ditto after expanding, i.e. the selection continues to be just one line: Call Path Object Count Time (ns) Time (%) Branch Count Branch Count (%) ▼ simple-retpolin Now select all the lines with the mouse and control+shift+v again: Call Path Object Count Time (ns) Time (%) Branch Count Branch Count (%) ▼ 14503:14503 ▼ _start ld-2.28.so 1 156267 100.0 10602 100.0 ▶ unknown unknown 1 2276 1.5 1 0.0 ▶ _dl_start ld-2.28.so 1 137047 87.7 10088 95.2 ▶ _dl_init ld-2.28.so 1 9142 5.9 326 3.1 ▼ _start simple-retpoline 1 7457 4.8 182 1.7 ▶ unknown unknown 1 805 10.8 1 0.5 ▶ __libc_start_main libc-2.28.so 1 6347 85.1 179 98.4 Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Jiri Olsa <jolsa@redhat.com> Link: http://lkml.kernel.org/r/20190503120828.25326-6-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'tools/perf/scripts/python/exported-sql-viewer.py')
-rwxr-xr-xtools/perf/scripts/python/exported-sql-viewer.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/tools/perf/scripts/python/exported-sql-viewer.py b/tools/perf/scripts/python/exported-sql-viewer.py
index baa2b220238a..affd80ebcae0 100755
--- a/tools/perf/scripts/python/exported-sql-viewer.py
+++ b/tools/perf/scripts/python/exported-sql-viewer.py
@@ -887,6 +887,8 @@ class TreeWindowBase(QMdiSubWindow):
887 self.view.setSelectionMode(QAbstractItemView.ContiguousSelection) 887 self.view.setSelectionMode(QAbstractItemView.ContiguousSelection)
888 self.view.CopyCellsToClipboard = CopyTreeCellsToClipboard 888 self.view.CopyCellsToClipboard = CopyTreeCellsToClipboard
889 889
890 self.context_menu = TreeContextMenu(self.view)
891
890 def DisplayFound(self, ids): 892 def DisplayFound(self, ids):
891 if not len(ids): 893 if not len(ids):
892 return False 894 return False
@@ -1660,6 +1662,8 @@ class BranchWindow(QMdiSubWindow):
1660 1662
1661 self.ResizeColumnsToContents() 1663 self.ResizeColumnsToContents()
1662 1664
1665 self.context_menu = TreeContextMenu(self.view)
1666
1663 self.find_bar = FindBar(self, self, True) 1667 self.find_bar = FindBar(self, self, True)
1664 1668
1665 self.finder = ChildDataItemFinder(self.model.root) 1669 self.finder = ChildDataItemFinder(self.model.root)
@@ -2469,6 +2473,39 @@ def CopyCellsToClipboardHdr(view):
2469def CopyCellsToClipboardCSV(view): 2473def CopyCellsToClipboardCSV(view):
2470 CopyCellsToClipboard(view, True, True) 2474 CopyCellsToClipboard(view, True, True)
2471 2475
2476# Context menu
2477
2478class ContextMenu(object):
2479
2480 def __init__(self, view):
2481 self.view = view
2482 self.view.setContextMenuPolicy(Qt.CustomContextMenu)
2483 self.view.customContextMenuRequested.connect(self.ShowContextMenu)
2484
2485 def ShowContextMenu(self, pos):
2486 menu = QMenu(self.view)
2487 self.AddActions(menu)
2488 menu.exec_(self.view.mapToGlobal(pos))
2489
2490 def AddCopy(self, menu):
2491 menu.addAction(CreateAction("&Copy selection", "Copy to clipboard", lambda: CopyCellsToClipboardHdr(self.view), self.view))
2492 menu.addAction(CreateAction("Copy selection as CS&V", "Copy to clipboard as CSV", lambda: CopyCellsToClipboardCSV(self.view), self.view))
2493
2494 def AddActions(self, menu):
2495 self.AddCopy(menu)
2496
2497class TreeContextMenu(ContextMenu):
2498
2499 def __init__(self, view):
2500 super(TreeContextMenu, self).__init__(view)
2501
2502 def AddActions(self, menu):
2503 i = self.view.currentIndex()
2504 text = str(i.data()).strip()
2505 if len(text):
2506 menu.addAction(CreateAction('Copy "' + text + '"', "Copy to clipboard", lambda: QApplication.clipboard().setText(text), self.view))
2507 self.AddCopy(menu)
2508
2472# Table window 2509# Table window
2473 2510
2474class TableWindow(QMdiSubWindow, ResizeColumnsToContentsBase): 2511class TableWindow(QMdiSubWindow, ResizeColumnsToContentsBase):
@@ -2492,6 +2529,8 @@ class TableWindow(QMdiSubWindow, ResizeColumnsToContentsBase):
2492 2529
2493 self.ResizeColumnsToContents() 2530 self.ResizeColumnsToContents()
2494 2531
2532 self.context_menu = ContextMenu(self.view)
2533
2495 self.find_bar = FindBar(self, self, True) 2534 self.find_bar = FindBar(self, self, True)
2496 2535
2497 self.finder = ChildDataItemFinder(self.data_model) 2536 self.finder = ChildDataItemFinder(self.data_model)
@@ -2608,6 +2647,8 @@ class TopCallsWindow(QMdiSubWindow, ResizeColumnsToContentsBase):
2608 self.view.setSelectionMode(QAbstractItemView.ContiguousSelection) 2647 self.view.setSelectionMode(QAbstractItemView.ContiguousSelection)
2609 self.view.CopyCellsToClipboard = CopyTableCellsToClipboard 2648 self.view.CopyCellsToClipboard = CopyTableCellsToClipboard
2610 2649
2650 self.context_menu = ContextMenu(self.view)
2651
2611 self.ResizeColumnsToContents() 2652 self.ResizeColumnsToContents()
2612 2653
2613 self.find_bar = FindBar(self, self, True) 2654 self.find_bar = FindBar(self, self, True)