diff --git a/packages/teuchos/comm/utils/plotStackedTimers.py b/packages/teuchos/comm/utils/plotStackedTimers.py index 45693ac7883d..2c8f02cd7604 100755 --- a/packages/teuchos/comm/utils/plotStackedTimers.py +++ b/packages/teuchos/comm/utils/plotStackedTimers.py @@ -17,11 +17,15 @@ parser.add_argument('-n', '--non-interactive', help="Disable interactive features", dest='non_interactive', action="store_true", default=False) parser.add_argument('logFile', type=str, help="Log file with stacked timers") +parser.add_argument('--root', help="Use a different node as root. Use format \'Level 0 timer name/Level 1 timer name\'", + dest='root', default='') +parser.add_argument('-N', '--useTimerNumbers', help="Use timer numbers in plot instead of labels.", + dest='useTimerNumbers', action="store_true", default=False) options = parser.parse_args() # parse log file with stacked timer output -timerRegExp = re.compile(r'([\s|]*)(.*):\s([0-9]*\.[0-9]*)\s-\s([0-9]*\.[0-9]*)%') +timerRegExp = re.compile(r'([\s|]*)(.*):\s([0-9]*\.[0-9]*)\s(-\s([0-9]*\.[0-9]*)%\s)*\[[0-9]+\]') with open(options.logFile) as f: data = {} prevDepth = -1 @@ -44,7 +48,33 @@ data['/'.join(stack[:depth-1])] = total_time - time else: data['/'.join(stack[:depth-1])] = 0.0 - + +if options.root != '': + data_new = {} + for label in data: + if label.find(options.root) >= 0: + newlabel = label[label.find(options.root)+len(options.root)+1:] + if len(newlabel) > 0: + data_new[newlabel] = data[label] + data = data_new + +if options.useTimerNumbers: + translate = {} + k = 0 + dataNew = {} + for label in data: + for key in label.split('/'): + try: + translate[key] + except KeyError: + translate[key] = str(k) + k += 1 + labelNew = '/'.join([translate[key] for key in label.split('/')]) + dataNew[labelNew] = data[label] + data = dataNew + s = '\n'.join([str(translate[key])+': '+key for key in sorted(translate, key=lambda key: int(translate[key]))]) + print(s) + # create plot dataAll = stringvalues_to_pv(data) if not options.non_interactive: @@ -54,6 +84,8 @@ ax = plt.gca() hp = HPie(dataAll, ax) hp.plot(setup_axes=True, interactive=True) + if options.useTimerNumbers: + ax.text(1, 0, s, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes) # set up left and right click actions base = Path([]) @@ -70,6 +102,8 @@ def onClick(event): ax.clear() hp = HPie(data, ax) hp.plot(setup_axes=True, interactive=True) + if options.useTimerNumbers: + ax.text(1, 0, s, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes) ax.figure.canvas.draw_idle() base = Path(path[:-1]) break @@ -84,6 +118,8 @@ def onClick(event): ax.clear() hp = HPie(data, ax) hp.plot(setup_axes=True, interactive=True) + if options.useTimerNumbers: + ax.text(1, 0, s, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes) ax.figure.canvas.draw_idle() base = Path(path[:-1]) @@ -92,5 +128,7 @@ def onClick(event): ax = plt.gca() hp = HPie(dataAll, ax) hp.plot(setup_axes=True) + if options.useTimerNumbers: + ax.text(1, 0, s, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes) plt.show()