Better instant timing calculation

Fixed minor regex bug
This commit is contained in:
Andy Adshead 2019-01-26 13:10:24 +00:00
commit 97fdad7b0c
4 changed files with 36 additions and 12 deletions

View file

@ -50,14 +50,18 @@ namespace Ryujinx.Profiler
BeginTime = timestamp, BeginTime = timestamp,
LastTime = 0, LastTime = 0,
Count = 0, Count = 0,
Instant = 0,
InstantCount = 0,
}; };
} }
private TimingInfo UpdateTimer(TimingInfo time, long timestamp) private TimingInfo UpdateTimer(TimingInfo time, long timestamp)
{ {
time.Count++; time.Count++;
time.InstantCount++;
time.LastTime = timestamp - time.BeginTime; time.LastTime = timestamp - time.BeginTime;
time.TotalTime += time.LastTime; time.TotalTime += time.LastTime;
time.Instant += time.LastTime;
return time; return time;
} }
@ -83,6 +87,18 @@ namespace Ryujinx.Profiler
outDict.Add(configs[i], times[i]); outDict.Add(configs[i], times[i]);
} }
foreach (ProfileConfig key in Timers.Keys)
{
TimingInfo value, prevValue;
if (Timers.TryGetValue(key, out value))
{
prevValue = value;
value.Instant = 0;
value.InstantCount = 0;
Timers.TryUpdate(key, value, prevValue);
}
}
return outDict; return outDict;
} }
} }

View file

@ -2,7 +2,8 @@
{ {
public struct TimingInfo public struct TimingInfo
{ {
public long BeginTime, LastTime, TotalTime, Count; public long BeginTime, LastTime, TotalTime, Instant;
public int Count, InstantCount;
public long AverageTime public long AverageTime
{ {
get => (Count == 0) ? -1 : TotalTime / Count; get => (Count == 0) ? -1 : TotalTime / Count;

View file

@ -9,7 +9,7 @@ namespace Ryujinx.Profiler.UI
public class InstantAscending : IComparer<KeyValuePair<ProfileConfig, TimingInfo>> public class InstantAscending : IComparer<KeyValuePair<ProfileConfig, TimingInfo>>
{ {
public int Compare(KeyValuePair<ProfileConfig, TimingInfo> pair1, KeyValuePair<ProfileConfig, TimingInfo> pair2) public int Compare(KeyValuePair<ProfileConfig, TimingInfo> pair1, KeyValuePair<ProfileConfig, TimingInfo> pair2)
=> pair2.Value.LastTime.CompareTo(pair1.Value.LastTime); => pair2.Value.Instant.CompareTo(pair1.Value.Instant);
} }
public class AverageAscending : IComparer<KeyValuePair<ProfileConfig, TimingInfo>> public class AverageAscending : IComparer<KeyValuePair<ProfileConfig, TimingInfo>>

View file

@ -137,10 +137,17 @@ namespace Ryujinx
profileData.Sort(sortAction); profileData.Sort(sortAction);
} }
Regex filterRegex = new Regex(FilterText); try
if (FilterText != "")
{ {
profileData = profileData.Where((pair => filterRegex.IsMatch(pair.Key.Tag))).ToList(); Regex filterRegex = new Regex(FilterText);
if (FilterText != "")
{
profileData = profileData.Where((pair => filterRegex.IsMatch(pair.Key.Tag))).ToList();
}
}
catch (ArgumentException argException)
{
// Skip filtering for invalid regex
} }
} }
#endregion #endregion
@ -268,7 +275,7 @@ namespace Ryujinx
if (profileData.Count != 0) if (profileData.Count != 0)
{ {
width = Width - xOffset - 370; width = Width - xOffset - 370;
int maxInstant = profileData.Max((kvp) => (int) kvp.Value.LastTime); int maxInstant = profileData.Max((kvp) => (int) kvp.Value.Instant);
int maxAverage = profileData.Max((kvp) => (int) kvp.Value.AverageTime); int maxAverage = profileData.Max((kvp) => (int) kvp.Value.AverageTime);
int maxTotal = profileData.Max((kvp) => (int) kvp.Value.TotalTime); int maxTotal = profileData.Max((kvp) => (int) kvp.Value.TotalTime);
float barHeight = (lineHeight - linePadding) / 3.0f; float barHeight = (lineHeight - linePadding) / 3.0f;
@ -282,7 +289,7 @@ namespace Ryujinx
GL.Color3(Color.Blue); GL.Color3(Color.Blue);
float bottom = GetLineY(yOffset, lineHeight, linePadding, true, verticalIndex++); float bottom = GetLineY(yOffset, lineHeight, linePadding, true, verticalIndex++);
float top = bottom + barHeight; float top = bottom + barHeight;
float right = (float) entry.Value.LastTime / maxInstant * width + xOffset; float right = (float) entry.Value.Instant / maxInstant * width + xOffset;
GL.Vertex2(xOffset, bottom); GL.Vertex2(xOffset, bottom);
GL.Vertex2(xOffset, top); GL.Vertex2(xOffset, top);
GL.Vertex2(right, top); GL.Vertex2(right, top);
@ -331,19 +338,19 @@ namespace Ryujinx
foreach (var entry in profileData) foreach (var entry in profileData)
{ {
float y = GetLineY(yOffset, lineHeight, linePadding, true, verticalIndex++); float y = GetLineY(yOffset, lineHeight, linePadding, true, verticalIndex++);
fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.LastTime):F3}", xOffset, y, lineHeight); fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.Instant):F3} ({entry.Value.InstantCount})", xOffset, y, lineHeight);
fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.AverageTime):F3}", columnSpacing + 100 + xOffset, y, lineHeight); fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.AverageTime):F3}", columnSpacing + 120 + xOffset, y, lineHeight);
fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.TotalTime):F3}", columnSpacing + columnSpacing + 200 + xOffset, y, lineHeight); fontService.DrawText($"{Profile.ConvertTicksToMS(entry.Value.TotalTime):F3}", columnSpacing + columnSpacing + 200 + xOffset, y, lineHeight);
} }
GL.Disable(EnableCap.ScissorTest); GL.Disable(EnableCap.ScissorTest);
float yHeight = Height - titleFontHeight; float yHeight = Height - titleFontHeight;
fontService.DrawText("Instant (ms)", xOffset, yHeight, titleFontHeight); fontService.DrawText("Instant (ms, count)", xOffset, yHeight, titleFontHeight);
buttons[(int)ButtonIndex.InstantTitle].UpdateSize((int)xOffset, (int)yHeight, 0, (int)(columnSpacing + 100), titleFontHeight); buttons[(int)ButtonIndex.InstantTitle].UpdateSize((int)xOffset, (int)yHeight, 0, (int)(columnSpacing + 100), titleFontHeight);
fontService.DrawText("Average (ms)", columnSpacing + 100 + xOffset, yHeight, titleFontHeight); fontService.DrawText("Average (ms)", columnSpacing + 120 + xOffset, yHeight, titleFontHeight);
buttons[(int)ButtonIndex.AverageTitle].UpdateSize((int)(columnSpacing + 100 + xOffset), (int)yHeight, 0, (int)(columnSpacing + 100), titleFontHeight); buttons[(int)ButtonIndex.AverageTitle].UpdateSize((int)(columnSpacing + 120 + xOffset), (int)yHeight, 0, (int)(columnSpacing + 100), titleFontHeight);
fontService.DrawText("Total (ms)", columnSpacing + columnSpacing + 200 + xOffset, yHeight, titleFontHeight); fontService.DrawText("Total (ms)", columnSpacing + columnSpacing + 200 + xOffset, yHeight, titleFontHeight);
buttons[(int)ButtonIndex.TotalTitle].UpdateSize((int)(columnSpacing + columnSpacing + 200 + xOffset), (int)yHeight, 0, Width, titleFontHeight); buttons[(int)ButtonIndex.TotalTitle].UpdateSize((int)(columnSpacing + columnSpacing + 200 + xOffset), (int)yHeight, 0, Width, titleFontHeight);