public void CloseMetricCanBeZeroIfItDoesNotCreateAProfileEventThatStartsAndEndsAtTheSameMoment() { const double metric = 0.1; var samples = new[] { new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: metric, relativeTime: 0.1, depth: 0, callerFrameId: 0), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: metric, relativeTime: 0.2, depth: 0, callerFrameId: 0), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: 0.0, relativeTime: 0.3, depth: 0, callerFrameId: 0), // 0.0 metric }; var input = new Dictionary <int, List <SpeedScopeStackSourceWriter.Sample> >() { { 0, samples.ToList() } }; var aggregatedEvents = SpeedScopeStackSourceWriter.GetAggregatedOrderedProfileEvents(input); // we should have: // Open at 0.1 depth 0 and Close 0.3 Assert.Equal(2, aggregatedEvents.Count); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[0].Type); Assert.Equal(0.1, aggregatedEvents[0].RelativeTime); Assert.Equal(0, aggregatedEvents[0].Depth); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[1].Type); Assert.Equal(0.3, aggregatedEvents[1].RelativeTime); Assert.Equal(0, aggregatedEvents[0].Depth); }
public void TwoSamplesCanNotHappenAtTheSameTime() { const double zeroMetric = 0.0; const double relativeTime = 0.1; var samples = new[] { new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: zeroMetric, relativeTime: relativeTime, depth: 0, callerFrameId: 0), // 0.0 metric new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: zeroMetric, relativeTime: relativeTime, depth: 0, callerFrameId: 0), // 0.0 metric and same relative time }; var input = new Dictionary <int, List <SpeedScopeStackSourceWriter.Sample> >() { { 0, samples.ToList() } }; Assert.Throws <ArgumentException>(() => SpeedScopeStackSourceWriter.GetAggregatedOrderedProfileEvents(input)); }
public void GetAggregatedOrderedProfileEventsConvertsContinuousSamplesWithPausesToMultipleEvents() { const double metric = 0.1; var samples = new[] { new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 0.1), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 0.2), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 0.7), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 1.1), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 1.2), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, callerFrameId: 0, metric: metric, depth: 0, relativeTime: 1.3), }; var input = new Dictionary <int, List <SpeedScopeStackSourceWriter.Sample> >() { { 0, samples.ToList() } }; var aggregatedEvents = SpeedScopeStackSourceWriter.GetAggregatedOrderedProfileEvents(input); // we should have <0.1, 0.3> and <0.7, 0.8> (the tool would ignore <0.7, 0.7>) and <1.1, 1.4> Assert.Equal(6, aggregatedEvents.Count); Assert.Equal(0.1, aggregatedEvents[0].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[0].Type); Assert.Equal(0.2 + metric, aggregatedEvents[1].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[1].Type); Assert.Equal(0.7, aggregatedEvents[2].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[2].Type); Assert.Equal(0.7 + metric, aggregatedEvents[3].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[3].Type); Assert.Equal(1.1, aggregatedEvents[4].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[4].Type); Assert.Equal(1.3 + metric, aggregatedEvents[5].RelativeTime); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[5].Type); }
public void GetAggregatedOrderedProfileEventsConvertsContinuousSamplesWithDifferentCallerIdToMultipleEvents() { const double metric = 0.1; var samples = new[] { new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: metric, relativeTime: 0.1, depth: 0, callerFrameId: 0), new SpeedScopeStackSourceWriter.Sample((StackSourceCallStackIndex)1, metric: metric, relativeTime: 0.2, depth: 0, callerFrameId: 1), // callerFrameId change! }; var input = new Dictionary <int, List <SpeedScopeStackSourceWriter.Sample> >() { { 0, samples.ToList() } }; var aggregatedEvents = SpeedScopeStackSourceWriter.GetAggregatedOrderedProfileEvents(input); // we should have: // Open at 0.1 depth 0 and Close 0.2 // Open at 0.2 depth 0 and Close 0.3 Assert.Equal(4, aggregatedEvents.Count); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[0].Type); Assert.Equal(0.1, aggregatedEvents[0].RelativeTime); Assert.Equal(0, aggregatedEvents[0].Depth); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[1].Type); Assert.Equal(0.1 + metric, aggregatedEvents[1].RelativeTime); Assert.Equal(0, aggregatedEvents[0].Depth); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Open, aggregatedEvents[2].Type); Assert.Equal(0.2, aggregatedEvents[2].RelativeTime); Assert.Equal(0, aggregatedEvents[2].Depth); Assert.Equal(SpeedScopeStackSourceWriter.ProfileEventType.Close, aggregatedEvents[3].Type); Assert.Equal(0.2 + metric, aggregatedEvents[3].RelativeTime); Assert.Equal(0, aggregatedEvents[3].Depth); }