33
34
class BundleBenchmark(Benchmark):
34
35
"""Benchmarks for bzr bundle performance and bzr merge with a bundle."""
36
37
def test_create_bundle_known_kernel_like_tree(self):
37
38
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
38
39
or added and one commit.
40
41
self.make_kernel_like_committed_tree()
41
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
42
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
43
44
def test_create_bundle_many_commit_tree (self):
44
"""Create a bundle for a tree with many commits but no changes."""
45
"""Create a bundle for a tree with many commits but no changes."""
45
46
self.make_many_commit_tree()
46
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
47
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
48
49
def test_create_bundle_heavily_merged_tree(self):
49
"""Create a bundle for a heavily merged tree."""
50
"""Create a bundle for a heavily merged tree."""
50
51
self.make_heavily_merged_tree()
51
self.time(self.run_bzr, ['bundle', '--revision', '..-1'])
52
self.time(self.run_bzr, 'bundle', '--revision', '..-1')
53
54
def test_apply_bundle_known_kernel_like_tree(self):
54
55
"""Create a bundle for a kernel sized tree with no ignored, unknowns,
55
56
or added and one commit.
57
58
tree = self.make_kernel_like_committed_tree('tree')
59
60
f = open('bundle', 'wb')
66
67
tree2 = self.make_branch_and_tree('branch_a')
67
68
os.chdir('branch_a')
68
self.time(self.run_bzr, ['merge', '../bundle'])
69
self.time(self.run_bzr, 'merge', '../bundle')
71
71
class BundleLibraryLevelWriteBenchmark(Benchmark):
72
72
""" Benchmarks for the write_bundle library function. """
74
74
def _time_read_write(self):
75
76
branch, relpath = Branch.open_containing("a")
76
77
revision_history = branch.revision_history()
77
78
bundle_text = StringIO()
79
print "starting write bundle"
78
80
self.time(write_bundle, branch.repository, revision_history[-1],
79
81
NULL_REVISION, bundle_text)
82
print "stopped writing bundle"
80
83
bundle_text.seek(0)
81
84
target_tree = self.make_branch_and_tree('b')
85
print "starting reading bundle"
82
86
bundle = self.time(read_bundle, bundle_text)
87
print "starting installing bundle"
83
88
self.time(install_bundle, target_tree.branch.repository, bundle)
85
90
def test_few_files_small_tree_1_revision(self):
106
117
self.commit_some_revisions(tree, files[:5], 100, 1)
107
118
self._time_read_write()
120
def test_few_files_moderate_tree_1000_revision(self):
122
tree, files = self.create_with_commits(100, 1, directory_name="a")
123
self.commit_some_revisions(tree, files[:5], 1000, 1)
124
self._time_read_write()
109
126
def test_some_files_moderate_tree_1_revision(self):
111
128
tree, files = self.create_with_commits(100, 1, directory_name="a")
112
129
self.commit_some_revisions(tree, files[:100], 1, 1)
113
130
self._time_read_write()
132
def test_some_files_moderate_tree_100_revision(self):
134
tree, files = self.create_with_commits(100, 1, directory_name="a")
135
self.commit_some_revisions(tree, files[:100], 100, 1)
136
self._time_read_write()
138
def test_some_files_moderate_tree_1000_revision(self):
140
tree, files = self.create_with_commits(100, 1, directory_name="a")
141
self.commit_some_revisions(tree, files[:100], 1000, 1)
142
self._time_read_write()
115
144
def test_few_files_big_tree_1_revision(self):
117
146
tree, files = self.create_with_commits(1000, 1, directory_name="a")
118
147
self.commit_some_revisions(tree, files[:5], 1, 1)
119
148
self._time_read_write()
150
def test_few_files_big_tree_100_revision(self):
152
tree, files = self.create_with_commits(1000, 1, directory_name="a")
153
self.commit_some_revisions(tree, files[:5], 100, 1)
154
self._time_read_write()
156
def test_few_files_big_tree_1000_revision(self):
158
tree, files = self.create_with_commits(1000, 1, directory_name="a")
159
self.commit_some_revisions(tree, files[:5], 1000, 1)
160
self._time_read_write()
121
162
def test_some_files_big_tree_1_revision(self):
123
164
tree, files = self.create_with_commits(1000, 1, directory_name="a")
124
165
self.commit_some_revisions(tree, files[:100], 1, 1)
125
166
self._time_read_write()
168
def test_some_files_big_tree_100_revision(self):
170
tree, files = self.create_with_commits(1000, 1, directory_name="a")
171
self.commit_some_revisions(tree, files[:100], 100, 1)
172
self._time_read_write()
174
def test_some_files_big_tree_1000_revision(self):
176
tree, files = self.create_with_commits(1000, 1, directory_name="a")
177
self.commit_some_revisions(tree, files[:100], 1000, 1)
178
self._time_read_write()
180
def test_many_files_big_tree_1_revision(self):
182
tree, files = self.create_with_commits(1000, 1, directory_name="a")
183
self.commit_some_revisions(tree, files[:1000], 1, 1)
184
self._time_read_write()
186
def test_many_files_big_tree_100_revision(self):
188
tree, files = self.create_with_commits(1000, 1, directory_name="a")
189
self.commit_some_revisions(tree, files[:1000], 100, 1)
190
self._time_read_write()
192
def test_many_files_big_tree_1000_revision(self):
194
tree, files = self.create_with_commits(1000, 1, directory_name="a")
195
self.commit_some_revisions(tree, files[:1000], 1000, 1)
196
self._time_read_write()
128
198
class BundleLibraryLevelInstallBenchmark(Benchmark):
129
199
""" Benchmarks for the install_bundle library function. """
169
239
self.commit_some_revisions(tree, files[:100], 1, 1)
170
240
self._time_read_write()
242
def test_some_files_moderate_tree_100_revision(self):
244
tree, files = self.create_with_commits(100, 1, directory_name="a")
245
self.commit_some_revisions(tree, files[:100], 100, 1)
246
self._time_read_write()
172
248
def test_few_files_big_tree_1_revision(self):
174
250
tree, files = self.create_with_commits(1000, 1, directory_name="a")
175
251
self.commit_some_revisions(tree, files[:5], 1, 1)
176
252
self._time_read_write()
254
def test_few_files_big_tree_100_revision(self):
256
tree, files = self.create_with_commits(1000, 1, directory_name="a")
257
self.commit_some_revisions(tree, files[:5], 100, 1)
258
self._time_read_write()
178
260
def test_some_files_big_tree_1_revision(self):
180
262
tree, files = self.create_with_commits(1000, 1, directory_name="a")
181
263
self.commit_some_revisions(tree, files[:100], 1, 1)
182
264
self._time_read_write()
266
def test_some_files_big_tree_100_revision(self):
268
tree, files = self.create_with_commits(1000, 1, directory_name="a")
269
self.commit_some_revisions(tree, files[:100], 100, 1)
270
self._time_read_write()
272
def test_many_files_big_tree_1_revision(self):
274
tree, files = self.create_with_commits(1000, 1, directory_name="a")
275
self.commit_some_revisions(tree, files[:1000], 1, 1)
276
self._time_read_write()
278
def test_many_files_big_tree_100_revision(self):
280
tree, files = self.create_with_commits(1000, 1, directory_name="a")
281
self.commit_some_revisions(tree, files[:1000], 100, 1)
282
self._time_read_write()
185
285
if __name__ == '__main__':
186
# USE the following if you want to regenerate the above test functions
286
# USE the following if you want to regenerate the above test functions
187
287
for treesize, treesize_h in [(5, "small"), (100, "moderate"),
189
for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some")]:
289
for bundlefiles, bundlefiles_h in [(5, "few"), (100, "some"),
190
291
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.
293
for num_revisions in [1, 100, 1000]:
199
295
def test_%s_files_%s_tree_%s_revision(self):