RyuKen/Ryujinx/Ui/Program.cs
jduncanator 76a3172f17 Asynchronously log messages to the Console window (#395)
* Logging: Asynchronously log messages to the Console window

Writing to the Console blocks until the write completes. This has the potential to block any code path that logs to the application logger.

By queuing up log messages in an asynchronous queue and returning without blocking, we can speed up code paths that heavily log to the console (for example stubbed services like ServiceHid).

From testing this results in a roughly 8% time decrease between Ryujinx startup and the splash screen in Super Mario Odyssey on my system - 00:03:19.591 down to
00:03:04.354. Depending on your system, YMMV.

* Logging: Resolve code styling issues
2018-09-04 02:15:41 +02:00

73 lines
1.9 KiB
C#

using Ryujinx.Audio;
using Ryujinx.Audio.OpenAL;
using Ryujinx.Graphics.Gal;
using Ryujinx.Graphics.Gal.OpenGL;
using Ryujinx.HLE;
using System;
using System.IO;
namespace Ryujinx
{
class Program
{
static void Main(string[] args)
{
Console.Title = "Ryujinx Console";
IGalRenderer Renderer = new OGLRenderer();
IAalOutput AudioOut = new OpenALAudioOut();
Switch Device = new Switch(Renderer, AudioOut);
Config.Read(Device);
Device.Log.Updated += ConsoleLog.Log;
if (args.Length == 1)
{
if (Directory.Exists(args[0]))
{
string[] RomFsFiles = Directory.GetFiles(args[0], "*.istorage");
if (RomFsFiles.Length == 0)
{
RomFsFiles = Directory.GetFiles(args[0], "*.romfs");
}
if (RomFsFiles.Length > 0)
{
Console.WriteLine("Loading as cart with RomFS.");
Device.LoadCart(args[0], RomFsFiles[0]);
}
else
{
Console.WriteLine("Loading as cart WITHOUT RomFS.");
Device.LoadCart(args[0]);
}
}
else if (File.Exists(args[0]))
{
Console.WriteLine("Loading as homebrew.");
Device.LoadProgram(args[0]);
}
}
else
{
Console.WriteLine("Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
}
using (GLScreen Screen = new GLScreen(Device, Renderer))
{
Screen.MainLoop();
Device.Dispose();
}
AudioOut.Dispose();
}
}
}