private double refreshArray(PerfTimerResult data, Dictionary <string, PerfTimerResult> linkedResult, int lineNbr, bool mainResultIsUpdate, double total, bool withEmptyMain = false) { double totalActionTime = 0; PerfTimerResult linkedr; int MainAvg, MainMax, linkAvg, linkMax; if (mainResultIsUpdate) { MainAvg = (int)LabelResultColumn.AvgUpdt; MainMax = (int)LabelResultColumn.MaxUpdt; linkAvg = (int)LabelResultColumn.AvgDraw; linkMax = (int)LabelResultColumn.MaxDraw; } else { MainAvg = (int)LabelResultColumn.AvgDraw; MainMax = (int)LabelResultColumn.MaxDraw; linkAvg = (int)LabelResultColumn.AvgUpdt; linkMax = (int)LabelResultColumn.MaxUpdt; } _displayedResults[(int)LabelResultColumn.Component, lineNbr].Text = data.Name; if (withEmptyMain == false) { _displayedResults[MainAvg, lineNbr].Text = (data.AvgInMS / total).ToString("00.000") + (total != 1 ? "%" : ""); _displayedResults[MainMax, lineNbr].Text = data.MaxInMS.ToString("0.000"); totalActionTime += data.AvgInMS; } else { _displayedResults[MainAvg, lineNbr].Text = ""; _displayedResults[MainMax, lineNbr].Text = ""; } string AvgInMS = string.Empty; string MaxInMS = string.Empty; //Get the other linked Draw data if (linkedResult.TryGetValue(data.Name, out linkedr)) { AvgInMS = (linkedr.AvgInMS / total).ToString("00.000") + (total != 1 ? "%" : ""); MaxInMS = linkedr.MaxInMS.ToString("0.000"); totalActionTime += linkedr.AvgInMS; } _displayedResults[linkAvg, lineNbr].Text = AvgInMS; _displayedResults[linkMax, lineNbr].Text = MaxInMS; return(totalActionTime); }
public double UpdateData() { //Perfom a data update double totalTimeFrame = 0; IOrderedEnumerable <PerfTimerResult> MainResult = null; Dictionary <string, PerfTimerResult> linkedResult = new Dictionary <string, PerfTimerResult>(); bool mainResultIsUpdate = false; //Get List of all components HashSet <string> compList = new HashSet <string>(_game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Select(x => x.Name)); double total = 1; totalTimeFrame = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Sum(x => x.AvgInMS); if (_showInPercent) { total = totalTimeFrame / 100; } switch (_columnSorted) { case LabelResultColumn.Component: mainResultIsUpdate = true; if (_orderDescending) { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderByDescending(x => x.PerfSamplingName); } else { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderBy(x => x.PerfSamplingName); } foreach (var itemResult in _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw")) { linkedResult.Add(itemResult.Name, itemResult); } break; case LabelResultColumn.AvgUpdt: mainResultIsUpdate = true; if (_orderDescending) { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderByDescending(x => x.AvgInMS); } else { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderBy(x => x.AvgInMS); } foreach (var itemResult in _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw")) { linkedResult.Add(itemResult.Name, itemResult); } break; case LabelResultColumn.MaxUpdt: mainResultIsUpdate = true; if (_orderDescending) { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderByDescending(x => x.MaxInMS); } else { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update").OrderBy(x => x.MaxInMS); } foreach (var itemResult in _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw")) { linkedResult.Add(itemResult.Name, itemResult); } break; case LabelResultColumn.AvgDraw: mainResultIsUpdate = false; if (_orderDescending) { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw").OrderByDescending(x => x.AvgInMS); } else { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw").OrderBy(x => x.AvgInMS); } foreach (var itemResult in _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update")) { linkedResult.Add(itemResult.Name, itemResult); } break; case LabelResultColumn.MaxDraw: mainResultIsUpdate = false; if (_orderDescending) { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw").OrderByDescending(x => x.MaxInMS); } else { MainResult = _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Draw").OrderBy(x => x.MaxInMS); } foreach (var itemResult in _game.ComponentsPerfMonitor.PerfTimer.PerfTimerResults.Values.Where(x => x.Suffix == "Update")) { linkedResult.Add(itemResult.Name, itemResult); } break; } int LineToDisplay = 0; int MaxLineToDisplay = _displayedResults.GetLength(1); int lineNbr = 0; _totalItems = MainResult.Count(); foreach (var data in MainResult) { compList.Remove(data.Name); //Skip the first X in case of offset if (lineNbr >= _listOffset) { if (LineToDisplay < MaxLineToDisplay) { refreshArray(data, linkedResult, LineToDisplay, mainResultIsUpdate, total, false); LineToDisplay++; } } lineNbr++; } _totalItems += compList.Count; _vsc.ThumbMaxValue = _totalItems; foreach (var data in compList) { if (LineToDisplay < MaxLineToDisplay) { PerfTimerResult perfData = linkedResult[data]; refreshArray(perfData, linkedResult, LineToDisplay, mainResultIsUpdate, total, true); LineToDisplay++; } } if (totalTimeFrame > 0) { _avgFrameTime.Text = totalTimeFrame.ToString("0.000 ms (") + (1 / totalTimeFrame * 1000.0f).ToString("0.00 fps)"); } else { _avgFrameTime.Text = "Performance tracking disabled"; } updateSlider(); if (totalTimeFrame == 0) { return(0); } else { return(1 / totalTimeFrame * 1000.0f); } }