summaryrefslogtreecommitdiff
path: root/third_party/waf/wafadmin/3rdparty/ParallelDebug.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/waf/wafadmin/3rdparty/ParallelDebug.py')
-rw-r--r--third_party/waf/wafadmin/3rdparty/ParallelDebug.py297
1 files changed, 0 insertions, 297 deletions
diff --git a/third_party/waf/wafadmin/3rdparty/ParallelDebug.py b/third_party/waf/wafadmin/3rdparty/ParallelDebug.py
deleted file mode 100644
index 0ff580ece27..00000000000
--- a/third_party/waf/wafadmin/3rdparty/ParallelDebug.py
+++ /dev/null
@@ -1,297 +0,0 @@
-#! /usr/bin/env python
-# encoding: utf-8
-# Thomas Nagy, 2007-2010 (ita)
-
-"""
-debugging helpers for parallel compilation, outputs
-a svg file in the build directory
-"""
-
-import os, time, sys, threading
-try: from Queue import Queue
-except: from queue import Queue
-import Runner, Options, Utils, Task, Logs
-from Constants import *
-
-#import random
-#random.seed(100)
-
-def set_options(opt):
- opt.add_option('--dtitle', action='store', default='Parallel build representation for %r' % ' '.join(sys.argv),
- help='title for the svg diagram', dest='dtitle')
- opt.add_option('--dwidth', action='store', type='int', help='diagram width', default=1000, dest='dwidth')
- opt.add_option('--dtime', action='store', type='float', help='recording interval in seconds', default=0.009, dest='dtime')
- opt.add_option('--dband', action='store', type='int', help='band width', default=22, dest='dband')
- opt.add_option('--dmaxtime', action='store', type='float', help='maximum time, for drawing fair comparisons', default=0, dest='dmaxtime')
-
-# red #ff4d4d
-# green #4da74d
-# lila #a751ff
-
-color2code = {
- 'GREEN' : '#4da74d',
- 'YELLOW' : '#fefe44',
- 'PINK' : '#a751ff',
- 'RED' : '#cc1d1d',
- 'BLUE' : '#6687bb',
- 'CYAN' : '#34e2e2',
-
-}
-
-mp = {}
-info = [] # list of (text,color)
-
-def map_to_color(name):
- if name in mp:
- return mp[name]
- try:
- cls = Task.TaskBase.classes[name]
- except KeyError:
- return color2code['RED']
- if cls.color in mp:
- return mp[cls.color]
- if cls.color in color2code:
- return color2code[cls.color]
- return color2code['RED']
-
-def loop(self):
- while 1:
- tsk=Runner.TaskConsumer.ready.get()
- tsk.master.set_running(1, id(threading.currentThread()), tsk)
- Runner.process_task(tsk)
- tsk.master.set_running(-1, id(threading.currentThread()), tsk)
-Runner.TaskConsumer.loop = loop
-
-
-old_start = Runner.Parallel.start
-def do_start(self):
- print Options.options
- try:
- Options.options.dband
- except AttributeError:
- raise ValueError('use def options(opt): opt.load("parallel_debug")!')
-
- self.taskinfo = Queue()
- old_start(self)
- process_colors(self)
-Runner.Parallel.start = do_start
-
-def set_running(self, by, i, tsk):
- self.taskinfo.put( (i, id(tsk), time.time(), tsk.__class__.__name__, self.processed, self.count, by) )
-Runner.Parallel.set_running = set_running
-
-def name2class(name):
- return name.replace(' ', '_').replace('.', '_')
-
-def process_colors(producer):
- # first, cast the parameters
- tmp = []
- try:
- while True:
- tup = producer.taskinfo.get(False)
- tmp.append(list(tup))
- except:
- pass
-
- try:
- ini = float(tmp[0][2])
- except:
- return
-
- if not info:
- seen = []
- for x in tmp:
- name = x[3]
- if not name in seen:
- seen.append(name)
- else:
- continue
-
- info.append((name, map_to_color(name)))
- info.sort(key=lambda x: x[0])
-
- thread_count = 0
- acc = []
- for x in tmp:
- thread_count += x[6]
- acc.append("%d %d %f %r %d %d %d" % (x[0], x[1], x[2] - ini, x[3], x[4], x[5], thread_count))
- f = open('pdebug.dat', 'w')
- #Utils.write('\n'.join(acc))
- f.write('\n'.join(acc))
-
- tmp = [lst[:2] + [float(lst[2]) - ini] + lst[3:] for lst in tmp]
-
- st = {}
- for l in tmp:
- if not l[0] in st:
- st[l[0]] = len(st.keys())
- tmp = [ [st[lst[0]]] + lst[1:] for lst in tmp ]
- THREAD_AMOUNT = len(st.keys())
-
- st = {}
- for l in tmp:
- if not l[1] in st:
- st[l[1]] = len(st.keys())
- tmp = [ [lst[0]] + [st[lst[1]]] + lst[2:] for lst in tmp ]
-
-
- BAND = Options.options.dband
-
- seen = {}
- acc = []
- for x in range(len(tmp)):
- line = tmp[x]
- id = line[1]
-
- if id in seen:
- continue
- seen[id] = True
-
- begin = line[2]
- thread_id = line[0]
- for y in range(x + 1, len(tmp)):
- line = tmp[y]
- if line[1] == id:
- end = line[2]
- #print id, thread_id, begin, end
- #acc.append( ( 10*thread_id, 10*(thread_id+1), 10*begin, 10*end ) )
- acc.append( (BAND * begin, BAND*thread_id, BAND*end - BAND*begin, BAND, line[3]) )
- break
-
- if Options.options.dmaxtime < 0.1:
- gwidth = 1
- for x in tmp:
- m = BAND * x[2]
- if m > gwidth:
- gwidth = m
- else:
- gwidth = BAND * Options.options.dmaxtime
-
- ratio = float(Options.options.dwidth) / gwidth
- gwidth = Options.options.dwidth
-
- gheight = BAND * (THREAD_AMOUNT + len(info) + 1.5)
-
- out = []
-
- out.append("""<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
-<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\"
-\"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">
-<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.0\"
- x=\"%r\" y=\"%r\" width=\"%r\" height=\"%r\"
- id=\"svg602\" xml:space=\"preserve\">
-
-<style type='text/css' media='screen'>
- g.over rect { stroke:#FF0000; fill-opacity:0.4 }
-</style>
-
-<script type='text/javascript'><![CDATA[
- var svg = document.getElementsByTagName('svg')[0];
- var svgNS = svg.getAttribute('xmlns');
- svg.addEventListener('mouseover',function(e){
- var g = e.target.parentNode;
- var x = document.getElementById('r_'+g.id);
- if (x) {
- g.setAttribute('class', g.getAttribute('class')+' over');
- x.setAttribute('class', x.getAttribute('class')+' over');
- showInfo(e, g.id);
- }
- },false);
- svg.addEventListener('mouseout',function(e){
- var g = e.target.parentNode;
- var x = document.getElementById('r_'+g.id);
- if (x) {
- g.setAttribute('class',g.getAttribute('class').replace(' over',''));
- x.setAttribute('class',x.getAttribute('class').replace(' over',''));
- hideInfo(e);
- }
- },false);
-
-function showInfo(evt, txt) {
- tooltip = document.getElementById('tooltip');
-
- var t = document.getElementById('tooltiptext');
- t.firstChild.data = txt;
-
- var x = evt.clientX+10;
- if (x > 200) { x -= t.getComputedTextLength() + 16; }
- var y = evt.clientY+30;
- tooltip.setAttribute("transform", "translate(" + x + "," + y + ")");
- tooltip.setAttributeNS(null,"visibility","visible");
-
- var r = document.getElementById('tooltiprect');
- r.setAttribute('width', t.getComputedTextLength()+6)
-}
-
-
-function hideInfo(evt) {
- tooltip = document.getElementById('tooltip');
- tooltip.setAttributeNS(null,"visibility","hidden");
-}
-
-]]></script>
-
-<!-- inkscape requires a big rectangle or it will not export the pictures properly -->
-<rect
- x='%r' y='%r'
- width='%r' height='%r' z-index='10'
- style=\"font-size:10;fill:#ffffff;fill-opacity:0.01;fill-rule:evenodd;stroke:#ffffff;\"
- />\n
-
-""" % (0, 0, gwidth + 4, gheight + 4, 0, 0, gwidth + 4, gheight + 4))
-
- # main title
- if Options.options.dtitle:
- out.append("""<text x="%d" y="%d" style="font-size:15px; text-anchor:middle; font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans">%s</text>
-""" % (gwidth/2, gheight - 5, Options.options.dtitle))
-
- # the rectangles
- groups = {}
- for (x, y, w, h, clsname) in acc:
- try:
- groups[clsname].append((x, y, w, h))
- except:
- groups[clsname] = [(x, y, w, h)]
-
- for cls in groups:
-
- out.append("<g id='%s'>\n" % name2class(cls))
-
- for (x, y, w, h) in groups[cls]:
- out.append(""" <rect
- x='%r' y='%r'
- width='%r' height='%r' z-index='11'
- style=\"font-size:10;fill:%s;fill-rule:evenodd;stroke:#000000;stroke-width:0.2px;\"
- />\n""" % (2 + x*ratio, 2 + y, w*ratio, h, map_to_color(cls)))
-
- out.append("</g>\n")
-
- # output the caption
- cnt = THREAD_AMOUNT
-
- for (text, color) in info:
- # caption box
- b = BAND/2
- out.append("""<g id='r_%s'><rect
- x='%r' y='%r'
- width='%r' height='%r'
- style=\"font-size:10;fill:%s;fill-rule:evenodd;stroke:#000000;stroke-width:0.2px;\"
- />\n""" % (name2class(text), 2 + BAND, 5 + (cnt + 0.5) * BAND, b, b, color))
-
- # caption text
- out.append("""<text
- style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
- x="%r" y="%d">%s</text></g>\n""" % (2 + 2 * BAND, 5 + (cnt + 0.5) * BAND + 10, text))
- cnt += 1
-
- out.append("""
-<g transform="translate(0,0)" visibility="hidden" id="tooltip">
- <rect id="tooltiprect" y="-15" x="-3" width="1" height="20" style="stroke:black;fill:#edefc2;stroke-width:1"/>
- <text id="tooltiptext" style="font-family:Arial; font-size:12;fill:black;"> </text>
-</g>""")
-
- out.append("\n</svg>")
-
- #node = producer.bld.path.make_node('pdebug.svg')
- f = open('pdebug.svg', 'w')
- f.write("".join(out))