/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to tools/biobench.py

  • Committer: Xavier Maillard
  • Date: 2008-04-13 11:48:00 UTC
  • mto: (3364.1.1 bzr.ab.integration)
  • mto: This revision was merged to the branch mainline in revision 3365.
  • Revision ID: xma@gnu.org-20080413114800-b3tp394elic1793b
Replace mail-mode call with compose-mail from GNU Emacs.

This patch is a modified version of the current revno 3323.

It overloads it by:

1. defining a different python class EmacsMail "MUA agnostic".

   To use this option, just put these lines into ~/.bazaar/bazaar.conf
    
[DEFAULT]
mail_client = emacsclient

2. supporting any mail client of GNU Emacs family (mail-mode,
   message-mode, ...) The right tool will be called according to the
   value of the variable ``mail-user-agent``. So Virtually any Emacs
   mail client will work transparently if registered against
   ``mail-user-agent``.

3. adding a wrapper function around MIME attachment. This allow us not
   to have many different functions/classes to attach a file but one.

4. tests have been updated to follow the changes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/env python
 
2
 
 
3
# (C) 2005 Canonical Ltd
 
4
 
 
5
"""Benchmark for basicio
 
6
 
 
7
Tries serializing an inventory to basic_io repeatedly.
 
8
"""
 
9
 
 
10
if True:
 
11
    import psyco
 
12
    psyco.full()
 
13
 
 
14
 
 
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
 
21
from bzrlib.basicio import write_inventory, BasicWriter, \
 
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
 
 
28
nrepeats = 3
 
29
ntimes = 5
 
30
NFILES = 30000
 
31
 
 
32
def make_inventory():
 
33
    inv = Inventory()
 
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)
 
39
    return inv
 
40
 
 
41
inv = make_inventory()
 
42
 
 
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)
 
62
    times = t.repeat(nrepeats, ntimes)
 
63
    tmp_file.seek(0, 2)
 
64
    size = tmp_file.tell()
 
65
    print 'wrote inventory to %10s %5d times, each %6d bytes, total %6dkB' \
 
66
            % (function_name, ntimes, size, (size * ntimes)>>10), 
 
67
    each = (min(times)/ntimes*1000)
 
68
    print 'in %.1fms each' % each 
 
69
    return each
 
70
 
 
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)
 
83
 
 
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))
 
90
 
 
91
# make sure it was a fair comparison
 
92
# assert 'cElementTree' in sys.modules