7
from bzrlib import branch, commands, graph, ui, trace
16
8
from bzrlib.ui import text
18
10
p = optparse.OptionParser()
19
p.add_option('--quick', default=False, action='store_true')
20
11
p.add_option('--max-combinations', default=500, type=int)
21
12
p.add_option('--lsprof', default=None, type=str)
22
13
opts, args = p.parse_args(sys.argv[1:])
24
14
trace.enable_default_logging()
25
15
ui.ui_factory = text.TextUIFactory()
29
18
b = branch.Branch.open(args[0])
66
53
for revision_id, parent_ids in parent_map.iteritems():
67
54
if parent_ids is not None and len(parent_ids) > 1:
68
55
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
56
if opts.max_combinations > 0 and len(combinations) > opts.max_combinations:
73
57
combinations = random.sample(combinations, opts.max_combinations)
75
59
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'],)
61
known_g = graph.KnownGraph(parent_map)
62
if opts.lsprof is not None:
63
h_known = commands.apply_lsprofiled(opts.lsprof,
64
all_heads_comp, known_g, combinations)
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'],)
66
h_known = all_heads_comp(known_g, combinations)
68
print "Known: %.3fs" % (t2-t1,)
69
print " %s" % (graph._counters,)
70
simple_g = graph.Graph(graph.DictParentsProvider(parent_map))
71
graph._counters[1] = 0
72
graph._counters[2] = 0
73
h_simple = all_heads_comp(simple_g, combinations)
75
print "Orig: %.3fs" % (t3-t2,)
76
print " %s" % (graph._counters,)
77
if h_simple != h_known:
78
import pdb; pdb.set_trace()
79
print 'ratio: %.3fs' % ((t2-t1) / (t3-t2))