1
# Copyright (C) 2006 by Canonical Ltd
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.
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.
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
16
"""Tests for bzr xml serialization performance."""
22
from bzrlib.benchmarks import Benchmark
25
class BenchXMLSerializer(Benchmark):
27
def test_write_to_string_kernel_like_inventory(self):
28
# On jam's machine, ElementTree serializer took: 2161ms/13487ms
29
# with Robert's serializer: 631ms/10770ms
30
# with Entity escaper: 487ms/11636ms
31
# caching Entity escaper, empty cache: 448ms/ 9489ms
32
# caching Entity escaper, full cache: 375ms/ 9489ms
33
# passing around function: 406ms/ 8942ms
34
# cached, passing around function: 328ms/11248ms
35
# removing extra function: 354ms/ 8942ms
36
# cached, removing extra function: 275ms/11248ms
37
# no cache, real utf8: 363ms/11697ms
38
# cached, real utf8: 272ms/12827ms
39
# Really all we want is a real inventory
40
inv = self.make_kernel_like_inventory()
43
# We want a real tree with lots of file ids and sha strings, etc.
44
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
46
def test_write_kernel_like_inventory(self):
47
# Really all we want is a real inventory
48
inv = self.make_kernel_like_inventory()
51
f = open('kernel-like-inventory', 'wb')
53
# We want a real tree with lots of file ids and sha strings, etc.
54
self.time(xml5.serializer_v5.write_inventory, inv, f)
58
def test_write_to_string_cached_kernel_like_inventory(self):
59
inv = self.make_kernel_like_inventory()
62
# We want a real tree with lots of file ids and sha strings, etc.
63
xml5.serializer_v5.write_inventory_to_string(inv)
65
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
67
def test_read_from_string_kernel_like_inventory(self):
68
inv = self.make_kernel_like_inventory()
69
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
71
cache_utf8.clear_encoding_cache()
72
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
74
# TODO: make sure the final inventory is equal as a sanity check
76
def test_read_from_string_cached_kernel_like_inventory(self):
77
cache_utf8.clear_encoding_cache()
78
inv = self.make_kernel_like_inventory()
79
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
81
xml5.serializer_v5.read_inventory_from_string(as_str)
83
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
85
# TODO: make sure the final inventory is equal as a sanity check