18
18
"""Benchmark test suite for bzr."""
20
from bzrlib.tests import TestLoader
20
from bzrlib import bzrdir, plugin
21
from bzrlib.tests.TestUtil import TestLoader
21
22
from bzrlib.tests.blackbox import ExternalBase
23
25
class Benchmark(ExternalBase):
25
def make_kernel_like_tree(self):
26
"""Setup a temporary tree roughly like a kernel tree."""
27
def make_kernel_like_tree(self, url=None):
28
"""Setup a temporary tree roughly like a kernel tree.
30
:param url: Creat the kernel like tree as a lightweight checkout
31
of a new branch created at url.
27
33
# a kernel tree has ~10000 and 500 directory, with most files around
29
35
# we simulate this by three levels of dirs named 0-7, givin 512 dirs,
30
36
# and 20 files each.
38
b = bzrdir.BzrDir.create_branch_convenience(url)
39
d = bzrdir.BzrDir.create('.')
40
bzrlib.branch.BranchReferenceFormat().initialize(d, b)
41
d.create_workingtree()
33
45
for outer in range(8):
34
46
files.append("%s/" % outer)
40
52
files.extend([prefix + str(foo) for foo in range(20)])
41
53
self.build_tree(files)
55
def make_many_commit_tree(self, directory_name='.'):
56
"""Create a tree with many commits.
58
No files change are included.
60
tree = BzrDir.create_standalone_workingtree(directory_name)
62
tree.branch.lock_write()
63
tree.branch.repository.lock_write()
65
for i in xrange(1000):
66
tree.commit('no-changes commit %d' % i)
70
tree.branch.repository.unlock()
77
def make_heavily_merged_tree(self, directory_name='.'):
78
"""Create a tree in which almost every commit is a merge.
80
No files change are included. This produces two trees,
81
one of which is returned. Except for the first commit, every
82
commit in its revision-history is a merge another commit in the other
85
tree = BzrDir.create_standalone_workingtree(directory_name)
88
tree2 = tree.bzrdir.sprout('tree2').open_workingtree()
92
revision_id = tree.commit('no-changes commit %d-a' % i)
93
tree2.branch.fetch(tree.branch, revision_id)
94
tree2.set_pending_merges([revision_id])
95
revision_id = tree2.commit('no-changes commit %d-b' % i)
96
tree.branch.fetch(tree2.branch, revision_id)
97
tree.set_pending_merges([revision_id])
98
tree.set_pending_merges([])
45
107
"""Build and return a TestSuite which contains benchmark tests only."""
46
108
testmod_names = [ \
47
109
'bzrlib.benchmarks.bench_add',
110
'bzrlib.benchmarks.bench_bench',
48
111
'bzrlib.benchmarks.bench_checkout',
49
112
'bzrlib.benchmarks.bench_commit',
113
'bzrlib.benchmarks.bench_inventory',
114
'bzrlib.benchmarks.bench_log',
115
'bzrlib.benchmarks.bench_osutils',
116
'bzrlib.benchmarks.bench_rocks',
50
117
'bzrlib.benchmarks.bench_status',
51
118
'bzrlib.benchmarks.bench_transform',
119
'bzrlib.benchmarks.bench_workingtree',
53
return TestLoader().loadTestsFromModuleNames(testmod_names)
121
suite = TestLoader().loadTestsFromModuleNames(testmod_names)
123
# Load any benchmarks from plugins
124
for name, module in plugin.all_plugins().items():
125
if getattr(module, 'bench_suite', None) is not None:
126
suite.addTest(module.bench_suite())