aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Common/Logging/Logger.cs7
-rw-r--r--Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs67
-rw-r--r--Ryujinx/Ui/MainWindow.cs11
3 files changed, 53 insertions, 32 deletions
diff --git a/Ryujinx.Common/Logging/Logger.cs b/Ryujinx.Common/Logging/Logger.cs
index 95b67c8e..10b1d970 100644
--- a/Ryujinx.Common/Logging/Logger.cs
+++ b/Ryujinx.Common/Logging/Logger.cs
@@ -39,6 +39,11 @@ namespace Ryujinx.Common.Logging
m_Time = Stopwatch.StartNew();
}
+ public static void RestartTime()
+ {
+ m_Time.Restart();
+ }
+
public static void AddTarget(ILogTarget target)
{
m_LogTargets.Add(target);
@@ -134,4 +139,4 @@ namespace Ryujinx.Common.Logging
return $"{Class} {Caller}: {Message}";
}
}
-} \ No newline at end of file
+}
diff --git a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs
index c1a31da9..70b6db0c 100644
--- a/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs
+++ b/Ryujinx.HLE/HOS/Kernel/SupervisorCall/SvcTable.cs
@@ -165,40 +165,48 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
}
}
+ BindingFlags staticNonPublic = BindingFlags.NonPublic | BindingFlags.Static;
+
// Print all the arguments for debugging purposes.
int inputArgsCount = methodArgs.Length - byRefArgsCount;
- generator.Emit(OpCodes.Ldc_I4_S, inputArgsCount);
+ if (inputArgsCount != 0)
+ {
+ generator.Emit(OpCodes.Ldc_I4, inputArgsCount);
- generator.Emit(OpCodes.Newarr, typeof(object));
+ generator.Emit(OpCodes.Newarr, typeof(object));
- string argsFormat = svcName;
+ string argsFormat = svcName;
- for (int index = 0; index < inputArgsCount; index++)
- {
- argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},";
+ for (int index = 0; index < inputArgsCount; index++)
+ {
+ argsFormat += $" {methodArgs[index].Name}: 0x{{{index}:X8}},";
- generator.Emit(OpCodes.Dup);
- generator.Emit(OpCodes.Ldc_I4_S, index);
- generator.Emit(OpCodes.Conv_I);
+ generator.Emit(OpCodes.Dup);
+ generator.Emit(OpCodes.Ldc_I4, index);
- generator.Emit(OpCodes.Ldarg_1);
- generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index);
+ generator.Emit(OpCodes.Ldarg_1);
+ generator.Emit(OpCodes.Ldc_I4, byRefArgsCount + index);
- MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX));
+ MethodInfo info = typeof(IExecutionContext).GetMethod(nameof(IExecutionContext.GetX));
- generator.Emit(OpCodes.Call, info);
+ generator.Emit(OpCodes.Call, info);
- generator.Emit(OpCodes.Box, typeof(ulong));
+ generator.Emit(OpCodes.Box, typeof(ulong));
- generator.Emit(OpCodes.Stelem_Ref);
- }
+ generator.Emit(OpCodes.Stelem_Ref);
+ }
- argsFormat = argsFormat.Substring(0, argsFormat.Length - 1);
+ argsFormat = argsFormat.Substring(0, argsFormat.Length - 1);
- generator.Emit(OpCodes.Ldstr, argsFormat);
+ generator.Emit(OpCodes.Ldstr, argsFormat);
+ }
+ else
+ {
+ generator.Emit(OpCodes.Ldnull);
- BindingFlags staticNonPublic = BindingFlags.NonPublic | BindingFlags.Static;
+ generator.Emit(OpCodes.Ldstr, svcName);
+ }
MethodInfo printArgsMethod = typeof(SvcTable).GetMethod(nameof(PrintArguments), staticNonPublic);
@@ -226,7 +234,7 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
throw new InvalidOperationException($"Method \"{svcName}\" has a invalid ref type \"{argType.Name}\".");
}
- generator.Emit(OpCodes.Ldloca_S, (byte)local.LocalIndex);
+ generator.Emit(OpCodes.Ldloca, local);
}
else
{
@@ -325,6 +333,18 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
throw new InvalidSvcException($"Method \"{svcName}\" has a invalid ref type \"{type.Name}\".");
}
+ private static void PrintArguments(object[] argValues, string formatOrSvcName)
+ {
+ if (argValues != null)
+ {
+ Logger.PrintDebug(LogClass.KernelSvc, string.Format(formatOrSvcName, argValues));
+ }
+ else
+ {
+ Logger.PrintDebug(LogClass.KernelSvc, formatOrSvcName);
+ }
+ }
+
private static void PrintResult(KernelResult result, string svcName)
{
if (result != KernelResult.Success &&
@@ -339,10 +359,5 @@ namespace Ryujinx.HLE.HOS.Kernel.SupervisorCall
Logger.PrintDebug(LogClass.KernelSvc, $"{svcName} returned result {result}.");
}
}
-
- private static void PrintArguments(object[] argValues, string format)
- {
- Logger.PrintDebug(LogClass.KernelSvc, string.Format(format, argValues));
- }
}
-} \ No newline at end of file
+}
diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs
index 59ce5092..28c6ac58 100644
--- a/Ryujinx/Ui/MainWindow.cs
+++ b/Ryujinx/Ui/MainWindow.cs
@@ -1,4 +1,4 @@
-using DiscordRPC;
+using DiscordRPC;
using Gtk;
using GUI = Gtk.Builder.ObjectAttribute;
using Ryujinx.Audio;
@@ -208,6 +208,8 @@ namespace Ryujinx.UI
}
else
{
+ Logger.RestartTime();
+
if (Directory.Exists(path))
{
string[] romFsFiles = Directory.GetFiles(path, "*.istorage");
@@ -228,7 +230,6 @@ namespace Ryujinx.UI
_device.LoadCart(path);
}
}
-
else if (File.Exists(path))
{
switch (System.IO.Path.GetExtension(path).ToLowerInvariant())
@@ -254,14 +255,14 @@ namespace Ryujinx.UI
}
catch (ArgumentOutOfRangeException)
{
- Logger.PrintError(LogClass.Application, $"The file which you have specified is unsupported by Ryujinx");
+ Logger.PrintError(LogClass.Application, "The file which you have specified is unsupported by Ryujinx.");
}
break;
}
}
else
{
- Logger.PrintWarning(LogClass.Application, "Please specify a valid XCI/NCA/NSP/PFS0/NRO file");
+ Logger.PrintWarning(LogClass.Application, "Please specify a valid XCI/NCA/NSP/PFS0/NRO file.");
End();
}
@@ -396,7 +397,7 @@ namespace Ryujinx.UI
Profile.FinishProfiling();
_device.Dispose();
_audioOut.Dispose();
- DiscordClient.Dispose();
+ DiscordClient?.Dispose();
Logger.Shutdown();
Environment.Exit(0);
}