Lines Matching refs:self
46 def __init__(self, name = ''): argument
48 self.nname = "L_" + name.replace(".", "_").replace("-", "_")
49 self.nicename = name
50 self.outgoing = {}
51 self.incoming = {}
52 …self.msg_stat = {'o.num':0, 'o.first':0.0, 'o.last':0.0, 'o.window':deque(), 'o.avg':0, 'o.peak':0…
54 self.pidset = {}
55 self.scalefactor = 100.0
57 sys.stderr.write(' New node: "{}"{}\n'.format(self.nname, ' '*50))
59 def add_outgoing_edge(self, edge, time): argument
60 self.outgoing[edge.ename()] = [edge, time]
62 def add_incoming_edge(self, edge, time): argument
63 self.incoming[edge.ename()] = [edge, time]
65 def addpid(self, pid, time): argument
66 if not pid in self.pidset:
67 self.pidset[pid] = [time, 0]
68 self.pidset[pid][1] = time
70 def incoming_msg(self, size, time_us): argument
73 num = self.msg_stat['i.num'] + 1
74 self.msg_stat['i.num'] = num
76 if self.msg_stat['i.first'] == 0.0:
77 self.msg_stat['i.first'] = time_us
78 self.msg_stat['i.last'] = time_us
80 self.msg_stat['i.last'] = time_us
82 avg = (num * self.scalefactor) / (time_us - self.msg_stat['i.first'])
83 self.msg_stat['i.avg'] = avg
85 self.msg_stat['i.window'].append(time_us)
86 if len(self.msg_stat['i.window']) > g_rolling_window:
87 self.msg_stat['i.window'].popleft()
88 n = len(self.msg_stat['i.window'])
89 ravg = float(len(self.msg_stat['i.window']) * self.scalefactor) / \
90 (self.msg_stat['i.window'][-1] - self.msg_stat['i.window'][0])
91 if ravg > self.msg_stat['i.peak']:
92 self.msg_stat['i.peak'] = ravg
94 def outgoing_msg(self, size, time_us): argument
97 num = self.msg_stat['o.num'] + 1
98 self.msg_stat['o.num'] = num
100 if self.msg_stat['o.first'] == 0.0:
101 self.msg_stat['o.first'] = time_us
102 self.msg_stat['o.last'] = time_us
104 self.msg_stat['o.last'] = time_us
106 avg = (num * self.scalefactor) / (time_us - self.msg_stat['o.first'])
107 self.msg_stat['o.avg'] = avg
109 self.msg_stat['o.window'].append(time_us)
110 if len(self.msg_stat['o.window']) > g_rolling_window:
111 self.msg_stat['o.window'].popleft()
112 n = len(self.msg_stat['o.window'])
113 ravg = float(len(self.msg_stat['o.window']) * self.scalefactor) / \
114 (self.msg_stat['o.window'][-1] - self.msg_stat['o.window'][0])
115 if ravg > self.msg_stat['o.peak']:
116 self.msg_stat['o.peak'] = ravg
118 def nmsgs(self): argument
119 return self.msg_stat['o.num'], self.msg_stat['i.num']
121 def recycled(self): argument
122 return len(self.pidset)
124 def label(self, timebase = 1000000.0): argument
125 oavg = float(self.msg_stat['o.avg']) / self.scalefactor
126 opeak = float(self.msg_stat['o.peak']) / self.scalefactor
127 oactive = self.msg_stat['o.last'] - self.msg_stat['o.first']
128 iavg = float(self.msg_stat['i.avg']) / self.scalefactor
129 ipeak = float(self.msg_stat['i.peak']) / self.scalefactor
130 iactive = self.msg_stat['i.last'] - self.msg_stat['i.first']
139 .format(self.nicename, \
140 len(self.outgoing), self.msg_stat['o.num'], oactive, oavg, opeak, \
141 len(self.incoming), self.msg_stat['i.num'], iactive, iavg, ipeak, \
142 len(self.pidset))
181 def __init__(self, src = IPCNode(), dst = IPCNode(), data = '0', flags = '0', time = 0.0): argument
182 self.src = src
183 self.dst = dst
184 self.flags = 0
185 self.dweight = 0
186 self.pweight = 0
187 self.weight = 0
188 self._data = { 'std':0, 'ool':0, 'vcpy':0, 'iokit':0 }
189 self._dtype = { 'std':0, 'xpc':0, 'iokit':0, 'std.reply':0, 'xpc.reply':0, 'iokit.reply':0 }
190 self._msgs = { 'std':0, 'ool':0, 'vcpy':0, 'iokit':0 }
191 self._mtype = { 'std':0, 'xpc':0, 'iokit':0, 'std.reply':0, 'xpc.reply':0, 'iokit.reply':0 }
192 self.ports = 0
193 self.task64 = False
194 self.task32 = False
195 self.src.add_outgoing_edge(self, time)
196 self.dst.add_incoming_edge(self, time)
197 self.addmsg(data, flags, time)
199 def ename(self): argument
200 return self.src.nname + " -> " + self.dst.nname
202 def msgdata(self): argument
203 return self._data, self._dtype
205 def data(self, flavor = None): argument
207 return sum(self._data.itervalues())
208 elif flavor in self._data:
209 return self._data[flavor]
213 def dtype(self, type): argument
215 return sum(self._dtype.itervalues())
216 elif type in self._dtype:
217 return self._dtype[type]
221 def msgs(self, flavor = None): argument
223 return sum(self._msgs.itervalues())
224 elif flavor in self._msgs:
225 return self._msgs[flavor]
229 def mtype(self, type): argument
231 return sum(self._mtype.itervalues())
232 elif type in self._mtype:
233 return self._mtype[type]
237 def selfedge(self): argument
238 if self.src.nname == self.dst.nname:
242 def addmsg(self, data_hex_str, flags_str, time): argument
245 self.flags |= f
246 df = {f:0 for f in self.DFLAVORS}
247 dt = {t:0 for t in self.DTYPES}
248 if not f & self.F_TRACED:
250 self.weight += 1
251 if f & self.F_SND64:
252 self.task64 = True
254 self.task32 = True
255 if not f & self.F_COMPLEX:
256 self.dweight += 1
258 if f & self.F_IOKIT:
261 self._data['iokit'] += df['iokit']
262 self._msgs['iokit'] += 1
264 self._data['std'] += df['std']
265 self._msgs['std'] += 1
266 elif f & self.F_OOLMEM:
267 self.dweight += 1
269 if f & self.F_IOKIT:
272 self._data['iokit'] += df['iokit']
273 self._msgs['iokit'] += 1
274 elif f & self.F_VCPY:
277 self._data['vcpy'] += df['vcpy']
278 self._msgs['vcpy'] += 1
280 self._data['ool'] += df['ool']
281 self._msgs['ool'] += 1
283 if f & self.F_COMPLEX:
284 nports = f & self.F_PORTS_MASK
286 self.pweight += 1
287 self.ports += nports
289 if f & self.F_DST_SONCE:
290 if f & self.F_IOKIT:
292 self._dtype['iokit.reply'] += dsize
293 self._mtype['iokit.reply'] += 1
294 elif f & (self.F_DST_NDFLTQ | self.F_SRC_NDFLTQ):
296 self._dtype['xpc.reply'] += dsize
297 self._mtype['xpc.reply'] += 1
300 self._dtype['std.reply'] += dsize
301 self._mtype['std.reply'] += 1
302 elif f & self.F_IOKIT:
304 self._dtype['iokit'] += dsize
305 self._mtype['iokit'] += 1
306 elif f & (self.F_DST_NDFLTQ | self.F_SRC_NDFLTQ):
308 self._dtype['xpc'] += dsize
309 self._mtype['xpc'] += 1
312 self._dtype['std'] += dsize
313 self._mtype['std'] += 1
314 self.src.outgoing_msg(dsize, time)
315 self.dst.incoming_msg(dsize, time)
317 …sys.stderr.write(' {}->{} ({}/{}){}\r'.format(self.src.nname, self.dst.nname, df['ool'], df['std']…
320 def avgmsg(self): argument
321 avgsz = self.data() / self.dweight
322 msgs_with_data = self.dweight / self.weight
323 avgports = self.ports / self.pweight
324 msgs_with_ports = self.pweight / self.weight
331 def __init__(self, edge, nm): argument
332 … self.msg = "Edge {} (w:{}) didn't match incoming name {}!".format(edge.ename(), edge.weight, nm)
337 def __init__(self, name = '', timebase = 0.0): argument
340 self.name = 'ipcgraph'
342 self.name = name
344 sys.stderr.write('Creating new IPCGraph named {}...\n'.format(self.name))
345 self.nodes = {}
346 self.edges = {}
347 self.msgs = defaultdict(lambda: {f:0 for f in IPCEdge.DFLAVORS})
348 self.msgtypes = defaultdict(lambda: {t:0 for t in IPCEdge.DTYPES})
349 self.nmsgs = 0
350 self.totals = {}
351 self.maxdweight = 0
353 self.totals['n'+f] = 0
354 self.totals['D'+f] = 0
356 self.timebase = timebase
358 self.timebase = 0.0
360 def __iter__(self): argument
363 def edgename(self, src, dst): argument
368 def addmsg(self, src_str, src_pid, dst_str, dst_pid, data_hex_str, flags_str, time): argument
371 for k, v in self.nodes.iteritems():
380 self.nodes[src_str] = src;
383 self.nodes[dst_str] = dst
387 nm = self.edgename(src, dst)
390 e = self.edges.get(nm)
398 self.edges[nm] = e
400 if self.maxdweight < e.dweight:
401 self.maxdweight = e.dweight
404 self.msgs[0]['std'] += 1
405 self.msgtypes[0]['std'] += 1
406 if not 'enames' in self.msgs[0]:
407 self.msgs[0]['enames'] = [ nm ]
408 elif not nm in self.msgs[0]['enames']:
409 self.msgs[0]['enames'].append(nm)
413 self.msgs[d][k] += 1
414 self.totals['n'+k] += 1
415 self.totals['D'+k] += d
416 if not 'enames' in self.msgs[d]:
417 self.msgs[d]['enames'] = [ nm ]
418 elif not nm in self.msgs[d]['enames']:
419 self.msgs[d]['enames'].append(nm)
422 self.msgtypes[d][k] += 1
423 self.nmsgs += 1
424 if self.nmsgs % 1024 == 0:
425 sys.stderr.write(" {:d}...\r".format(self.nmsgs));
427 def print_dot_node(self, ofile, node): argument
442 def print_dot_edge(self, nm, edge, ofile): argument
484 def print_follow_graph(self, ofile, follow, visited = None): argument
485 ofile.write("digraph {:s} {{\n".format(self.name))
495 for nm, e in self.edges.iteritems():
511 for k, v in self.nodes.iteritems():
513 self.print_dot_node(ofile, v)
515 self.print_dot_edge(nm, edge, ofile)
518 def print_graph(self, ofile, follow): argument
519 ofile.write("digraph {:s} {{\n".format(self.name))
521 for k, v in self.nodes.iteritems():
522 self.print_dot_node(ofile, v)
523 for nm, edge in self.edges.iteritems():
524 self.print_dot_edge(nm, edge, ofile)
527 def print_nodegrid(self, ofile, type='msg', dfilter=None): argument
540 ofile.write(' ,' + ','.join(self.nodes.keys()) + '\n')
541 for snm, src in self.nodes.iteritems():
543 for dnm, dst in self.nodes.iteritems():
544 enm = self.edgename(src, dst)
545 e = self.edges.get(enm)
557 def print_datasummary(self, ofile): argument
561 for k, v in self.edges.iteritems():
568 tdata += self.totals['D'+f]
569 tmsgs += self.totals['n'+f]
571 tmsgs += self.msgs[0]['std']
572 ofile.write("Nodes:{:d}\nEdges:{:d}\n".format(len(self.nodes),len(self.edges)))
576 ofile.write("{:s},{:d},{:d}\n".format(f, self.totals['n'+f], self.totals['D'+f]))
581 def print_freqdata(self, ofile, gnuplot = False): argument
602 for k, v in sorted(self.msgs.iteritems()):
617 if self.totals['n'+f] > 0:
618 cdf[f] = int(100 * totalmsgs[f] / self.totals['n'+f])
619 if self.totals['D'+f] > 0:
620 dcdf[f] = int(100 * Tdata[f] / self.totals['D'+f])
638 if self.totals['D'+f] > maxdata:
639 maxdata = self.totals['D'+f]