aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Program.cs
diff options
context:
space:
mode:
authormageven <62494521+mageven@users.noreply.github.com>2020-08-04 05:02:53 +0530
committerGitHub <noreply@github.com>2020-08-04 01:32:53 +0200
commita33dc2f4919f7fdc8ea9db41c4c70c38cedfd3df (patch)
treed3eee67f25c3a302fa23dc39670438e7ebbfd35c /Ryujinx/Program.cs
parent60db4c353099e8656a330ede03fdbe57a421fa47 (diff)
Improved Logger (#1292)
* Logger class changes only Now compile-time checking is possible with the help of Nullable Value types. * Misc formatting * Manual optimizations PrintGuestLog PrintGuestStackTrace Surfaceflinger DequeueBuffer * Reduce SendVibrationXX log level to Debug * Add Notice log level This level is always enabled and used to print system info, etc... Also, rewrite LogColor to switch expression as colors are static * Unify unhandled exception event handlers * Print enabled LogLevels during init * Re-add App Exit disposes in proper order nit: switch case spacing * Revert PrintGuestStackTrace to Info logs due to #1407 PrintGuestStackTrace is now called in some critical error handlers so revert to old behavior as KThread isn't part of Guest. * Batch replace Logger statements
Diffstat (limited to 'Ryujinx/Program.cs')
-rw-r--r--Ryujinx/Program.cs46
1 files changed, 32 insertions, 14 deletions
diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs
index cb8ab48e..0b55d6f8 100644
--- a/Ryujinx/Program.cs
+++ b/Ryujinx/Program.cs
@@ -33,7 +33,10 @@ namespace Ryujinx
string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Path", $"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")};{systemPath}");
- GLib.ExceptionManager.UnhandledException += Glib_UnhandledException;
+ // Hook unhandled exception and process exit events
+ GLib.ExceptionManager.UnhandledException += (GLib.UnhandledExceptionArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
+ AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating);
+ AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs e) => ProgramExit();
// Initialize the configuration
ConfigurationState.Initialize();
@@ -77,11 +80,7 @@ namespace Ryujinx
ConfigurationState.Instance.ToFileFormat().SaveConfig(globalConfigurationPath);
}
- Logger.PrintInfo(LogClass.Application, $"Ryujinx Version: {Version}");
-
- Logger.PrintInfo(LogClass.Application, $"Operating System: {SystemInfo.Instance.OsDescription}");
- Logger.PrintInfo(LogClass.Application, $"CPU: {SystemInfo.Instance.CpuName}");
- Logger.PrintInfo(LogClass.Application, $"Total RAM: {SystemInfo.Instance.RamSizeInMB}");
+ PrintSystemInfo();
Profile.Initialize();
@@ -105,22 +104,41 @@ namespace Ryujinx
Application.Run();
}
- private static void Glib_UnhandledException(GLib.UnhandledExceptionArgs e)
+ private static void PrintSystemInfo()
{
- Exception exception = e.ExceptionObject as Exception;
+ Logger.Notice.Print(LogClass.Application, $"Ryujinx Version: {Version}");
+
+ Logger.Notice.Print(LogClass.Application, $"Operating System: {SystemInfo.Instance.OsDescription}");
+ Logger.Notice.Print(LogClass.Application, $"CPU: {SystemInfo.Instance.CpuName}");
+ Logger.Notice.Print(LogClass.Application, $"Total RAM: {SystemInfo.Instance.RamSizeInMB}");
- Logger.PrintError(LogClass.Application, $"Unhandled exception caught: {exception}");
+ var enabledLogs = Logger.GetEnabledLevels();
+ Logger.Notice.Print(LogClass.Application, $"Logs Enabled: {(enabledLogs.Count == 0 ? "<None>" : string.Join(", ", enabledLogs))}");
+ }
+ private static void ProcessUnhandledException(Exception e, bool isTerminating)
+ {
Ptc.Close();
PtcProfiler.Stop();
- if (e.IsTerminating)
- {
- Logger.Shutdown();
+ string message = $"Unhandled exception caught: {e}";
+
+ Logger.Error?.PrintMsg(LogClass.Application, message);
- Ptc.Dispose();
- PtcProfiler.Dispose();
+ if (Logger.Error == null) Logger.Notice.PrintMsg(LogClass.Application, message);
+
+ if (isTerminating)
+ {
+ ProgramExit();
}
}
+
+ private static void ProgramExit()
+ {
+ Ptc.Dispose();
+ PtcProfiler.Dispose();
+
+ Logger.Shutdown();
+ }
}
}