Fix threading conflict

Fixed instant count and time. Now accuratly represents the total time and count in the buffer
This commit is contained in:
Andy Adshead 2019-02-01 23:27:17 +00:00
parent 27d8435972
commit ca0a87a0cf
2 changed files with 17 additions and 16 deletions

View file

@ -60,11 +60,17 @@ namespace Ryujinx.Profiler
{
while (_cleanupRunning)
{
ClearTimerQueue();
foreach (var timer in Timers)
// Ensure we only ever have 1 instance modifying timers or timerQueue
if (Monitor.TryEnter(_timerQueueClearLock))
{
timer.Value.Cleanup(PerformanceCounter.ElapsedTicks - _history, _preserve - _history, _preserve);
ClearTimerQueue();
foreach (var timer in Timers)
{
timer.Value.Cleanup(PerformanceCounter.ElapsedTicks - _history, _preserve - _history, _preserve);
}
Monitor.Exit(_timerQueueClearLock);
}
// No need to run too often
@ -74,12 +80,6 @@ namespace Ryujinx.Profiler
private void ClearTimerQueue()
{
// Ensure we only ever have 1 instance running
if (!Monitor.TryEnter(_timerQueueClearLock))
{
return;
}
while (_timerQueue.TryDequeue(out var item))
{
if (!Timers.TryGetValue(item.Config, out var value))
@ -97,7 +97,6 @@ namespace Ryujinx.Profiler
value.End(item.Time);
}
}
Monitor.Exit(_timerQueueClearLock);
}
public void FlagTime(TimingFlagType flagType)
@ -150,13 +149,11 @@ namespace Ryujinx.Profiler
public Dictionary<ProfileConfig, TimingInfo> GetProfilingData()
{
_preserve = PerformanceCounter.ElapsedTicks;
ClearTimerQueue();
// Reset all instant counts
foreach (KeyValuePair<ProfileConfig, TimingInfo> timer in Timers)
// Make sure to clear queue
lock (_timerQueueClearLock)
{
timer.Value.Instant = 0;
timer.Value.InstantCount = 0;
ClearTimerQueue();
}
return Timers;

View file

@ -130,6 +130,8 @@ namespace Ryujinx.Profiler
if (_timestamps[i].EndTime < preserveStart)
{
toPreserveStart++;
InstantCount--;
Instant -= _timestamps[i].EndTime - _timestamps[i].BeginTime;
}
else if (_timestamps[i].EndTime < preserveEnd)
{
@ -138,6 +140,8 @@ namespace Ryujinx.Profiler
else if (_timestamps[i].EndTime < before)
{
toRemove++;
InstantCount--;
Instant -= _timestamps[i].EndTime - _timestamps[i].BeginTime;
}
else
{