/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1714.1.6 by Robert Collins
Add commit benchmark source file.
1
# Copyright (C) 2006 by Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License version 2 as published by
5
# the Free Software Foundation.
6
#
7
# This program is distributed in the hope that it will be useful,
8
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
# GNU General Public License for more details.
11
#
12
# You should have received a copy of the GNU General Public License
13
# along with this program; if not, write to the Free Software
14
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
15
16
"""Benchmarks of bzr commit."""
17
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
18
import os
1714.1.6 by Robert Collins
Add commit benchmark source file.
19
20
from bzrlib.benchmarks import Benchmark
1725.2.5 by Robert Collins
Bugfix create_branch_convenience at the root of a file system to not loop
21
from bzrlib.transport.memory import MemoryServer
22
from bzrlib.transport import get_transport
1714.1.6 by Robert Collins
Add commit benchmark source file.
23
24
1714.1.7 by Robert Collins
Review feedback.
25
class CommitBenchmark(Benchmark):
1714.1.6 by Robert Collins
Add commit benchmark source file.
26
27
    def test_commit_kernel_like_tree(self):
28
        """Commit of a fresh import of a clean kernel sized tree."""
1725.2.5 by Robert Collins
Bugfix create_branch_convenience at the root of a file system to not loop
29
        # uncomment this to run the benchmark with the repository in memory
30
        # not disk
31
        # self.transport_server = MemoryServer
1725.2.7 by Robert Collins
really make commit benchmark able to run on memory transports.
32
        # self.make_kernel_like_tree(self.get_url())
1908.2.18 by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark
33
        tree = self.make_kernel_like_added_tree()
1714.1.6 by Robert Collins
Add commit benchmark source file.
34
        # on robertc's machine the first sample of this took 59750ms/77682ms
1725.2.3 by Robert Collins
Remove import of pumpfile from inner loop of commit.
35
        # after initial call reduction                       53922ms/73918ms
1714.1.6 by Robert Collins
Add commit benchmark source file.
36
        self.time(self.run_bzr, 'commit', '-m', 'first post')
1908.2.7 by John Arbash Meinel
Update the benchmarks to actually use the cached trees
37
38
    def test_partial_commit_kernel_like_tree(self):
39
        """Commit of 1/8th of a fresh import of a clean kernel sized tree."""
1908.2.18 by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark
40
        tree = self.make_kernel_like_added_tree()
1908.2.7 by John Arbash Meinel
Update the benchmarks to actually use the cached trees
41
        self.time(self.run_bzr, 'commit', '-m', 'first post', '1')
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
42
43
    def test_no_op_commit_in_kernel_like_tree(self):
44
        """Run commit --unchanged in a kernel sized tree"""
45
        tree = self.make_kernel_like_committed_tree()
46
        self.time(self.run_bzr, 'commit', '-m', 'no changes', '--unchanged')
47
48
    def test_commit_one_in_kernel_like_tree_cold_hash_cache(self):
49
        """Time committing a single change, when not directly specified"""
1908.4.7 by John Arbash Meinel
Fix up tests with new hot cache work
50
        tree = self.make_kernel_like_committed_tree(hot_cache=False)
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
51
52
        # working-tree is hardlinked, so replace a file and commit the change
53
        os.remove('4/4/4/4')
54
        open('4/4/4/4', 'wb').write('new contents\n')
55
        self.time(self.run_bzr, 'commit', '-m', 'second')
56
57
    def test_commit_one_in_kernel_like_tree_hot_hash_cache(self):
58
        """Time committing a single change, when not directly specified"""
59
        tree = self.make_kernel_like_committed_tree()
60
61
        # working-tree is hardlinked, so replace a file and commit the change
62
        os.remove('4/4/4/4')
63
        open('4/4/4/4', 'wb').write('new contents\n')
64
        self.time(self.run_bzr, 'commit', '-m', 'second')
65
66
    def test_partial_commit_one_in_kernel_like_tree_cold_hash_cache(self):
67
        """Time committing a single change when it is directly specified"""
68
1908.4.7 by John Arbash Meinel
Fix up tests with new hot cache work
69
        tree = self.make_kernel_like_committed_tree(hot_cache=False)
1908.4.1 by John Arbash Meinel
Adding a bunch of commit benchmarks, mostly on kernel sized trees
70
71
        # working-tree is hardlinked, so replace a file and commit the change
72
        os.remove('4/4/4/4')
73
        open('4/4/4/4', 'wb').write('new contents\n')
74
        self.time(self.run_bzr, 'commit', '-m', 'second', '4/4/4/4')
75
76
    def test_partial_commit_one_in_kernel_like_tree_hot_hash_cache(self):
77
        """Time committing a single change when it is directly specified"""
78
79
        tree = self.make_kernel_like_committed_tree()
80
81
        # working-tree is hardlinked, so replace a file and commit the change
82
        os.remove('4/4/4/4')
83
        open('4/4/4/4', 'wb').write('new contents\n')
84
        self.time(self.run_bzr, 'commit', '-m', 'second', '4/4/4/4')
85
86
    def make_simple_tree(self):
87
        """A small, simple tree. No caching needed"""
88
        tree = self.make_branch_and_tree('.')
89
        self.build_tree(['a', 'b/', 'b/c'])
90
        tree.add(['a', 'b', 'b/c'])
91
        return tree
92
93
    def test_cmd_commit(self):
94
        """Test execution of simple commit"""
95
        tree = self.make_simple_tree()
96
        self.time(self.run_bzr, 'commit', '-m', 'init simple tree')
97
98
    def test_cmd_commit_subprocess(self):
99
        """Text startup and execution of a simple commit.""" 
100
        tree = self.make_simple_tree()
101
        self.time(self.run_bzr_subprocess, 'commit', '-m', 'init simple tree')