33
35
class BundleBenchmark(Benchmark):
34
36
"""Benchmarks for bzr bundle performance and bzr merge with a bundle."""
36
38
def test_create_bundle_known_kernel_like_tree(self):
37
39
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
38
40
or added and one commit.
40
42
self.make_kernel_like_committed_tree()
41
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
43
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
43
45
def test_create_bundle_many_commit_tree (self):
44
"""Create a bundle for a tree with many commits but no changes."""
46
"""Create a bundle for a tree with many commits but no changes."""
45
47
self.make_many_commit_tree()
46
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
48
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
48
50
def test_create_bundle_heavily_merged_tree(self):
49
"""Create a bundle for a heavily merged tree."""
51
"""Create a bundle for a heavily merged tree."""
50
52
self.make_heavily_merged_tree()
51
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
53
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
53
55
def test_apply_bundle_known_kernel_like_tree(self):
54
56
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
55
57
or added and one commit.
57
59
tree = self.make_kernel_like_committed_tree('tree')
59
61
f = open('bundle', 'wb')
66
68
tree2 = self.make_branch_and_tree('branch_a')
67
69
os.chdir('branch_a')
68
self.time(self.run_bzr, ['merge', '../bundle'])
70
self.time(self.run_bzr, 'merge', '../bundle')
71
72
class BundleLibraryLevelWriteBenchmark(Benchmark):
72
73
""" Benchmarks for the write_bundle library function. """
74
75
def _time_read_write(self):
75
77
branch, relpath = Branch.open_containing("a")
76
78
revision_history = branch.revision_history()
77
79
bundle_text = StringIO()
80
print "starting write bundle"
78
81
self.time(write_bundle, branch.repository, revision_history[-1],
79
82
NULL_REVISION, bundle_text)
83
print "stopped writing bundle"
80
84
bundle_text.seek(0)
81
85
target_tree = self.make_branch_and_tree('b')
86
print "starting reading bundle"
82
87
bundle = self.time(read_bundle, bundle_text)
88
print "starting installing bundle"
83
89
self.time(install_bundle, target_tree.branch.repository, bundle)
85
91
def test_few_files_small_tree_1_revision(self):
106
118
self.commit_some_revisions(tree, files[:5], 100, 1)
107
119
self._time_read_write()
121
def test_few_files_moderate_tree_1000_revision(self):
123
tree, files = self.create_with_commits(100, 1, directory_name="a")
124
self.commit_some_revisions(tree, files[:5], 1000, 1)
125
self._time_read_write()
109
127
def test_some_files_moderate_tree_1_revision(self):
111
129
tree, files = self.create_with_commits(100, 1, directory_name="a")
112
130
self.commit_some_revisions(tree, files[:100], 1, 1)
113
131
self._time_read_write()
133
def test_some_files_moderate_tree_100_revision(self):
135
tree, files = self.create_with_commits(100, 1, directory_name="a")
136
self.commit_some_revisions(tree, files[:100], 100, 1)
137
self._time_read_write()
139
def test_some_files_moderate_tree_1000_revision(self):
141
tree, files = self.create_with_commits(100, 1, directory_name="a")
142
self.commit_some_revisions(tree, files[:100], 1000, 1)
143
self._time_read_write()
115
145
def test_few_files_big_tree_1_revision(self):
117
147
tree, files = self.create_with_commits(1000, 1, directory_name="a")
118
148
self.commit_some_revisions(tree, files[:5], 1, 1)
119
149
self._time_read_write()
151
def test_few_files_big_tree_100_revision(self):
153
tree, files = self.create_with_commits(1000, 1, directory_name="a")
154
self.commit_some_revisions(tree, files[:5], 100, 1)
155
self._time_read_write()
157
def test_few_files_big_tree_1000_revision(self):
159
tree, files = self.create_with_commits(1000, 1, directory_name="a")
160
self.commit_some_revisions(tree, files[:5], 1000, 1)
161
self._time_read_write()
121
163
def test_some_files_big_tree_1_revision(self):
123
165
tree, files = self.create_with_commits(1000, 1, directory_name="a")
124
166
self.commit_some_revisions(tree, files[:100], 1, 1)
125
167
self._time_read_write()
169
def test_some_files_big_tree_100_revision(self):
171
tree, files = self.create_with_commits(1000, 1, directory_name="a")
172
self.commit_some_revisions(tree, files[:100], 100, 1)
173
self._time_read_write()
175
def test_some_files_big_tree_1000_revision(self):
177
tree, files = self.create_with_commits(1000, 1, directory_name="a")
178
self.commit_some_revisions(tree, files[:100], 1000, 1)
179
self._time_read_write()
181
def test_many_files_big_tree_1_revision(self):
183
tree, files = self.create_with_commits(1000, 1, directory_name="a")
184
self.commit_some_revisions(tree, files[:1000], 1, 1)
185
self._time_read_write()
187
def test_many_files_big_tree_100_revision(self):
189
tree, files = self.create_with_commits(1000, 1, directory_name="a")
190
self.commit_some_revisions(tree, files[:1000], 100, 1)
191
self._time_read_write()
193
def test_many_files_big_tree_1000_revision(self):
195
tree, files = self.create_with_commits(1000, 1, directory_name="a")
196
self.commit_some_revisions(tree, files[:1000], 1000, 1)
197
self._time_read_write()
128
199
class BundleLibraryLevelInstallBenchmark(Benchmark):
129
200
""" Benchmarks for the install_bundle library function. """
169
240
self.commit_some_revisions(tree, files[:100], 1, 1)
170
241
self._time_read_write()
243
def test_some_files_moderate_tree_100_revision(self):
245
tree, files = self.create_with_commits(100, 1, directory_name="a")
246
self.commit_some_revisions(tree, files[:100], 100, 1)
247
self._time_read_write()
172
249
def test_few_files_big_tree_1_revision(self):
174
251
tree, files = self.create_with_commits(1000, 1, directory_name="a")
175
252
self.commit_some_revisions(tree, files[:5], 1, 1)
176
253
self._time_read_write()
255
def test_few_files_big_tree_100_revision(self):
257
tree, files = self.create_with_commits(1000, 1, directory_name="a")
258
self.commit_some_revisions(tree, files[:5], 100, 1)
259
self._time_read_write()
178
261
def test_some_files_big_tree_1_revision(self):
180
263
tree, files = self.create_with_commits(1000, 1, directory_name="a")
181
264
self.commit_some_revisions(tree, files[:100], 1, 1)
182
265
self._time_read_write()
267
def test_some_files_big_tree_100_revision(self):
269
tree, files = self.create_with_commits(1000, 1, directory_name="a")
270
self.commit_some_revisions(tree, files[:100], 100, 1)
271
self._time_read_write()
273
def test_many_files_big_tree_1_revision(self):
275
tree, files = self.create_with_commits(1000, 1, directory_name="a")
276
self.commit_some_revisions(tree, files[:1000], 1, 1)
277
self._time_read_write()
279
def test_many_files_big_tree_100_revision(self):
281
tree, files = self.create_with_commits(1000, 1, directory_name="a")
282
self.commit_some_revisions(tree, files[:1000], 100, 1)
283
self._time_read_write()
185
286
if __name__ == '__main__':
186
# USE the following if you want to regenerate the above test functions
287
# USE the following if you want to regenerate the above test functions
187
288
for treesize, treesize_h in [(5, "small"), (100, "moderate"),
189
for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some")]:
290
for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some"),
190
292
if bundlefiles > treesize:
192
for num_revisions in [1, 100]:
193
if (num_revisions >= 100 and
194
(bundlefiles >= 100 or treesize >= 1000)):
195
# Skip the 100x100x? tests.
294
for num_revisions in [1, 100, 1000]:
199
296
def test_%s_files_%s_tree_%s_revision(self):