[Pkg-bazaar-commits] ./bzr/unstable r896: - add weave benchmark
Martin Pool
mbp at sourcefrog.net
Fri Apr 10 08:21:22 UTC 2009
------------------------------------------------------------
revno: 896
committer: Martin Pool <mbp at sourcefrog.net>
timestamp: Mon 2005-07-11 15:47:08 +1000
message:
- add weave benchmark
added:
tools/weavebench.py
-------------- next part --------------
=== added file 'tools/weavebench.py'
--- a/tools/weavebench.py 1970-01-01 00:00:00 +0000
+++ b/tools/weavebench.py 2005-07-11 05:47:08 +0000
@@ -0,0 +1,95 @@
+#! /usr/bin/python
+
+# Copyright (C) 2005 Canonical Ltd
+
+# 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 2 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, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+"""Weave algorithms benchmark"""
+
+import bzrlib.branch
+from bzrlib.weave import Weave
+from bzrlib.weavefile import write_weave
+from bzrlib.progress import ProgressBar
+from random import randrange, randint
+import tempfile
+import hotshot, hotshot.stats
+import sys
+
+WEAVE_NAME = "bench.weave"
+NUM_REVS = 10000
+
+def build():
+ pb = ProgressBar()
+
+ wf = Weave()
+ lines = []
+
+ parents = []
+ for i in xrange(NUM_REVS):
+ pb.update('building', i, NUM_REVS)
+
+ for j in range(randint(0, 4)):
+ o = randint(0, len(lines))
+ lines.insert(o, "new in version %i\n" % i)
+
+ for j in range(randint(0, 2)):
+ if lines:
+ del lines[randrange(0, len(lines))]
+
+ rev_id = wf.add(parents, lines)
+ parents = [rev_id]
+
+ write_weave(wf, file(WEAVE_NAME, 'wb'))
+
+
+# parents = set()
+# revno = 1
+# rev_history = b.revision_history()
+# for rev_id in rev_history:
+# pb.update('converting inventory', revno, len(rev_history))
+# inv_xml = b.inventory_store[rev_id].readlines()
+# weave_id = wf.add(parents, inv_xml)
+# parents = set([weave_id]) # always just one parent
+# revno += 1
+
+# pb.update('write weave', None, None)
+# write_weave(wf, file(WEAVE_NAME, 'wb'))
+
+ pb.clear()
+
+
+
+def profileit(fn):
+ prof_f = tempfile.NamedTemporaryFile()
+
+ prof = hotshot.Profile(prof_f.name)
+
+ prof.runcall(fn)
+ prof.close()
+
+ stats = hotshot.stats.load(prof_f.name)
+ #stats.strip_dirs()
+ stats.sort_stats('time')
+ ## XXX: Might like to write to stderr or the trace file instead but
+ ## print_stats seems hardcoded to stdout
+ stats.print_stats(20)
+
+
+if '-p' in sys.argv[1:]:
+ profileit(build)
+else:
+ build()
+
More information about the Pkg-bazaar-commits
mailing list