[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