// to trace.ResourceNone (the global scope).
type globalRangeGenerator struct {
ranges map[string]activeRange
- seenSync bool
+ seenSync int
}
// Sync notifies the generator of an EventSync event.
func (g *globalRangeGenerator) Sync() {
- g.seenSync = true
+ g.seenSync++
}
// GlobalRange implements a handler for EventRange* events whose Scope.Kind is ResourceNone.
case trace.EventRangeBegin:
g.ranges[r.Name] = activeRange{ev.Time(), ev.Stack()}
case trace.EventRangeActive:
- // If we've seen a Sync event, then Active events are always redundant.
- if !g.seenSync {
+ // If we've seen at least 2 Sync events (indicating that we're in at least the second
+ // generation), then Active events are always redundant.
+ if g.seenSync < 2 {
// Otherwise, they extend back to the start of the trace.
g.ranges[r.Name] = activeRange{ctx.startTime, ev.Stack()}
}
// ResourceProc.
type procRangeGenerator struct {
ranges map[trace.Range]activeRange
- seenSync bool
+ seenSync int
}
// Sync notifies the generator of an EventSync event.
func (g *procRangeGenerator) Sync() {
- g.seenSync = true
+ g.seenSync++
}
// ProcRange implements a handler for EventRange* events whose Scope.Kind is ResourceProc.
case trace.EventRangeBegin:
g.ranges[r] = activeRange{ev.Time(), ev.Stack()}
case trace.EventRangeActive:
- // If we've seen a Sync event, then Active events are always redundant.
- if !g.seenSync {
+ // If we've seen at least 2 Sync events (indicating that we're in at least the second
+ // generation), then Active events are always redundant.
+ if g.seenSync < 2 {
// Otherwise, they extend back to the start of the trace.
g.ranges[r] = activeRange{ctx.startTime, ev.Stack()}
}