func (d *dominators) calcSize(p *Process) {
	d.size = make([]int64, len(d.idom))
	type workItem struct {
		v    vName
		mode dfsMode
	}
	work := []workItem{{pseudoRoot, down}}

	for len(work) > 0 {
		item := &work[len(work)-1]

		kids := d.redge[d.ridx[item.v]:d.ridx[item.v+1]]
		if item.mode == down && len(kids) != 0 {
			item.mode = up
			for _, w := range kids {
				if w == 0 {
					// bogus self-edge. Ignore.
					continue
				}
				work = append(work, workItem{w, down})
			}
			continue
		}

		work = work[:len(work)-1]

		root, obj := d.findVertexByName(item.v)
		var size int64
		switch {
		case item.v == pseudoRoot:
			break
		case root != nil:
			size += root.Type.Size
		default:
			size += p.Size(obj)
		}
		for _, w := range kids {
			size += d.size[w]
		}
		d.size[item.v] = size
	}
}
func (d *dominators) calcSize(p *Process) {
	d.size = make([]int64, len(d.idom))
	type workItem struct {
		v    vName
		mode dfsMode
	}
	work := []workItem{{pseudoRoot, down}}

	for len(work) > 0 {
		item := &work[len(work)-1]

		kids := d.redge[d.ridx[item.v]:d.ridx[item.v+1]]
		if item.mode == down && len(kids) != 0 {
			item.mode = up
			for _, w := range kids {
				if w == 0 {
					
					continue
				}
				work = append(work, workItem{w, down})
			}
			continue
		}

		work = work[:len(work)-1]

		root, obj := d.findVertexByName(item.v)
		var size int64
		switch {
		case item.v == pseudoRoot:
			break
		case root != nil:
			size += root.Type.Size
		default:
			size += p.Size(obj)
		}
		for _, w := range kids {
			size += d.size[w]
		}
		d.size[item.v] = size
	}
}
func ( d * dominators ) calcSize ( p * Process ) { d . size = make ( [ ] int64 , len ( d . idom ) ) type workItem struct { v vName mode dfsMode } work := [ ] workItem { { pseudoRoot , down } } for len ( work ) > 0 { item := & work [ len ( work ) - 1 ] kids := d . redge [ d . ridx [ item . v ] : d . ridx [ item . v + 1 ] ] if item . mode == down && len ( kids ) != 0 { item . mode = up for _ , w := range kids { if w == 0 { // bogus self-edge. Ignore. continue } work = append ( work , workItem { w , down } ) } continue } work = work [ : len ( work ) - 1 ] root , obj := d . findVertexByName ( item . v ) var size int64 switch { case item . v == pseudoRoot : break case root != nil : size += root . Type . Size default : size += p . Size ( obj ) } for _ , w := range kids { size += d . size [ w ] } d . size [ item . v ] = size } }
// calcSize calculates the total retained size for each vertex.
calcSize calculates the total retained size for each vertex .