16
from bzrlib.ui import text
18
p = optparse.OptionParser()
19
p.add_option('--max-combinations', default=500, type=int)
20
p.add_option('--lsprof', default=None, type=str)
21
opts, args = p.parse_args(sys.argv[1:])
22
trace.enable_default_logging()
23
ui.ui_factory = text.TextUIFactory()
26
b = branch.Branch.open(args[0])
28
b = branch.Branch.open('.')
31
g = b.repository.get_graph()
32
parent_map = dict(p for p in g.iter_ancestry([b.last_revision()])
37
print 'Found %d nodes' % (len(parent_map),)
39
def all_heads_comp(g, combinations):
41
pb = ui.ui_factory.nested_progress_bar()
43
for idx, combo in enumerate(combinations):
45
pb.update('proc', idx, len(combinations))
46
h.append(g.heads(combo))
51
# parents = parent_map.keys()
53
# for p2 in random.sample(parents, 10):
54
# combinations.append((p1, p2))
55
# Times for random sampling of 10x1150 of bzrtools
58
# Times for 500 'merge parents' from bzr.dev
61
for revision_id, parent_ids in parent_map.iteritems():
62
if parent_ids is not None and len(parent_ids) > 1:
63
combinations.append(parent_ids)
64
if opts.max_combinations > 0 and len(combinations) > opts.max_combinations:
65
combinations = random.sample(combinations, opts.max_combinations)
67
print ' %d combinations' % (len(combinations),)
69
known_g = _known_graph_py.KnownGraph(parent_map)
70
if opts.lsprof is not None:
71
h_known = commands.apply_lsprofiled(opts.lsprof,
72
all_heads_comp, known_g, combinations)
74
h_known = all_heads_comp(known_g, combinations)
76
print "Known: %.3fs" % (t2-t1,)
77
print " %s" % (graph._counters,)
79
known_g = _known_graph_pyx.KnownGraph(parent_map)
80
if opts.lsprof is not None:
81
h_known = commands.apply_lsprofiled(opts.lsprof,
82
all_heads_comp, known_g, combinations)
84
h_known = all_heads_comp(known_g, combinations)
86
print "Known (pyx): %.3fs" % (t2-t1,)
87
print " %s" % (graph._counters,)
88
simple_g = graph.Graph(graph.DictParentsProvider(parent_map))
89
graph._counters[1] = 0
90
graph._counters[2] = 0
91
h_simple = all_heads_comp(simple_g, combinations)
93
print "Orig: %.3fs" % (t3-t2,)
94
print " %s" % (graph._counters,)
95
if h_simple != h_known:
96
import pdb; pdb.set_trace()
97
print 'ratio: %.3fs' % ((t2-t1) / (t3-t2))