Skip to content

Commit 3bcc137

Browse files
committed
[process-stats-dir] Support --divide-by for averaging across runs.
1 parent 5e29f02 commit 3bcc137

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

utils/jobstats/jobstats.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,13 @@ def prefixed_by(self, prefix):
9898
self.module, self.start_usec, self.dur_usec,
9999
self.jobargs, prefixed_stats)
100100

101+
def divided_by(self, n):
102+
divided_stats = dict([(k, v / n)
103+
for (k, v) in self.stats.items()])
104+
return JobStats(self.jobkind, random.randint(0, 1000000000),
105+
self.module, self.start_usec, self.dur_usec,
106+
self.jobargs, divided_stats)
107+
101108
def incrementality_percentage(self):
102109
"""Assuming the job is a driver job, return the amount of
103110
jobs that actually ran, as a percentage of the total number."""
@@ -257,7 +264,7 @@ def load_stats_dir(path, select_module=[], select_stat=[],
257264

258265

259266
def merge_all_jobstats(jobstats, select_module=[], group_by_module=False,
260-
merge_by="sum", **kwargs):
267+
merge_by="sum", divide_by=1, **kwargs):
261268
"""Does a pairwise merge of the elements of list of jobs"""
262269
m = None
263270
if len(select_module) > 0:
@@ -269,12 +276,15 @@ def keyfunc(j):
269276
jobstats.sort(key=keyfunc)
270277
prefixed = []
271278
for mod, group in itertools.groupby(jobstats, keyfunc):
272-
groupmerge = merge_all_jobstats(group, merge_by=merge_by)
279+
groupmerge = merge_all_jobstats(group, merge_by=merge_by,
280+
divide_by=divide_by)
273281
prefixed.append(groupmerge.prefixed_by(mod))
274282
jobstats = prefixed
275283
for j in jobstats:
276284
if m is None:
277285
m = j
278286
else:
279287
m = m.merged_with(j, merge_by=merge_by)
280-
return m
288+
if m is None:
289+
return m
290+
return m.divided_by(divide_by)

utils/process-stats-dir.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,11 @@ def main():
532532
default=False,
533533
action="store_true",
534534
help="Merge timers across modules/targets/etc.")
535+
parser.add_argument("--divide-by",
536+
default=1,
537+
metavar="D",
538+
type=int,
539+
help="Divide stats by D (to take an average)")
535540
parser.add_argument("--markdown",
536541
default=False,
537542
action="store_true",

0 commit comments

Comments
 (0)