Fix profile input from keyboard

This commit is contained in:
Andy Adshead 2019-02-15 12:41:44 +00:00
parent 6283bae8ad
commit e88c24f098
8 changed files with 66 additions and 46 deletions

View file

@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Input;
namespace Ryujinx.Profiler
{
public struct NpadDebugButtons
{
public Key ToggleProfiler;
}
public class NpadDebug
{
public NpadDebugButtons Buttons;
private KeyboardState _prevKeyboard;
public NpadDebug(NpadDebugButtons buttons)
{
Buttons = buttons;
}
public bool TogglePressed(KeyboardState keyboard) => !keyboard[Buttons.ToggleProfiler] && _prevKeyboard[Buttons.ToggleProfiler];
public void SetPrevKeyboardState(KeyboardState keyboard)
{
_prevKeyboard = keyboard;
}
}
}

View file

@ -7,8 +7,9 @@ namespace Ryujinx.Profiler
{
public static class Profile
{
public static float UpdateRate => _settings.UpdateRate;
public static long HistoryLength => _settings.History;
public static float UpdateRate => _settings.UpdateRate;
public static long HistoryLength => _settings.History;
public static NpadDebug Controls => _settings.Controls;
private static InternalProfile _profileInstance;
private static ProfilerSettings _settings;
@ -27,6 +28,7 @@ namespace Ryujinx.Profiler
UpdateRate = (config.UpdateRate <= 0) ? -1 : 1.0f / config.UpdateRate,
History = (long)(config.History * PerformanceCounter.TicksPerSecond),
MaxLevel = config.MaxLevel,
Controls = config.Controls,
};
}

View file

@ -1,6 +1,4 @@
{
"$schema": "./_schema.json",
// Enable profiling (Only available on a profiling enabled build)
"enabled": true,
@ -8,11 +6,20 @@
"dump_path": "",
// Update rate for profiler UI, in hertz. -1 updates every time a frame is issued
"update_rate": 4,
"update_rate": 4.0,
// Set how long to keep profiling data in seconds, reduce if profiling is taking too much RAM
"history": 5,
"history": 5.0,
// Set the maximum profiling level. Higher values may cause a heavy load on your system but will allow you to profile in more detail
"max_level": 0
"max_level": 0,
// Keyboard Controls
// https://github.com/opentk/opentk/blob/master/src/OpenTK/Input/Key.cs
"controls": {
"buttons": {
// Show/Hide the profiler
"toggle_profiler": "F2"
}
}
}

View file

@ -17,6 +17,8 @@ namespace Ryujinx.Profiler
public int MaxLevel { get; private set; }
public float History { get; private set; }
public NpadDebug Controls { get; private set; }
/// <summary>
/// Loads a configuration file from disk
/// </summary>

View file

@ -15,5 +15,8 @@ namespace Ryujinx.Profiler
// 19531225 = 5 seconds in ticks
public long History { get; set; } = 19531225;
// Controls
public NpadDebug Controls;
}
}

View file

@ -1,6 +1,7 @@
using System.Diagnostics;
using System.Threading;
using OpenTK;
using OpenTK.Input;
using Ryujinx.Common;
namespace Ryujinx.Profiler.UI
@ -46,6 +47,16 @@ namespace Ryujinx.Profiler.UI
_window = null;
}
[Conditional("USE_PROFILING")]
public void UpdateKeyInput(KeyboardState keyboard)
{
if (Profile.Controls.TogglePressed(keyboard))
{
ToggleVisible();
}
Profile.Controls.SetPrevKeyboardState(keyboard);
}
private void ProfileLoop()
{
using (_window = new ProfileWindow())

View file

@ -152,15 +152,9 @@ namespace Ryujinx
if (_keyboard.HasValue)
{
KeyboardState keyboard = _keyboard.Value;
#if USE_PROFILING
// Debug
if (Config.NPadDebug.TogglePressed(keyboard))
{
_profileWindow.ToggleVisible();
}
Config.NPadDebug.SetPrevKeyboardState(keyboard);
#endif
// Profiler input, lets the profiler get access to the main windows keyboard state
_profileWindow.UpdateKeyInput(keyboard);
// Normal Input
currentButton = Configuration.Instance.KeyboardControls.GetButtons(keyboard);

View file

@ -1,30 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using OpenTK.Input;
namespace Ryujinx.Ui
{
public struct NPadDebugButtons
{
public int ToggleProfiler;
}
public class NPadDebug
{
public NPadDebugButtons Buttons;
private KeyboardState prevKeyboard;
public NPadDebug(NPadDebugButtons buttons)
{
Buttons = buttons;
}
public bool TogglePressed(KeyboardState keyboard) => !keyboard[(Key) Buttons.ToggleProfiler] && prevKeyboard[(Key) Buttons.ToggleProfiler];
public void SetPrevKeyboardState(KeyboardState keyboard)
{
prevKeyboard = keyboard;
}
}
}