summaryrefslogtreecommitdiff
path: root/serialise-speed
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2015-07-17 19:51:40 +0300
committerLars Wirzenius <liw@liw.fi>2015-07-17 21:59:45 +0300
commit1f1fdec37feafbdbb2fc9525440f404d93ee421f (patch)
tree45c5aa3c45c59b33a6c49c93295d9460da2405dc /serialise-speed
parentdc4abd82271446ddcba6041e6c468ad85c3ed478 (diff)
downloadobnam-1f1fdec37feafbdbb2fc9525440f404d93ee421f.tar.gz
Add mmicrobenchmark for object serialisation
Diffstat (limited to 'serialise-speed')
-rwxr-xr-xserialise-speed57
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()