diff options
author | Lars Wirzenius <liw@liw.fi> | 2015-07-17 19:51:40 +0300 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2015-07-17 21:59:45 +0300 |
commit | 1f1fdec37feafbdbb2fc9525440f404d93ee421f (patch) | |
tree | 45c5aa3c45c59b33a6c49c93295d9460da2405dc /serialise-speed | |
parent | dc4abd82271446ddcba6041e6c468ad85c3ed478 (diff) | |
download | obnam-1f1fdec37feafbdbb2fc9525440f404d93ee421f.tar.gz |
Add mmicrobenchmark for object serialisation
Diffstat (limited to 'serialise-speed')
-rwxr-xr-x | serialise-speed | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/serialise-speed b/serialise-speed new file mode 100755 index 00000000..d4530126 --- /dev/null +++ b/serialise-speed @@ -0,0 +1,57 @@ +#!/usr/bin/env python +# Copyright 2010-2015 Lars Wirzenius +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + +import sys +import time + +import cliapp + +import obnamlib + + +def measure(n, func): + start = time.clock() + for i in range(n): + func() + end = time.clock() + return end - start + + +class MicroBenchmark(cliapp.Application): + + def process_args(self, args): + n = int(args[0]) + obj = { + 'foo': 'bar', + 'big': 'x' * 1024**2, + 'dict': { + 'foo': 'yo', + 'long': ['x'] * 1024**2, + } + } + + encoded = obnamlib.serialise_object(obj) + + calibrate = measure(n, lambda: None) + encode = measure(n, lambda: obnamlib.serialise_object(obj)) + decode = measure(n, lambda: obnamlib.deserialise_object(encoded)) + print 'encode: %.1f/s' % (n/(encode - calibrate)) + print 'decode: %.1f/s' % (n/(decode - calibrate)) + + +if __name__ == '__main__': + MicroBenchmark().run() |