@@ -98,6 +98,13 @@ def prefixed_by(self, prefix):
98
98
self .module , self .start_usec , self .dur_usec ,
99
99
self .jobargs , prefixed_stats )
100
100
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
+
101
108
def incrementality_percentage (self ):
102
109
"""Assuming the job is a driver job, return the amount of
103
110
jobs that actually ran, as a percentage of the total number."""
@@ -257,7 +264,7 @@ def load_stats_dir(path, select_module=[], select_stat=[],
257
264
258
265
259
266
def merge_all_jobstats (jobstats , select_module = [], group_by_module = False ,
260
- merge_by = "sum" , ** kwargs ):
267
+ merge_by = "sum" , divide_by = 1 , ** kwargs ):
261
268
"""Does a pairwise merge of the elements of list of jobs"""
262
269
m = None
263
270
if len (select_module ) > 0 :
@@ -269,12 +276,15 @@ def keyfunc(j):
269
276
jobstats .sort (key = keyfunc )
270
277
prefixed = []
271
278
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 )
273
281
prefixed .append (groupmerge .prefixed_by (mod ))
274
282
jobstats = prefixed
275
283
for j in jobstats :
276
284
if m is None :
277
285
m = j
278
286
else :
279
287
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 )
0 commit comments