aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs
diff options
context:
space:
mode:
authorIsaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>2024-02-11 02:09:18 +0000
committerGitHub <noreply@github.com>2024-02-11 03:09:18 +0100
commitf06d22d6f01e657ebbc0c8ef082739cd468e47b5 (patch)
treec10a566438d3801b33c1d7b4eff73ea62b2f1a63 /src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs
parent84d6e8d121a1b329d26cc0e462aadd1108d99a04 (diff)
Infra: Capitalisation Consistency (#6296)1.1.1187
* Rename Ryujinx.UI.Common * Rename Ryujinx.UI.LocaleGenerator * Update in Files AboutWindow * Configuration State * Rename projects * Ryujinx/UI * Fix build * Main remaining inconsistencies * HLE.UI Namespace * HLE.UI Files * Namespace * Ryujinx.UI.Common.Configuration.UI * Ryujinx.UI.Common,Configuration.UI Files * More instances
Diffstat (limited to 'src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs')
-rw-r--r--src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs b/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs
new file mode 100644
index 00000000..38728b9c
--- /dev/null
+++ b/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs
@@ -0,0 +1,79 @@
+using Ryujinx.Common.Logging;
+using Ryujinx.UI.Common.Helper;
+using System;
+using System.Runtime.InteropServices;
+using System.Runtime.Intrinsics.X86;
+using System.Text;
+
+namespace Ryujinx.UI.Common.SystemInfo
+{
+ public class SystemInfo
+ {
+ public string OsDescription { get; protected set; }
+ public string CpuName { get; protected set; }
+ public ulong RamTotal { get; protected set; }
+ public ulong RamAvailable { get; protected set; }
+ protected static int LogicalCoreCount => Environment.ProcessorCount;
+
+ protected SystemInfo()
+ {
+ OsDescription = $"{RuntimeInformation.OSDescription} ({RuntimeInformation.OSArchitecture})";
+ CpuName = "Unknown";
+ }
+
+ private static string ToGBString(ulong bytesValue) => (bytesValue == 0) ? "Unknown" : ValueFormatUtils.FormatFileSize((long)bytesValue, ValueFormatUtils.FileSizeUnits.Gibibytes);
+
+ public void Print()
+ {
+ Logger.Notice.Print(LogClass.Application, $"Operating System: {OsDescription}");
+ Logger.Notice.Print(LogClass.Application, $"CPU: {CpuName}");
+ Logger.Notice.Print(LogClass.Application, $"RAM: Total {ToGBString(RamTotal)} ; Available {ToGBString(RamAvailable)}");
+ }
+
+ public static SystemInfo Gather()
+ {
+ if (OperatingSystem.IsWindows())
+ {
+ return new WindowsSystemInfo();
+ }
+ else if (OperatingSystem.IsLinux())
+ {
+ return new LinuxSystemInfo();
+ }
+ else if (OperatingSystem.IsMacOS())
+ {
+ return new MacOSSystemInfo();
+ }
+
+ Logger.Error?.Print(LogClass.Application, "SystemInfo unsupported on this platform");
+
+ return new SystemInfo();
+ }
+
+ // x86 exposes a 48 byte ASCII "CPU brand" string via CPUID leaves 0x80000002-0x80000004.
+ internal static string GetCpuidCpuName()
+ {
+ if (!X86Base.IsSupported)
+ {
+ return null;
+ }
+
+ // Check if CPU supports the query
+ if ((uint)X86Base.CpuId(unchecked((int)0x80000000), 0).Eax < 0x80000004)
+ {
+ return null;
+ }
+
+ int[] regs = new int[12];
+
+ for (uint i = 0; i < 3; ++i)
+ {
+ (regs[4 * i], regs[4 * i + 1], regs[4 * i + 2], regs[4 * i + 3]) = X86Base.CpuId((int)(0x80000002 + i), 0);
+ }
+
+ string name = Encoding.ASCII.GetString(MemoryMarshal.Cast<int, byte>(regs)).Replace('\0', ' ').Trim();
+
+ return string.IsNullOrEmpty(name) ? null : name;
+ }
+ }
+}