Skip to content

Commit

Permalink
Merge pull request #6529 from cgcgcg/stackedTimerPlot
Browse files Browse the repository at this point in the history
Teuchos utils: Improve stacked timer visualization script
  • Loading branch information
cgcgcg authored Jan 6, 2020
2 parents e125c5e + 58e9649 commit 76d63ea
Showing 1 changed file with 40 additions and 2 deletions.
42 changes: 40 additions & 2 deletions packages/teuchos/comm/utils/plotStackedTimers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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([])
Expand All @@ -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
Expand All @@ -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])

Expand All @@ -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()

0 comments on commit 76d63ea

Please sign in to comment.