forked from Mirror/Ryujinx
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:
parent
b08d889f95
commit
57dfa09e3a
2 changed files with 34 additions and 13 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -2,12 +2,17 @@ namespace Ryujinx.HLE.HOS.Services.Lm
|
|||
{
|
||||
enum LmLogField
|
||||
{
|
||||
Skip = 1,
|
||||
Start = 0,
|
||||
Stop = 1,
|
||||
Message = 2,
|
||||
Line = 3,
|
||||
Filename = 4,
|
||||
Function = 5,
|
||||
Module = 6,
|
||||
Thread = 7
|
||||
Thread = 7,
|
||||
DropCount = 8,
|
||||
Time = 9,
|
||||
ProgramName = 10,
|
||||
Count
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue