Update at when flag issued (ie every frame)
This commit is contained in:
parent
e73c2b41e3
commit
6458361d35
4 changed files with 36 additions and 6 deletions
|
@ -30,6 +30,8 @@ namespace Ryujinx.Profiler
|
|||
|
||||
private const int MaxFlags = 50;
|
||||
|
||||
private Action<TimingFlag> _timingFlagCallback;
|
||||
|
||||
public InternalProfile(long history)
|
||||
{
|
||||
_timingFlags = new TimingFlag[MaxFlags];
|
||||
|
@ -71,9 +73,13 @@ namespace Ryujinx.Profiler
|
|||
};
|
||||
|
||||
if (++_timingFlagIndex >= MaxFlags)
|
||||
{
|
||||
_timingFlagIndex = 0;
|
||||
}
|
||||
|
||||
_timingFlagCount = Math.Max(_timingFlagCount + 1, MaxFlags);
|
||||
|
||||
_timingFlagCallback?.Invoke(_timingFlags[_timingFlagIndex]);
|
||||
}
|
||||
|
||||
public void BeginProfile(ProfileConfig config)
|
||||
|
@ -148,6 +154,11 @@ namespace Ryujinx.Profiler
|
|||
return outFlags;
|
||||
}
|
||||
|
||||
public void RegisterFlagReciever(Action<TimingFlag> reciever)
|
||||
{
|
||||
_timingFlagCallback = reciever;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_cleanupRunning = false;
|
||||
|
|
|
@ -6,12 +6,12 @@ namespace Ryujinx.Profiler
|
|||
{
|
||||
public static class Profile
|
||||
{
|
||||
public static float UpdateRate => _settings.UpdateRate;
|
||||
public static long HistoryLength => _settings.History;
|
||||
|
||||
private static InternalProfile _profileInstance;
|
||||
private static ProfilerSettings _settings;
|
||||
|
||||
public static float UpdateRate => _settings.UpdateRate;
|
||||
public static long HistoryLength => _settings.History;
|
||||
|
||||
public static bool ProfilingEnabled()
|
||||
{
|
||||
if (!_settings.Enabled)
|
||||
|
@ -46,6 +46,13 @@ namespace Ryujinx.Profiler
|
|||
_profileInstance.FlagTime(flagType);
|
||||
}
|
||||
|
||||
public static void RegisterFlagReciever(Action<TimingFlag> reciever)
|
||||
{
|
||||
if (!ProfilingEnabled())
|
||||
return;
|
||||
_profileInstance.RegisterFlagReciever(reciever);
|
||||
}
|
||||
|
||||
public static void Begin(ProfileConfig config)
|
||||
{
|
||||
if (!ProfilingEnabled())
|
||||
|
|
|
@ -98,6 +98,18 @@ namespace Ryujinx.Profiler.UI
|
|||
Location = new Point(DisplayDevice.Default.Width - 1280,
|
||||
(DisplayDevice.Default.Height - 720) - 50);
|
||||
|
||||
if (Profile.UpdateRate <= 0)
|
||||
{
|
||||
// Perform step regardless of flag type
|
||||
Profile.RegisterFlagReciever((t) =>
|
||||
{
|
||||
if (!_paused)
|
||||
{
|
||||
_doStep = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Large number to force an update on first update
|
||||
_updateTimer = 0xFFFF;
|
||||
|
||||
|
@ -218,7 +230,7 @@ namespace Ryujinx.Profiler.UI
|
|||
|
||||
// Get timing data if enough time has passed
|
||||
_updateTimer += e.Time;
|
||||
if (_doStep || (!_paused && (_updateTimer > Profile.UpdateRate)))
|
||||
if (_doStep || ((Profile.UpdateRate > 0) && (!_paused && (_updateTimer > Profile.UpdateRate))))
|
||||
{
|
||||
_updateTimer = 0;
|
||||
_unsortedProfileData = Profile.GetProfilingData().ToList();
|
||||
|
|
|
@ -65,14 +65,14 @@ namespace Ryujinx
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
string profilePath = parser.Value("Profile_Dump_Path");
|
||||
double updateRateHz = Convert.ToSingle(parser.Value("Profiling_Update_Rate"));
|
||||
Profile.Configure(new ProfilerSettings()
|
||||
{
|
||||
Enabled = Convert.ToBoolean(parser.Value("Profiling_Enabled")),
|
||||
FileDumpEnabled = profilePath != "",
|
||||
DumpLocation = profilePath,
|
||||
UpdateRate = 1.0f / Convert.ToSingle(parser.Value("Profiling_Update_Rate")),
|
||||
UpdateRate = (float)((updateRateHz <= 0) ? -1 : 1.0f / updateRateHz),
|
||||
History = Profile.ConvertSecondsToTicks(Convert.ToDouble(parser.Value("Profiling_History"))),
|
||||
});
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue