2052.3.2
by John Arbash Meinel
Change Copyright .. by Canonical to Copyright ... Canonical |
1 |
# Copyright (C) 2006 Canonical Ltd
|
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
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.
|
|
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
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
|
|
15 |
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
16 |
||
17 |
"""Tests for bzr xml serialization performance."""
|
|
18 |
||
19 |
from bzrlib import ( |
|
1934.1.10
by John Arbash Meinel
Using real utf8 and cache_utf8 has similar performance, 272ms, and 363ms |
20 |
cache_utf8, |
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
21 |
xml5, |
22 |
)
|
|
23 |
from bzrlib.benchmarks import Benchmark |
|
24 |
||
25 |
||
26 |
class BenchXMLSerializer(Benchmark): |
|
2399.1.7
by John Arbash Meinel
Cleanup bzrlib/benchmarks/* so that everything at least has a valid doc string. |
27 |
"""Benchmarks for serializing to/from XML."""
|
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
28 |
|
1934.1.13
by John Arbash Meinel
Correct function names (write, not serialize) |
29 |
def test_write_to_string_kernel_like_inventory(self): |
1934.1.4
by John Arbash Meinel
rewrite escaper to use xml numerical entities, rather than using encode('utf8') |
30 |
# On jam's machine, ElementTree serializer took: 2161ms/13487ms
|
31 |
# with Robert's serializer: 631ms/10770ms
|
|
32 |
# with Entity escaper: 487ms/11636ms
|
|
1934.1.5
by John Arbash Meinel
Cache the entity escaping cuts us down to 450ms |
33 |
# caching Entity escaper, empty cache: 448ms/ 9489ms
|
1934.1.7
by John Arbash Meinel
Comment why we do caching the way we do |
34 |
# caching Entity escaper, full cache: 375ms/ 9489ms
|
1934.1.8
by John Arbash Meinel
Passing around the append function rather than the list shaves off another 10%, down to 400ms |
35 |
# passing around function: 406ms/ 8942ms
|
36 |
# cached, passing around function: 328ms/11248ms
|
|
1934.1.9
by John Arbash Meinel
Caching the trailing " and directly appending, down another 50ms, 275ms cached, 354ms uncached |
37 |
# removing extra function: 354ms/ 8942ms
|
38 |
# cached, removing extra function: 275ms/11248ms
|
|
1934.1.10
by John Arbash Meinel
Using real utf8 and cache_utf8 has similar performance, 272ms, and 363ms |
39 |
# no cache, real utf8: 363ms/11697ms
|
40 |
# cached, real utf8: 272ms/12827ms
|
|
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
41 |
# Really all we want is a real inventory
|
1934.1.16
by John Arbash Meinel
Add a cache for a kernel-like inventory |
42 |
inv = self.make_kernel_like_inventory() |
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
43 |
|
1934.1.5
by John Arbash Meinel
Cache the entity escaping cuts us down to 450ms |
44 |
xml5._clear_cache() |
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
45 |
# We want a real tree with lots of file ids and sha strings, etc.
|
1934.1.16
by John Arbash Meinel
Add a cache for a kernel-like inventory |
46 |
self.time(xml5.serializer_v5.write_inventory_to_string, inv) |
1934.1.1
by John Arbash Meinel
Write a benchmark for the XML serializer |
47 |
|
1934.1.13
by John Arbash Meinel
Correct function names (write, not serialize) |
48 |
def test_write_kernel_like_inventory(self): |
1934.1.2
by John Arbash Meinel
Make benchmark include both writing to a real file, and to a string |
49 |
# Really all we want is a real inventory
|
1934.1.16
by John Arbash Meinel
Add a cache for a kernel-like inventory |
50 |
inv = self.make_kernel_like_inventory() |
1934.1.2
by John Arbash Meinel
Make benchmark include both writing to a real file, and to a string |
51 |
|
1934.1.5
by John Arbash Meinel
Cache the entity escaping cuts us down to 450ms |
52 |
xml5._clear_cache() |
1934.1.2
by John Arbash Meinel
Make benchmark include both writing to a real file, and to a string |
53 |
f = open('kernel-like-inventory', 'wb') |
54 |
try: |
|
55 |
# We want a real tree with lots of file ids and sha strings, etc.
|
|
1934.1.16
by John Arbash Meinel
Add a cache for a kernel-like inventory |
56 |
self.time(xml5.serializer_v5.write_inventory, inv, f) |
1934.1.2
by John Arbash Meinel
Make benchmark include both writing to a real file, and to a string |
57 |
finally: |
58 |
f.close() |
|
59 |
||
1934.1.13
by John Arbash Meinel
Correct function names (write, not serialize) |
60 |
def test_write_to_string_cached_kernel_like_inventory(self): |
1934.1.16
by John Arbash Meinel
Add a cache for a kernel-like inventory |
61 |
inv = self.make_kernel_like_inventory() |
1934.1.6
by John Arbash Meinel
With a full cache the time is down to 381 ms |
62 |
|
63 |
xml5._clear_cache() |
|
64 |
# We want a real tree with lots of file ids and sha strings, etc.
|
|
65 |
xml5.serializer_v5.write_inventory_to_string(inv) |
|
66 |
||
67 |
self.time(xml5.serializer_v5.write_inventory_to_string, inv) |
|
68 |
||
1934.1.17
by John Arbash Meinel
Add a benchmark for read inventory speed |
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) |
|
72 |
||
1934.1.18
by John Arbash Meinel
Caching revision_ids costs us a little (512 vs 475), but caching file-ids costs us a lot (780 vs 512), so disabling caching of file ids for now |
73 |
cache_utf8.clear_encoding_cache() |
1934.1.17
by John Arbash Meinel
Add a benchmark for read inventory speed |
74 |
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string, |
75 |
as_str) |
|
76 |
# TODO: make sure the final inventory is equal as a sanity check
|
|
77 |
||
1934.1.18
by John Arbash Meinel
Caching revision_ids costs us a little (512 vs 475), but caching file-ids costs us a lot (780 vs 512), so disabling caching of file ids for now |
78 |
def test_read_from_string_cached_kernel_like_inventory(self): |
79 |
cache_utf8.clear_encoding_cache() |
|
1934.1.17
by John Arbash Meinel
Add a benchmark for read inventory speed |
80 |
inv = self.make_kernel_like_inventory() |
81 |
as_str = xml5.serializer_v5.write_inventory_to_string(inv) |
|
82 |
||
1934.1.18
by John Arbash Meinel
Caching revision_ids costs us a little (512 vs 475), but caching file-ids costs us a lot (780 vs 512), so disabling caching of file ids for now |
83 |
xml5.serializer_v5.read_inventory_from_string(as_str) |
84 |
||
1934.1.17
by John Arbash Meinel
Add a benchmark for read inventory speed |
85 |
read_inv = self.time(xml5.serializer_v5.read_inventory_from_string, |
86 |
as_str) |
|
87 |
# TODO: make sure the final inventory is equal as a sanity check
|