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

View file

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