1
# Copyright (C) 2006 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 as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
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.
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
"""Tests for bzr xml serialization performance."""
23
from bzrlib.benchmarks import Benchmark
26
class BenchXMLSerializer(Benchmark):
28
def test_write_to_string_kernel_like_inventory(self):
29
# On jam's machine, ElementTree serializer took: 2161ms/13487ms
30
# with Robert's serializer: 631ms/10770ms
31
# with Entity escaper: 487ms/11636ms
32
# caching Entity escaper, empty cache: 448ms/ 9489ms
33
# caching Entity escaper, full cache: 375ms/ 9489ms
34
# passing around function: 406ms/ 8942ms
35
# cached, passing around function: 328ms/11248ms
36
# removing extra function: 354ms/ 8942ms
37
# cached, removing extra function: 275ms/11248ms
38
# no cache, real utf8: 363ms/11697ms
39
# cached, real utf8: 272ms/12827ms
40
# Really all we want is a real inventory
41
inv = self.make_kernel_like_inventory()
44
# We want a real tree with lots of file ids and sha strings, etc.
45
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
47
def test_write_kernel_like_inventory(self):
48
# Really all we want is a real inventory
49
inv = self.make_kernel_like_inventory()
52
f = open('kernel-like-inventory', 'wb')
54
# We want a real tree with lots of file ids and sha strings, etc.
55
self.time(xml5.serializer_v5.write_inventory, inv, f)
59
def test_write_to_string_cached_kernel_like_inventory(self):
60
inv = self.make_kernel_like_inventory()
63
# We want a real tree with lots of file ids and sha strings, etc.
64
xml5.serializer_v5.write_inventory_to_string(inv)
66
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
68
def test_read_from_string_kernel_like_inventory(self):
69
inv = self.make_kernel_like_inventory()
70
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
72
cache_utf8.clear_encoding_cache()
73
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
75
# TODO: make sure the final inventory is equal as a sanity check
77
def test_read_from_string_cached_kernel_like_inventory(self):
78
cache_utf8.clear_encoding_cache()
79
inv = self.make_kernel_like_inventory()
80
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
82
xml5.serializer_v5.read_inventory_from_string(as_str)
84
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
86
# TODO: make sure the final inventory is equal as a sanity check