public void SetContent(List <ClrJob> clrJobs, ClrJobType type) { _valuesSeries = new List <ChartClrJob>(clrJobs.Count); ChartClrJob lastItem = null; foreach (ClrJob job in clrJobs) { if (job.Type != type) { continue; } ulong startMilliseconds = job.StartNanoseconds / 1000000; ulong endMilliseconds = job.EndNanoseconds / 1000000; if ((lastItem != null) && (startMilliseconds <= lastItem.EndMilliseconds)) { if (endMilliseconds > lastItem.EndMilliseconds) { lastItem.EndMilliseconds = endMilliseconds; } continue; } if (startMilliseconds == endMilliseconds) { ++endMilliseconds; } lastItem = new ChartClrJob { StartMilliseconds = startMilliseconds, EndMilliseconds = endMilliseconds, }; _valuesSeries.Add(lastItem); } _valuesSeries.Capacity = _valuesSeries.Count; UpdateViewPort(); }
protected List <ClrJobItem> GetViewPortValuesOrg(Tuple <int, int> region) { if (region == null) { return(new List <ClrJobItem>()); } int start = region.Item1; int end = region.Item2; int count = end - start; var compressed = new List <ChartClrJob>(); ChartClrJob lastItem = null; ulong min = (ulong)((ViewPortMaxValueMilliseconds - ViewPortMinValueMilliseconds) / Width); for (var i = start; i < end; i++) { if (lastItem == null) { lastItem = new ChartClrJob { StartMilliseconds = _valuesSeries[i].StartMilliseconds, EndMilliseconds = _valuesSeries[i].EndMilliseconds }; compressed.Add(lastItem); continue; } if ((_valuesSeries[i].StartMilliseconds - lastItem.EndMilliseconds) < min) { lastItem.EndMilliseconds = _valuesSeries[i].EndMilliseconds; continue; } lastItem = new ChartClrJob { StartMilliseconds = _valuesSeries[i].StartMilliseconds, EndMilliseconds = _valuesSeries[i].EndMilliseconds }; compressed.Add(lastItem); } var result = new List <ClrJobItem> { new ClrJobItem() }; foreach (ChartClrJob clrJob in compressed) { result.Add(new ClrJobItem { TimeMilliseconds = clrJob.StartMilliseconds, Value = 0 }); result.Add(new ClrJobItem { TimeMilliseconds = clrJob.StartMilliseconds, Value = 1 }); result.Add(new ClrJobItem { TimeMilliseconds = clrJob.EndMilliseconds, Value = 1 }); result.Add(new ClrJobItem { TimeMilliseconds = clrJob.EndMilliseconds, Value = 0 }); } result.Add(new ClrJobItem { TimeMilliseconds = ViewPortMaxValueMilliseconds + 1, Value = 0 }); return(result); }