blob: ada9d28201b759af258d961b5c4786f517a6c140 [file] [log] [blame]
"""test-suite/lit plugin to collect internal llvm json statistics.
This assumes the benchmarks were built with the -save-stats=obj flag."""
import json
import logging
import os
from collections import defaultdict
def _mergeStats(global_stats, statsfilename):
try:
f = open(statsfilename, "rt")
stats = json.load(f)
except Exception as e:
logging.warning("Could not read '%s'", statsfilename, exc_info=e)
return
for name, value in stats.items():
global_stats[name] += value
def _getStats(context):
# We compile multiple benchmarks in the same directory in SingleSource
# mode. Only look at compiletime files starting with the name of our test.
prefix = ""
if context.config.single_source:
prefix = "%s." % os.path.basename(context.executable)
stats = defaultdict(lambda: 0.0)
dir = os.path.dirname(context.test.getFilePath())
for path, subdirs, files in os.walk(dir):
for file in files:
if file.endswith(".stats") and file.startswith(prefix):
fullpath = os.path.join(path, file)
_mergeStats(stats, fullpath)
if len(stats) == 0:
logging.warning("No stats for '%s'", context.test.getFullName())
result = dict()
for key, value in stats.items():
result[key] = value
return result
def mutatePlan(context, plan):
plan.metric_collectors.append(_getStats)