~bzr-pqm/bzr/bzr.dev

1185.44.26 by Martin Pool
Make biobench directly executable
1
#! /usr/bin/env python
2
1185.44.17 by Martin Pool
Simple benchmark for basic_io
3
# (C) 2005 Canonical Ltd
4
5
"""Benchmark for basicio
6
7
Tries serializing an inventory to basic_io repeatedly.
8
"""
9
1185.44.23 by Martin Pool
More basic_io tweaking; break format
10
if True:
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
11
    import psyco
12
    psyco.full()
13
14
1185.44.17 by Martin Pool
Simple benchmark for basic_io
15
import sys
16
from timeit import Timer
17
from tempfile import TemporaryFile, NamedTemporaryFile
18
19
from bzrlib.branch import Branch
20
from bzrlib.xml5 import serializer_v5
1185.44.23 by Martin Pool
More basic_io tweaking; break format
21
from bzrlib.basicio import write_inventory, BasicWriter, \
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
22
        read_inventory
23
from bzrlib.inventory import Inventory, InventoryEntry, InventoryFile, ROOT_ID
24
25
## b = Branch.open('.')
26
## inv = b.get_inventory(b.last_revision())
27
1185.44.23 by Martin Pool
More basic_io tweaking; break format
28
nrepeats = 3
29
ntimes = 5
30
NFILES = 30000
31
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
32
def make_inventory():
33
    inv = Inventory()
1185.44.23 by Martin Pool
More basic_io tweaking; break format
34
    for i in range(NFILES):
35
        ie = InventoryFile('%08d-id' % i, '%08d-file' % i, ROOT_ID)
36
        ie.text_sha1='1212121212121212121212121212121212121212'
37
        ie.text_size=12312
38
        inv.add(ie)
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
39
    return inv
40
41
inv = make_inventory()
42
1185.44.17 by Martin Pool
Simple benchmark for basic_io
43
bio_tmp = NamedTemporaryFile()
44
xml_tmp = NamedTemporaryFile()
45
46
def bio_test():
47
    bio_tmp.seek(0)
48
    w = BasicWriter(bio_tmp)
49
    write_inventory(w, inv)
50
    bio_tmp.seek(0)
51
    new_inv = read_inventory(bio_tmp)
52
53
def xml_test():
54
    xml_tmp.seek(0)
55
    serializer_v5.write_inventory(inv, xml_tmp)
56
    xml_tmp.seek(0)
57
    new_inv = serializer_v5.read_inventory(xml_tmp)
58
59
def run_benchmark(function_name, tmp_file):
60
    t = Timer(function_name + '()', 
61
              'from __main__ import ' + function_name)
1185.44.23 by Martin Pool
More basic_io tweaking; break format
62
    times = t.repeat(nrepeats, ntimes)
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
63
    tmp_file.seek(0, 2)
1185.44.17 by Martin Pool
Simple benchmark for basic_io
64
    size = tmp_file.tell()
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
65
    print 'wrote inventory to %10s %5d times, each %6d bytes, total %6dkB' \
1185.44.17 by Martin Pool
Simple benchmark for basic_io
66
            % (function_name, ntimes, size, (size * ntimes)>>10), 
67
    each = (min(times)/ntimes*1000)
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
68
    print 'in %.1fms each' % each 
1185.44.17 by Martin Pool
Simple benchmark for basic_io
69
    return each
70
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
71
def profileit(fn): 
72
    import hotshot, hotshot.stats
73
    prof_f = NamedTemporaryFile()
74
    prof = hotshot.Profile(prof_f.name)
75
    prof.runcall(fn) 
76
    prof.close()
77
    stats = hotshot.stats.load(prof_f.name)
78
    #stats.strip_dirs()
79
    stats.sort_stats('time')
80
    ## XXX: Might like to write to stderr or the trace file instead but
81
    ## print_stats seems hardcoded to stdout
82
    stats.print_stats(20)
1185.44.17 by Martin Pool
Simple benchmark for basic_io
83
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
84
if '-p' in sys.argv[1:]:
85
    profileit(bio_test)
86
else:
87
    bio_each = run_benchmark('bio_test', bio_tmp)
88
    xml_each = run_benchmark('xml_test', xml_tmp)
89
    print 'so bio is %.1f%% faster' % (100 * ((xml_each / bio_each) - 1))
1185.44.17 by Martin Pool
Simple benchmark for basic_io
90
91
# make sure it was a fair comparison
1185.44.21 by Martin Pool
Experiments with basic_io for inventory
92
# assert 'cElementTree' in sys.modules