Improve LM implementation (#373)

- Manage end of the log packet correctly.
- Add drop count, time, and program name parsing.
- Use the correct buffer type. (0x21 not 0x9)
- Prefix unknown fields with "Field"
This commit is contained in:
Thomas Guillemard 2018-08-22 23:06:29 +02:00 committed by gdkchan
parent b08d889f95
commit 57dfa09e3a
2 changed files with 34 additions and 13 deletions

View file

@ -22,9 +22,9 @@ namespace Ryujinx.HLE.HOS.Services.Lm
public long Log(ServiceCtx Context)
{
byte[] LogBuffer = Context.Memory.ReadBytes(
Context.Request.PtrBuff[0].Position,
Context.Request.PtrBuff[0].Size);
(long BufPos, long BufSize) = Context.Request.GetBufferType0x21();
byte[] LogBuffer = Context.Memory.ReadBytes(BufPos, BufSize);
using (MemoryStream MS = new MemoryStream(LogBuffer))
{
@ -50,20 +50,36 @@ namespace Ryujinx.HLE.HOS.Services.Lm
string FieldStr = string.Empty;
if (Field == LmLogField.Skip)
if (Field == LmLogField.Start)
{
Reader.ReadByte();
Reader.ReadBytes(Size);
continue;
}
else if (Field == LmLogField.Stop)
{
break;
}
else if (Field == LmLogField.Line)
{
FieldStr = Field + ": " + Reader.ReadInt32();
}
else
else if (Field == LmLogField.DropCount)
{
FieldStr = Field + ": " + Reader.ReadInt64();
}
else if (Field == LmLogField.Time)
{
FieldStr = Field + ": " + Reader.ReadInt64() + "s";
}
else if (Field < LmLogField.Count)
{
FieldStr = Field + ": \"" + Encoding.UTF8.GetString(Reader.ReadBytes(Size)) + "\"";
}
else
{
FieldStr = "Field" + Field + ": \"" + Encoding.UTF8.GetString(Reader.ReadBytes(Size)) + "\"";
}
SB.AppendLine(" " + FieldStr);
}

View file

@ -2,12 +2,17 @@ namespace Ryujinx.HLE.HOS.Services.Lm
{
enum LmLogField
{
Skip = 1,
Message = 2,
Line = 3,
Filename = 4,
Function = 5,
Module = 6,
Thread = 7
Start = 0,
Stop = 1,
Message = 2,
Line = 3,
Filename = 4,
Function = 5,
Module = 6,
Thread = 7,
DropCount = 8,
Time = 9,
ProgramName = 10,
Count
}
}