aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Horizon/LogManager/Ipc
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.Horizon/LogManager/Ipc
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.Horizon/LogManager/Ipc')
-rw-r--r--Ryujinx.Horizon/LogManager/Ipc/LmLogger.cs176
-rw-r--r--Ryujinx.Horizon/LogManager/Ipc/LogService.cs20
2 files changed, 0 insertions, 196 deletions
diff --git a/Ryujinx.Horizon/LogManager/Ipc/LmLogger.cs b/Ryujinx.Horizon/LogManager/Ipc/LmLogger.cs
deleted file mode 100644
index e930bdd7..00000000
--- a/Ryujinx.Horizon/LogManager/Ipc/LmLogger.cs
+++ /dev/null
@@ -1,176 +0,0 @@
-using Ryujinx.Common.Logging;
-using Ryujinx.Common.Memory;
-using Ryujinx.Horizon.Common;
-using Ryujinx.Horizon.LogManager.Types;
-using Ryujinx.Horizon.Sdk.Lm;
-using Ryujinx.Horizon.Sdk.Sf;
-using Ryujinx.Horizon.Sdk.Sf.Hipc;
-using System;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Text;
-
-namespace Ryujinx.Horizon.LogManager.Ipc
-{
- partial class LmLogger : ILmLogger
- {
- private const int MessageLengthLimit = 5000;
-
- private readonly LogService _log;
- private readonly ulong _pid;
-
- private LogPacket _logPacket;
-
- public LmLogger(LogService log, ulong pid)
- {
- _log = log;
- _pid = pid;
-
- _logPacket = new LogPacket();
- }
-
- [CmifCommand(0)]
- public Result Log([Buffer(HipcBufferFlags.In | HipcBufferFlags.AutoSelect)] Span<byte> message)
- {
- if (!SetProcessId(message, _pid))
- {
- return Result.Success;
- }
-
- if (LogImpl(message))
- {
- Logger.Guest?.Print(LogClass.ServiceLm, _logPacket.ToString());
-
- _logPacket = new LogPacket();
- }
-
- return Result.Success;
- }
-
- [CmifCommand(1)] // 3.0.0+
- public Result SetDestination(LogDestination destination)
- {
- _log.LogDestination = destination;
-
- return Result.Success;
- }
-
- private static bool SetProcessId(Span<byte> message, ulong processId)
- {
- ref LogPacketHeader header = ref MemoryMarshal.Cast<byte, LogPacketHeader>(message)[0];
-
- uint expectedMessageSize = (uint)Unsafe.SizeOf<LogPacketHeader>() + header.PayloadSize;
- if (expectedMessageSize != (uint)message.Length)
- {
- Logger.Warning?.Print(LogClass.ServiceLm, $"Invalid message size (expected 0x{expectedMessageSize:X} but got 0x{message.Length:X}).");
-
- return false;
- }
-
- header.ProcessId = processId;
-
- return true;
- }
-
- private bool LogImpl(ReadOnlySpan<byte> message)
- {
- SpanReader reader = new(message);
- LogPacketHeader header = reader.Read<LogPacketHeader>();
-
- bool isHeadPacket = (header.Flags & LogPacketFlags.IsHead) != 0;
- bool isTailPacket = (header.Flags & LogPacketFlags.IsTail) != 0;
-
- _logPacket.Severity = header.Severity;
-
- while (reader.Length > 0)
- {
- int type = ReadUleb128(ref reader);
- int size = ReadUleb128(ref reader);
-
- LogDataChunkKey key = (LogDataChunkKey)type;
-
- if (key == LogDataChunkKey.Start)
- {
- reader.Skip(size);
-
- continue;
- }
- else if (key == LogDataChunkKey.Stop)
- {
- break;
- }
- else if (key == LogDataChunkKey.Line)
- {
- _logPacket.Line = reader.Read<int>();
- }
- else if (key == LogDataChunkKey.DropCount)
- {
- _logPacket.DropCount = reader.Read<long>();
- }
- else if (key == LogDataChunkKey.Time)
- {
- _logPacket.Time = reader.Read<long>();
- }
- else if (key == LogDataChunkKey.Message)
- {
- string text = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
-
- if (isHeadPacket && isTailPacket)
- {
- _logPacket.Message = text;
- }
- else
- {
- _logPacket.Message += text;
-
- if (_logPacket.Message.Length >= MessageLengthLimit)
- {
- isTailPacket = true;
- }
- }
- }
- else if (key == LogDataChunkKey.Filename)
- {
- _logPacket.Filename = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
- }
- else if (key == LogDataChunkKey.Function)
- {
- _logPacket.Function = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
- }
- else if (key == LogDataChunkKey.Module)
- {
- _logPacket.Module = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
- }
- else if (key == LogDataChunkKey.Thread)
- {
- _logPacket.Thread = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
- }
- else if (key == LogDataChunkKey.ProgramName)
- {
- _logPacket.ProgramName = Encoding.UTF8.GetString(reader.GetSpanSafe(size)).TrimEnd();
- }
- }
-
- return isTailPacket;
- }
-
- private static int ReadUleb128(ref SpanReader reader)
- {
- int result = 0;
- int count = 0;
-
- byte encoded;
-
- do
- {
- encoded = reader.Read<byte>();
-
- result += (encoded & 0x7F) << (7 * count);
-
- count++;
- } while ((encoded & 0x80) != 0);
-
- return result;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.Horizon/LogManager/Ipc/LogService.cs b/Ryujinx.Horizon/LogManager/Ipc/LogService.cs
deleted file mode 100644
index 6899739e..00000000
--- a/Ryujinx.Horizon/LogManager/Ipc/LogService.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using Ryujinx.Horizon.Common;
-using Ryujinx.Horizon.Sdk.Lm;
-using Ryujinx.Horizon.Sdk.Sf;
-
-namespace Ryujinx.Horizon.LogManager.Ipc
-{
- partial class LogService : ILogService
- {
- public LogDestination LogDestination { get; set; } = LogDestination.TargetManager;
-
- [CmifCommand(0)]
- public Result OpenLogger(out LmLogger logger, [ClientProcessId] ulong pid)
- {
- // NOTE: Internal name is Logger, but we rename it LmLogger to avoid name clash with Ryujinx.Common.Logging logger.
- logger = new LmLogger(this, pid);
-
- return Result.Success;
- }
- }
-} \ No newline at end of file