private void SampleFunction(EventFrame eventFrame, CallStackReason callstackFilter, EventNode node) { List <Callstack> callstacks = new List <Callstack>(); FrameGroup group = eventFrame.Group; EventDescription desc = node.Entry.Description; callstacks = group.GetCallstacks(desc); if (callstacks.Count > 0) { SamplingFrame frame = new SamplingFrame(callstacks, group); Profiler.TimeLine.FocusFrameEventArgs args = new Profiler.TimeLine.FocusFrameEventArgs(Profiler.TimeLine.FocusFrameEvent, frame); RaiseEvent(args); } }
private void SampleFunction(EventFrame eventFrame, EventNode node, bool single) { List <Callstack> callstacks = new List <Callstack>(); FrameGroup group = eventFrame.Group; if (single) { Utils.ForEachInsideIntervalStrict(group.Threads[eventFrame.Header.ThreadIndex].Callstacks, node.Entry, callstack => callstacks.Add(callstack)); } else { EventDescription desc = node.Entry.Description; foreach (ThreadData thread in group.Threads) { HashSet <Callstack> accumulator = new HashSet <Callstack>(); foreach (EventFrame currentFrame in thread.Events) { List <Entry> entries = null; if (currentFrame.ShortBoard.TryGetValue(desc, out entries)) { foreach (Entry entry in entries) { Utils.ForEachInsideIntervalStrict(thread.Callstacks, entry, c => accumulator.Add(c)); } } } callstacks.AddRange(accumulator); } } if (callstacks.Count > 0) { SamplingFrame frame = new SamplingFrame(callstacks); Profiler.TimeLine.FocusFrameEventArgs args = new Profiler.TimeLine.FocusFrameEventArgs(Profiler.TimeLine.FocusFrameEvent, frame); RaiseEvent(args); } }