16
from bzrlib.ui import text
18
p = optparse.OptionParser()
19
p.add_option('--quick', default=False, action='store_true')
20
p.add_option('--max-combinations', default=500, type=int)
21
p.add_option('--lsprof', default=None, type=str)
22
opts, args = p.parse_args(sys.argv[1:])
24
trace.enable_default_logging()
25
ui.ui_factory = text.TextUIFactory()
29
b = branch.Branch.open(args[0])
31
b = branch.Branch.open('.')
34
g = b.repository.get_graph()
35
parent_map = dict(p for p in g.iter_ancestry([b.last_revision()])
41
print 'Found %d nodes, loaded in %.3fs' % (len(parent_map), end - begin)
43
def all_heads_comp(g, combinations):
45
pb = ui.ui_factory.nested_progress_bar()
47
for idx, combo in enumerate(combinations):
49
pb.update('proc', idx, len(combinations))
50
h.append(g.heads(combo))
56
# parents = parent_map.keys()
58
# for p2 in random.sample(parents, 10):
59
# combinations.append((p1, p2))
60
# Times for random sampling of 10x1150 of bzrtools
63
# Times for 500 'merge parents' from bzr.dev
66
for revision_id, parent_ids in parent_map.iteritems():
67
if parent_ids is not None and len(parent_ids) > 1:
68
combinations.append(parent_ids)
69
# The largest portion of the graph that has to be walked for a heads() check
70
# combinations = [('john@arbash-meinel.com-20090312021943-tu6tcog48aiujx4s',
71
# 'john@arbash-meinel.com-20090312130552-09xa2xsitf6rilzc')]
72
if opts.max_combinations > 0 and len(combinations) > opts.max_combinations:
73
combinations = random.sample(combinations, opts.max_combinations)
75
print ' %d combinations' % (len(combinations),)
77
def combi_graph(graph_klass, comb):
79
graph._counters[1] = 0
80
graph._counters[2] = 0
83
g = graph_klass(parent_map)
84
if opts.lsprof is not None:
85
heads = commands.apply_lsprofiled(opts.lsprof, all_heads_comp, g, comb)
87
heads = all_heads_comp(g, comb)
89
return dict(elapsed=(end - begin), graph=g, heads=heads)
92
print '%s: %.3fs' % (name, g['elapsed'])
94
for c in graph._counters:
98
print ' %s' % (graph._counters,)
100
known_python = combi_graph(_known_graph_py.KnownGraph, combinations)
101
report('Known', known_python)
103
known_pyrex = combi_graph(_known_graph_pyx.KnownGraph, combinations)
104
report('Known (pyx)', known_pyrex)
106
def _simple_graph(parent_map):
107
return graph.Graph(graph.DictParentsProvider(parent_map))
110
if known_python['heads'] != known_pyrex['heads']:
111
import pdb; pdb.set_trace()
112
print 'ratio: %.1f:1 faster' % (
113
known_python['elapsed'] / known_pyrex['elapsed'],)
115
orig = combi_graph(_simple_graph, combinations)
118
if orig['heads'] != known_pyrex['heads']:
119
import pdb; pdb.set_trace()
121
print 'ratio: %.1f:1 faster' % (
122
orig['elapsed'] / known_pyrex['elapsed'],)