* dotnet format style --severity info Some changes were manually reverted. * dotnet format analyzers --serverity info Some changes have been minimally adapted. * Restore a few unused methods and variables * Silence dotnet format IDE0060 warnings * Silence dotnet format IDE0059 warnings * Address or silence dotnet format IDE1006 warnings * Address dotnet format CA1816 warnings * Address or silence dotnet format CA2211 warnings * Silence CA1806 and CA1834 issues * Fix formatting for switch expressions * Address most dotnet format whitespace warnings * Apply dotnet format whitespace formatting A few of them have been manually reverted and the corresponding warning was silenced * Revert formatting changes for while and for-loops * Format if-blocks correctly * Run dotnet format whitespace after rebase * Run dotnet format style after rebase * Run dotnet format analyzers after rebase * Run dotnet format after rebase and remove unused usings - analyzers - style - whitespace * Add comments to disabled warnings * Remove a few unused parameters * Replace MmeShadowScratch with Array256<uint> * Simplify properties and array initialization, Use const when possible, Remove trailing commas * Run dotnet format after rebase * Address IDE0251 warnings * Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas" This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e. * dotnet format whitespace after rebase * First dotnet format pass * Second dotnet format pass * Fix build issues * Fix StructArrayHelpers.cs * Apply suggestions from code review Co-authored-by: Ac_K <Acoustik666@gmail.com> * Fix return statements * Fix naming rule violations * Update src/Ryujinx.Common/Utilities/StreamUtils.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Add trailing commas * Address review feedback * Address review feedback * Rename remaining type parameters to TKey and TValue * Fix manual formatting for logging levels * Fix spacing before comments --------- Co-authored-by: Ac_K <Acoustik666@gmail.com>
78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
using Ryujinx.Common.Logging;
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Runtime.Intrinsics.X86;
|
|
using System.Text;
|
|
|
|
namespace Ryujinx.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 ToMiBString(ulong bytesValue) => (bytesValue == 0) ? "Unknown" : $"{bytesValue / 1024 / 1024} MiB";
|
|
|
|
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 {ToMiBString(RamTotal)} ; Available {ToMiBString(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;
|
|
}
|
|
}
|
|
}
|