bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
| 
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
 |