mirror of
https://github.com/Ryujinx/Ryujinx.git
synced 2024-08-17 14:18:44 +02:00
* Fix typos * Remove unneeded using statements * Enforce var style more * Remove redundant qualifiers * Fix some indentation * Disable naming warnings on files with external enum names * Fix build * Mass find & replace for comments with no spacing * Standardize todo capitalization and for/if spacing
90 lines
2.3 KiB
C#
90 lines
2.3 KiB
C#
using System.Threading;
|
|
using OpenTK;
|
|
using OpenTK.Input;
|
|
using Ryujinx.Common;
|
|
|
|
namespace Ryujinx.Profiler.UI
|
|
{
|
|
public class ProfileWindowManager
|
|
{
|
|
private ProfileWindow _window;
|
|
private Thread _profileThread;
|
|
private Thread _renderThread;
|
|
private bool _profilerRunning;
|
|
|
|
// Timing
|
|
private double _prevTime;
|
|
|
|
public ProfileWindowManager()
|
|
{
|
|
if (Profile.ProfilingEnabled())
|
|
{
|
|
_profilerRunning = true;
|
|
_prevTime = 0;
|
|
_profileThread = new Thread(ProfileLoop);
|
|
_profileThread.Start();
|
|
}
|
|
}
|
|
|
|
public void ToggleVisible()
|
|
{
|
|
if (Profile.ProfilingEnabled())
|
|
{
|
|
_window.ToggleVisible();
|
|
}
|
|
}
|
|
|
|
public void Close()
|
|
{
|
|
if (_window != null)
|
|
{
|
|
_profilerRunning = false;
|
|
_window.Close();
|
|
_window.Dispose();
|
|
}
|
|
|
|
_window = null;
|
|
}
|
|
|
|
public void UpdateKeyInput(KeyboardState keyboard)
|
|
{
|
|
if (Profile.Controls.TogglePressed(keyboard))
|
|
{
|
|
ToggleVisible();
|
|
}
|
|
Profile.Controls.SetPrevKeyboardState(keyboard);
|
|
}
|
|
|
|
private void ProfileLoop()
|
|
{
|
|
using (_window = new ProfileWindow())
|
|
{
|
|
// Create thread for render loop
|
|
_renderThread = new Thread(RenderLoop);
|
|
_renderThread.Start();
|
|
|
|
while (_profilerRunning)
|
|
{
|
|
double time = (double)PerformanceCounter.ElapsedTicks / PerformanceCounter.TicksPerSecond;
|
|
_window.Update(new FrameEventArgs(time - _prevTime));
|
|
_prevTime = time;
|
|
|
|
// Sleep to be less taxing, update usually does very little
|
|
Thread.Sleep(1);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void RenderLoop()
|
|
{
|
|
_window.Context.MakeCurrent(_window.WindowInfo);
|
|
|
|
while (_profilerRunning)
|
|
{
|
|
_window.Draw();
|
|
Thread.Sleep(1);
|
|
}
|
|
}
|
|
}
|
|
}
|