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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""Tests for bzr xml serialization performance."""
23
from bzrlib.benchmarks import Benchmark
26
class BenchXMLSerializer(Benchmark):
27
"""Benchmarks for serializing to/from XML."""
29
def test_write_to_string_kernel_like_inventory(self):
30
# On jam's machine, ElementTree serializer took: 2161ms/13487ms
31
# with Robert's serializer: 631ms/10770ms
32
# with Entity escaper: 487ms/11636ms
33
# caching Entity escaper, empty cache: 448ms/ 9489ms
34
# caching Entity escaper, full cache: 375ms/ 9489ms
35
# passing around function: 406ms/ 8942ms
36
# cached, passing around function: 328ms/11248ms
37
# removing extra function: 354ms/ 8942ms
38
# cached, removing extra function: 275ms/11248ms
39
# no cache, real utf8: 363ms/11697ms
40
# cached, real utf8: 272ms/12827ms
41
# Really all we want is a real inventory
42
inv = self.make_kernel_like_inventory()
45
# We want a real tree with lots of file ids and sha strings, etc.
46
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
48
def test_write_kernel_like_inventory(self):
49
# Really all we want is a real inventory
50
inv = self.make_kernel_like_inventory()
53
f = open('kernel-like-inventory', 'wb')
55
# We want a real tree with lots of file ids and sha strings, etc.
56
self.time(xml5.serializer_v5.write_inventory, inv, f)
60
def test_write_to_string_cached_kernel_like_inventory(self):
61
inv = self.make_kernel_like_inventory()
64
# We want a real tree with lots of file ids and sha strings, etc.
65
xml5.serializer_v5.write_inventory_to_string(inv)
67
self.time(xml5.serializer_v5.write_inventory_to_string, inv)
69
def test_read_from_string_kernel_like_inventory(self):
70
inv = self.make_kernel_like_inventory()
71
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
73
cache_utf8.clear_encoding_cache()
74
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
76
# TODO: make sure the final inventory is equal as a sanity check
78
def test_read_from_string_cached_kernel_like_inventory(self):
79
cache_utf8.clear_encoding_cache()
80
inv = self.make_kernel_like_inventory()
81
as_str = xml5.serializer_v5.write_inventory_to_string(inv)
83
xml5.serializer_v5.read_inventory_from_string(as_str)
85
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string,
87
# TODO: make sure the final inventory is equal as a sanity check