Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
if isinstance(node, pstatsloader.PStatRow):
d['calls'] = node.calls
d['recursive'] = node.recursive
d['local'] = node.local
d['localPer'] = node.localPer
d['cumulative'] = node.cummulative
d['cumulativePer'] = node.cummulativePer
d['line_number'] = node.lineno
recursive_seen.add(node)
if parent:
# figure out the size of this node. This is an arbitrary value
# but it's important that the child size is no larger
# than the parent size.
if isinstance(parent, pstatsloader.PStatGroup):
if parent.cummulative:
d['size'] = node.cummulative / parent.cummulative * parent_size
else:
# this is a catch-all when it's not possible
# to calculate a size. hopefully this doesn't come
# up too often.
d['size'] = 0
else:
d['size'] = parent.child_cumulative_time(node) * parent_size
else:
# default size for the root node
d['size'] = 1000
if node.children:
d['children'] = []
for child in node.children:
threaded programs. Should be tracing back each row to root, breaking
cycles by sorting on cummulative time, and then collecting the traced
roots (or, if they are all on the same root, use that).
"""
maxes = sorted( rows.values(), key = lambda x: x.cummulative )
if not maxes:
raise RuntimeError( """Null results!""" )
root = maxes[-1]
roots = [root]
for key,value in rows.items():
if not value.parents:
log.debug( 'Found node root: %s', value )
if value not in roots:
roots.append( value )
if len(roots) > 1:
root = PStatGroup(
directory='*',
filename='*',
name=_(""),
children= roots,
)
root.finalize()
self.rows[ root.key ] = root
return root
def load_location( self ):
self.cummulativePer = self.cummulative/float(self.recursive)
else:
self.recursive = 0
if local_children:
for field in ('local','calls'):
value = sum([ getattr( child, field, 0 ) for child in children] )
setattr( self, field, value )
if self.calls:
self.localPer = self.local / self.calls
else:
self.local = 0
self.calls = 0
self.localPer = 0
class PStatLocation( PStatGroup ):
"""A row that represents a hierarchic structure other than call-patterns
This is used to create a file-based hierarchy for the views
Children with the name are our "empty" space,
our totals are otherwise just the sum of our children.
"""
LOCAL_ONLY = True
def __init__( self, directory, filename, tree=TREE_FILES):
super( PStatLocation, self ).__init__( directory=directory, filename=filename, name='package', tree=tree )
def filter_children( self ):
"""Filter our children into regular and local children sets"""
real_children = []
for child in self.children:
if child.name == '':
self.local_children.append( child )
def calculate_totals( self, children, local_children=None ):
"""Calculate our cummulative totals from children and/or local children"""
for field,local_field in (('recursive','calls'),('cummulative','local')):
values = []
for child in children:
if isinstance( child, PStatGroup ) or not self.LOCAL_ONLY:
values.append( getattr( child, field, 0 ) )
elif isinstance( child, PStatRow ) and self.LOCAL_ONLY:
values.append( getattr( child, local_field, 0 ) )
value = sum( values )
setattr( self, field, value )
if self.recursive:
self.cummulativePer = self.cummulative/float(self.recursive)
else:
self.recursive = 0
if local_children:
for field in ('local','calls'):
value = sum([ getattr( child, field, 0 ) for child in children] )
setattr( self, field, value )
if self.calls:
self.localPer = self.local / self.calls
else: