blob: 9d91b99bf5ecd7b64f57b82d6859b3f40fe1a17c [file] [log] [blame]
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import cProfile
import pstats
import StringIO
import inspect
import sys
import os
import tracing_project
from py_vulcanize import generate
from py_vulcanize import project
class Bench(object):
def SetUp(self):
pass
def Run(self):
pass
def TearDown(self):
pass
def Main(args):
parser = argparse.ArgumentParser()
parser.add_argument('--repeat-count', type=int, default=10)
parser.add_argument('bench_name')
args = parser.parse_args(args)
benches = [g for g in globals().values()
if g != Bench and inspect.isclass(g) and
Bench in inspect.getmro(g)]
# pylint: disable=undefined-loop-variable
b = [b for b in benches if b.__name__ == args.bench_name]
if len(b) != 1:
sys.stderr.write('Bench %r not found.' % args.bench_name)
return 1
bench = b[0]()
bench.SetUp()
try:
pr = cProfile.Profile()
pr.enable(builtins=False)
for _ in range(args.repeat_count):
bench.Run()
pr.disable()
s = StringIO.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.print_stats()
print s.getvalue()
return 0
finally:
bench.TearDown()
if __name__ == '__main__':
sys.exit(Main(sys.argv[1:]))