public void CalculateDisplayedValues(int fromIdx, int toIdx, IEnumerable <string> restrictToViewPaths) { int numTasks = 32; int numFrames = toIdx - fromIdx + 1; int segmentSize = (numFrames / numTasks) + 1; MTCounter counter = new MTCounter(numFrames); ProfilerRDI.ValueList vl = m_logControl.m_prdiTree.BuildValueList(m_dataPaths, m_viewPaths, restrictToViewPaths); for (int i = 0; i < numTasks; ++i) { int start = fromIdx + (i * segmentSize); int end = Math.Min(start + segmentSize, toIdx + 1); if (start >= end) { break; } ThreadPool.QueueUserWorkItem((o) => { for (int j = start; j < end; ++j) { IReadOnlyFRVs dataValues = m_baseLogData.FrameRecords[j].Values; FrameRecordValues viewValues = m_baseViewFRs[j].Values; CalcViewValues(dataValues, viewValues, vl); } counter.Increment(end - start); } ); } counter.WaitUntilMax(); }
protected override float GetValue(FrameRecord fr, ViewFrameRecord vfr, LogView logView) { OverviewRDI ordi = logView.m_logControl.m_ordiTree[TrackedPath]; IReadOnlyFRVs frvs = ordi.ValueIsPerLogView ? vfr.Values : fr.Values; float value = frvs[ordi.ValuesPath]; return((ValuesAreFPS && value != 0.0f) ? (1000.0f / value) : value); }
static void CalcSingleValueStat(ValueStats valueStats, int path, int fromIdx, int toIdx, GetValuesFromIndex valuesFromIdx) { for (int i = fromIdx; i <= toIdx; i++) { IReadOnlyFRVs values = valuesFromIdx(i); if (values.ContainsPath(path)) { valueStats.Update(values[path]); } } }
public float GetLocalMax(int frame, int numFrames, string path) { float maxValue = 0.0f; int startFrame = Math.Max(0, frame - numFrames); int endFrame = Math.Min(frame, FrameRecords.Count - 1); for (int i = startFrame; i <= endFrame; i++) { IReadOnlyFRVs frv = FrameRecords[i].Values; if (frv.ContainsPath(path)) { maxValue = Math.Max(maxValue, frv[path]); } } return(maxValue); }
public float GetMovingAverage(int frame, int numFrames, string path) { float avgValue = 0.0f; int startFrame = Math.Max(0, frame - numFrames); int endFrame = Math.Min(frame + numFrames, FrameRecords.Count); int numFramesPresent = 0; for (int i = startFrame; i < endFrame; i++) { IReadOnlyFRVs frv = FrameRecords[i].Values; if (frv.ContainsPath(path)) { avgValue += frv[path]; numFramesPresent++; } } return(avgValue / numFramesPresent); }
public FrameRecord(int index, float frameTimeInS, MemoryStream screenshotImage, IReadOnlyFRVs values, IEnumerable <UserMarker> userMarkers, IEnumerable <Callstack> callstacks) { Index = index; FrameTimeInS = frameTimeInS; FrameMidTimeInS = frameTimeInS; ScreenshotImage = screenshotImage; Values = values; List <UserMarkerLocation> userMarkerLocs = new List <UserMarkerLocation>(); foreach (UserMarker userMarker in userMarkers) { UserMarkerLocation userMarkerLocation = new UserMarkerLocation(userMarker, this, userMarkerLocs.Count); userMarkerLocs.Add(userMarkerLocation); } UserMarkers = userMarkerLocs; Callstacks = callstacks; }
static void CalcViewValues(IReadOnlyFRVs dataValues, FrameRecordValues viewValues, ProfilerRDI.ValueList vl) { foreach (ProfilerRDI.ValueListCmd cmd in vl.Cmds) { float value = 0.0f; for (int i = 0, c = cmd.Count; i != c; ++i) { ProfilerRDI.ListItem di = vl.Items[cmd.StartIndex + i]; IReadOnlyFRVs values = di.ValueIsPerLogView ? viewValues : dataValues; value += values[di.ValuePathIdx] * di.Scale; } if (value != 0.0f) { viewValues[cmd.ViewPathIdx] = value; } else { viewValues.Remove(cmd.ViewPathIdx); } } }