1
# Copyright (C) 2006 by Canonical Ltd
1
# Copyright (C) 2006 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
19
19
from bzrlib import (
22
from bzrlib import plugin as _mod_plugin
23
23
import bzrlib.branch
24
24
from bzrlib.tests.TestUtil import TestLoader
25
25
from bzrlib.tests.blackbox import ExternalBase
28
28
class Benchmark(ExternalBase):
29
"""A Test class which provides helpers for writing benchmark tests."""
30
31
def make_kernel_like_tree(self, url=None, root='.',
31
32
link_working=False):
32
33
"""Setup a temporary tree roughly like a kernel tree.
34
35
:param url: Creat the kernel like tree as a lightweight checkout
35
of a new branch created at url.
36
of a new branch created at url.
37
:param root: Path where the tree will be created.
36
38
:param link_working: instead of creating a new copy of all files
37
39
just hardlink the working tree. Tests must request this, because
38
40
they must break links if they want to change the files
41
:return: A newly created tree.
40
43
from bzrlib.benchmarks.tree_creator.kernel_like import (
41
44
KernelLikeTreeCreator,
127
130
creator = HeavilyMergedTreeCreator(self, link_bzr=hardlink)
128
131
return creator.create(root=directory_name)
130
def create_with_commits(self, num_files, num_commits, directory_name='.'):
133
def create_with_commits(self, num_files, num_commits, directory_name='.',
131
135
"""Create a tree with many files and many commits. Every commit changes
132
136
exactly one file.
134
138
:param num_files: number of files to be created
135
139
:param num_commits: number of commits in the newly created tree
137
files = ["%s/%s" % (directory_name, i) for i in range(num_files)]
141
f.write("some content\n")
144
tree = bzrdir.BzrDir.create_standalone_workingtree(directory_name)
145
tree.add([str(i) for i in range(num_files)])
148
tree.commit('initial commit')
149
for i in range(num_commits):
150
fn = files[i % len(files)]
151
content = range(i) + [i, i, i, ""]
154
f.write("\n".join([str(i) for i in content]))
157
tree.commit("changing file %s" % fn)
141
from bzrlib.benchmarks.tree_creator.many_commit import (
142
ManyCommitTreeCreator,
144
creator = ManyCommitTreeCreator(self, link_bzr=hardlink,
146
num_commits=num_commits)
147
tree = creator.create(root=directory_name)
148
files = ["%s/%s" % (directory_name, fn) for fn in creator.files]
160
149
return tree, files
162
151
def commit_some_revisions(self, tree, files, num_commits,
167
156
:param tree: The tree in which the changes happen.
168
157
:param files: The list of files where changes should occur.
169
158
:param num_commits: The number of commits
170
:param changes_per_commit: The number of files that are touched in
159
:param changes_per_commit: The number of files that are touched in
173
162
for j in range(num_commits):
174
163
for i in range(changes_per_commit):
187
176
testmod_names = [ \
188
177
'bzrlib.benchmarks.bench_add',
189
178
'bzrlib.benchmarks.bench_bench',
179
'bzrlib.benchmarks.bench_bundle',
190
180
'bzrlib.benchmarks.bench_cache_utf8',
191
181
'bzrlib.benchmarks.bench_checkout',
192
182
'bzrlib.benchmarks.bench_commit',
183
'bzrlib.benchmarks.bench_dirstate',
184
'bzrlib.benchmarks.bench_info',
193
185
'bzrlib.benchmarks.bench_inventory',
186
'bzrlib.benchmarks.bench_knit',
194
187
'bzrlib.benchmarks.bench_log',
188
'bzrlib.benchmarks.bench_pack',
195
189
'bzrlib.benchmarks.bench_osutils',
196
190
'bzrlib.benchmarks.bench_rocks',
191
'bzrlib.benchmarks.bench_startup',
197
192
'bzrlib.benchmarks.bench_status',
198
193
'bzrlib.benchmarks.bench_transform',
199
194
'bzrlib.benchmarks.bench_workingtree',
203
198
suite = TestLoader().loadTestsFromModuleNames(testmod_names)
205
200
# Load any benchmarks from plugins
206
for name, module in plugin.all_plugins().items():
207
if getattr(module, 'bench_suite', None) is not None:
208
suite.addTest(module.bench_suite())
201
for name, plugin in _mod_plugin.plugins().items():
202
if getattr(plugin.module, 'bench_suite', None) is not None:
203
suite.addTest(plugin.module.bench_suite())