Profiler initial setup
This commit is contained in:
parent
1af6c31dc0
commit
e8ded454d5
8 changed files with 121 additions and 0 deletions
51
Ryujinx.Profiler/Profile.cs
Normal file
51
Ryujinx.Profiler/Profile.cs
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
using System;
|
||||||
|
using Ryujinx.Common.Logging;
|
||||||
|
|
||||||
|
namespace Ryujinx.Profiler
|
||||||
|
{
|
||||||
|
public class Profile
|
||||||
|
{
|
||||||
|
private static Profile ProfileInstance;
|
||||||
|
private static ProfilerSettings Settings;
|
||||||
|
|
||||||
|
private static bool ProfilingEnabled()
|
||||||
|
{
|
||||||
|
if (!Settings.Enabled)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (ProfileInstance == null)
|
||||||
|
ProfileInstance = new Profile();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Configure(ProfilerSettings settings)
|
||||||
|
{
|
||||||
|
Settings = settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Begin(ProfileConfig config)
|
||||||
|
{
|
||||||
|
if (!ProfilingEnabled())
|
||||||
|
return;
|
||||||
|
Logger.PrintInfo(LogClass.Gpu, $"Begin {config.Name}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void End(ProfileConfig config)
|
||||||
|
{
|
||||||
|
if (!ProfilingEnabled())
|
||||||
|
return;
|
||||||
|
Logger.PrintInfo(LogClass.Gpu, $"End {config.Name}");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Method(ProfileConfig config, Action method)
|
||||||
|
{
|
||||||
|
// If profiling is disabled just call the method
|
||||||
|
if (!ProfilingEnabled())
|
||||||
|
method();
|
||||||
|
|
||||||
|
Begin(config);
|
||||||
|
method();
|
||||||
|
End(config);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
Ryujinx.Profiler/ProfileConfig.cs
Normal file
22
Ryujinx.Profiler/ProfileConfig.cs
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Ryujinx.Profiler
|
||||||
|
{
|
||||||
|
public struct ProfileConfig
|
||||||
|
{
|
||||||
|
public string Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Profiles
|
||||||
|
{
|
||||||
|
public static class CPU
|
||||||
|
{
|
||||||
|
public static ProfileConfig Test = new ProfileConfig()
|
||||||
|
{
|
||||||
|
Name = "Test",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Ryujinx.Profiler/Ryujinx.Profiler.csproj
Normal file
12
Ryujinx.Profiler/Ryujinx.Profiler.csproj
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
|
<RuntimeIdentifiers>win10-x64;osx-x64;linux-x64</RuntimeIdentifiers>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
13
Ryujinx.Profiler/Settings.cs
Normal file
13
Ryujinx.Profiler/Settings.cs
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Ryujinx.Profiler
|
||||||
|
{
|
||||||
|
public class ProfilerSettings
|
||||||
|
{
|
||||||
|
public bool Enabled = true;
|
||||||
|
public bool FileDumpEnabled = false;
|
||||||
|
public string DumpLocation = "";
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,6 +23,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Luea", "Ryujinx.LLE\Luea.cs
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Profiler", "Ryujinx.Profiler\Ryujinx.Profiler.csproj", "{4E69B67F-8CA7-42CF-A9E1-CCB0915DFB34}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
@ -69,6 +71,10 @@ Global
|
||||||
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU
|
{5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4E69B67F-8CA7-42CF-A9E1-CCB0915DFB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4E69B67F-8CA7-42CF-A9E1-CCB0915DFB34}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4E69B67F-8CA7-42CF-A9E1-CCB0915DFB34}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4E69B67F-8CA7-42CF-A9E1-CCB0915DFB34}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|
|
@ -10,6 +10,7 @@ using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using Ryujinx.Profiler;
|
||||||
|
|
||||||
namespace Ryujinx
|
namespace Ryujinx
|
||||||
{
|
{
|
||||||
|
@ -62,6 +63,15 @@ namespace Ryujinx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
string profilePath = parser.Value("Profile_Dump_Path");
|
||||||
|
Profile.Configure(new ProfilerSettings()
|
||||||
|
{
|
||||||
|
Enabled = Convert.ToBoolean(parser.Value("Profiling_Enabled")),
|
||||||
|
FileDumpEnabled = profilePath != "",
|
||||||
|
DumpLocation = profilePath,
|
||||||
|
});
|
||||||
|
|
||||||
SystemLanguage SetLanguage = Enum.Parse<SystemLanguage>(parser.Value("System_Language"));
|
SystemLanguage SetLanguage = Enum.Parse<SystemLanguage>(parser.Value("System_Language"));
|
||||||
|
|
||||||
device.System.State.SetLanguage(SetLanguage);
|
device.System.State.SetLanguage(SetLanguage);
|
||||||
|
|
|
@ -22,6 +22,12 @@ Logging_Enable_Error = true
|
||||||
#Filtered log classes, seperated by ", ", eg. `Logging_Filtered_Classes = Loader, ServiceFS`
|
#Filtered log classes, seperated by ", ", eg. `Logging_Filtered_Classes = Loader, ServiceFS`
|
||||||
Logging_Filtered_Classes =
|
Logging_Filtered_Classes =
|
||||||
|
|
||||||
|
#Enable profiling
|
||||||
|
Profiling_Enabled = true
|
||||||
|
|
||||||
|
#Set profile file dump location, if blank file dumping disabled. (e.g. `ProfileDump.txt`)
|
||||||
|
Profile_Dump_Path = ProfileDump.txt
|
||||||
|
|
||||||
#System Language list: https://gist.github.com/HorrorTroll/b6e4a88d774c3c9b3bdf54d79a7ca43b
|
#System Language list: https://gist.github.com/HorrorTroll/b6e4a88d774c3c9b3bdf54d79a7ca43b
|
||||||
#Change System Language
|
#Change System Language
|
||||||
System_Language = AmericanEnglish
|
System_Language = AmericanEnglish
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
<ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
|
<ProjectReference Include="..\Ryujinx.Common\Ryujinx.Common.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.Graphics\Ryujinx.Graphics.csproj" />
|
<ProjectReference Include="..\Ryujinx.Graphics\Ryujinx.Graphics.csproj" />
|
||||||
<ProjectReference Include="..\Ryujinx.HLE\Ryujinx.HLE.csproj" />
|
<ProjectReference Include="..\Ryujinx.HLE\Ryujinx.HLE.csproj" />
|
||||||
|
<ProjectReference Include="..\Ryujinx.Profiler\Ryujinx.Profiler.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue