2052.3.2
by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical |
1 |
# Copyright (C) 2006 Canonical Ltd
|
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
2 |
#
|
3 |
# This program is free software; you can redistribute it and/or modify
|
|
2052.3.1
by John Arbash Meinel
Add tests to cleanup the copyright of all source files |
4 |
# it under the terms of the GNU General Public License as published by
|
5 |
# the Free Software Foundation; either version 2 of the License, or
|
|
6 |
# (at your option) any later version.
|
|
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
7 |
#
|
8 |
# This program is distributed in the hope that it will be useful,
|
|
9 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11 |
# GNU General Public License for more details.
|
|
12 |
#
|
|
13 |
# You should have received a copy of the GNU General Public License
|
|
14 |
# along with this program; if not, write to the Free Software
|
|
4183.7.1
by Sabin Iacob
update FSF mailing address |
15 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
16 |
|
17 |
"""Tests for bzr working tree performance."""
|
|
18 |
||
1732.1.13
by John Arbash Meinel
A large improvement from not popping the parent off until we have done all children. |
19 |
import os |
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
20 |
|
2135.2.7
by Kent Gibson
Implement JAM's review suggestions. |
21 |
from bzrlib import ignores |
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
22 |
from bzrlib.benchmarks import Benchmark |
23 |
from bzrlib.workingtree import WorkingTree |
|
24 |
||
25 |
||
26 |
class WorkingTreeBenchmark(Benchmark): |
|
2399.1.7
by John Arbash Meinel
Cleanup bzrlib/benchmarks/* so that everything at least has a valid doc string. |
27 |
"""Benchmarks for `bzrlib.workingtree` performance."""
|
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
28 |
|
29 |
def test_list_files_kernel_like_tree(self): |
|
1908.2.18
by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark |
30 |
tree = self.make_kernel_like_added_tree() |
2255.2.61
by John Arbash Meinel
Find callers of list_files() and make sure the tree is always locked. |
31 |
tree.lock_read() |
32 |
try: |
|
33 |
self.time(list, tree.list_files()) |
|
34 |
finally: |
|
35 |
tree.unlock() |
|
1732.1.11
by John Arbash Meinel
Trying multiple things to get WorkingTree.list_files time down |
36 |
|
1732.1.13
by John Arbash Meinel
A large improvement from not popping the parent off until we have done all children. |
37 |
def test_list_files_unknown_kernel_like_tree(self): |
1908.2.18
by John Arbash Meinel
I think it is actually better as simple helper functions on Benchmark |
38 |
tree = self.make_kernel_like_tree(link_working=True) |
1732.1.13
by John Arbash Meinel
A large improvement from not popping the parent off until we have done all children. |
39 |
tree = WorkingTree.open('.') |
1732.1.27
by John Arbash Meinel
Document bench_workingtree |
40 |
# Bzr only traverses directories if they are versioned
|
41 |
# So add all the directories, but not the files, yielding
|
|
42 |
# lots of unknown files.
|
|
1732.1.13
by John Arbash Meinel
A large improvement from not popping the parent off until we have done all children. |
43 |
for root, dirs, files in os.walk('.'): |
44 |
if '.bzr' in dirs: |
|
45 |
dirs.remove('.bzr') |
|
46 |
if root == '.': |
|
47 |
continue
|
|
48 |
tree.add(root) |
|
2255.2.63
by John Arbash Meinel
track down a couple other places where we are using list_files. |
49 |
tree.lock_read() |
50 |
try: |
|
51 |
self.time(list, tree.list_files()) |
|
52 |
finally: |
|
53 |
tree.unlock() |
|
1732.1.13
by John Arbash Meinel
A large improvement from not popping the parent off until we have done all children. |
54 |
|
1762.1.1
by Robert Collins
(robertc)Benchmarks for is_ignored. |
55 |
def test_is_ignored_single_call(self): |
56 |
"""How long does is_ignored take to initialise and check one file."""
|
|
57 |
t = self.make_branch_and_tree('.') |
|
58 |
self.time(t.is_ignored, "CVS") |
|
3943.8.1
by Marius Kruger
remove all trailing whitespace from bzr source |
59 |
|
1762.1.1
by Robert Collins
(robertc)Benchmarks for is_ignored. |
60 |
def test_is_ignored_10824_calls(self): |
61 |
"""How long does is_ignored take to initialise and check one file."""
|
|
62 |
t = self.make_branch_and_tree('.') |
|
63 |
def call_is_ignored_10824_not_ignored(): |
|
64 |
for x in xrange(10824): |
|
65 |
t.is_ignored(str(x)) |
|
66 |
self.time(call_is_ignored_10824_not_ignored) |
|
1852.15.13
by Robert Collins
Add WorkingTree.walkdirs benchmarks. |
67 |
|
2135.2.1
by Kent Gibson
Added glob module to replace broken fnmatch based ignore pattern matching (#57637) |
68 |
def test_is_ignored_10_patterns(self): |
69 |
t = self.make_branch_and_tree('.') |
|
70 |
ignores.add_runtime_ignores([u'*.%i' % i for i in range(1, 9)]) |
|
71 |
ignores.add_runtime_ignores(['./foo', 'foo/bar']) |
|
72 |
self.time(t.is_ignored,'bar') |
|
73 |
ignores._runtime_ignores = set() |
|
74 |
||
2135.2.2
by Kent Gibson
Ignore pattern matcher (glob.py) patches: |
75 |
def test_is_ignored_50_patterns(self): |
76 |
t = self.make_branch_and_tree('.') |
|
77 |
ignores.add_runtime_ignores([u'*.%i' % i for i in range(1, 49)]) |
|
78 |
ignores.add_runtime_ignores(['./foo', 'foo/bar']) |
|
79 |
self.time(t.is_ignored,'bar') |
|
80 |
ignores._runtime_ignores = set() |
|
81 |
||
2135.2.1
by Kent Gibson
Added glob module to replace broken fnmatch based ignore pattern matching (#57637) |
82 |
def test_is_ignored_100_patterns(self): |
83 |
t = self.make_branch_and_tree('.') |
|
84 |
ignores.add_runtime_ignores([u'*.%i' % i for i in range(1, 99)]) |
|
85 |
ignores.add_runtime_ignores(['./foo', 'foo/bar']) |
|
86 |
self.time(t.is_ignored,'bar') |
|
87 |
ignores._runtime_ignores = set() |
|
88 |
||
89 |
def test_is_ignored_1000_patterns(self): |
|
90 |
t = self.make_branch_and_tree('.') |
|
91 |
ignores.add_runtime_ignores([u'*.%i' % i for i in range(1, 999)]) |
|
92 |
ignores.add_runtime_ignores(['./foo', 'foo/bar']) |
|
93 |
self.time(t.is_ignored,'bar') |
|
94 |
ignores._runtime_ignores = set() |
|
95 |
||
1852.15.13
by Robert Collins
Add WorkingTree.walkdirs benchmarks. |
96 |
def test_walkdirs_kernel_like_tree(self): |
97 |
"""Walking a kernel sized tree is fast!(150ms)."""
|
|
98 |
self.make_kernel_like_tree() |
|
99 |
self.run_bzr('add') |
|
100 |
tree = WorkingTree.open('.') |
|
101 |
# on roberts machine: this originally took: 157ms/4177ms
|
|
102 |
# plain os.walk takes 213ms on this tree
|
|
103 |
self.time(list, tree.walkdirs()) |
|
104 |
||
105 |
def test_walkdirs_kernel_like_tree_unknown(self): |
|
106 |
"""Walking a kernel sized tree is fast!(150ms)."""
|
|
107 |
self.make_kernel_like_tree() |
|
108 |
tree = WorkingTree.open('.') |
|
109 |
# on roberts machine: this originally took: 157ms/4177ms
|
|
110 |
# plain os.walk takes 213ms on this tree
|
|
111 |
self.time(list, tree.walkdirs()) |