Improved Logger (#1292)
* Logger class changes only Now compile-time checking is possible with the help of Nullable Value types. * Misc formatting * Manual optimizations PrintGuestLog PrintGuestStackTrace Surfaceflinger DequeueBuffer * Reduce SendVibrationXX log level to Debug * Add Notice log level This level is always enabled and used to print system info, etc... Also, rewrite LogColor to switch expression as colors are static * Unify unhandled exception event handlers * Print enabled LogLevels during init * Re-add App Exit disposes in proper order nit: switch case spacing * Revert PrintGuestStackTrace to Info logs due to #1407 PrintGuestStackTrace is now called in some critical error handlers so revert to old behavior as KThread isn't part of Guest. * Batch replace Logger statements
This commit is contained in:
parent
60db4c3530
commit
a33dc2f491
120 changed files with 800 additions and 809 deletions
|
@ -32,7 +32,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
bufferItem = null;
|
||||
|
||||
Logger.PrintDebug(LogClass.SurfaceFlinger, $"Max acquired buffer count reached: {numAcquiredBuffers} (max: {Core.MaxAcquiredBufferCount})");
|
||||
Logger.Debug?.Print(LogClass.SurfaceFlinger, $"Max acquired buffer count reached: {numAcquiredBuffers} (max: {Core.MaxAcquiredBufferCount})");
|
||||
|
||||
return Status.InvalidOperation;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (!Core.Slots[slot].RequestBufferCalled)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Slot {slot} was detached without requesting a buffer");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Slot {slot} was detached without requesting a buffer");
|
||||
|
||||
return Status.BadValue;
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
slot = BufferSlotArray.InvalidBufferSlot;
|
||||
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Max acquired buffer count reached: {numAcquiredBuffers} (max: {Core.MaxAcquiredBufferCount})");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Max acquired buffer count reached: {numAcquiredBuffers} (max: {Core.MaxAcquiredBufferCount})");
|
||||
|
||||
return Status.InvalidOperation;
|
||||
}
|
||||
|
|
|
@ -290,7 +290,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
if (Slots[slot].BufferState != BufferState.Acquired)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Slot {slot} is not owned by the consumer (state = {Slots[slot].BufferState})");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Slot {slot} is not owned by the consumer (state = {Slots[slot].BufferState})");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
if (Slots[slot].BufferState != BufferState.Dequeued)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Slot {slot} is not owned by the producer (state = {Slots[slot].BufferState})");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Slot {slot} is not owned by the producer (state = {Slots[slot].BufferState})");
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
}
|
||||
else if (preallocatedBufferCount < bufferCount)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, "Not enough buffers. Try with more pre-allocated buffers");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, "Not enough buffers. Try with more pre-allocated buffers");
|
||||
|
||||
return Status.Success;
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
fence = AndroidFence.NoFence;
|
||||
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, "No available buffer slots");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, "No available buffer slots");
|
||||
|
||||
return Status.Busy;
|
||||
}
|
||||
|
@ -193,11 +193,10 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
}
|
||||
else
|
||||
{
|
||||
string formattedError = $"Preallocated buffer mismatch - slot {slot}\n" +
|
||||
$"available: Width = {graphicBuffer.Width} Height = {graphicBuffer.Height} Format = {graphicBuffer.Format} Usage = {graphicBuffer.Usage:x} " +
|
||||
$"requested: Width = {width} Height = {height} Format = {format} Usage = {usage:x}";
|
||||
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, formattedError);
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger,
|
||||
$"Preallocated buffer mismatch - slot {slot}\n" +
|
||||
$"available: Width = {graphicBuffer.Width} Height = {graphicBuffer.Height} Format = {graphicBuffer.Format} Usage = {graphicBuffer.Usage:x} " +
|
||||
$"requested: Width = {width} Height = {height} Format = {format} Usage = {usage:x}");
|
||||
|
||||
slot = BufferSlotArray.InvalidBufferSlot;
|
||||
fence = AndroidFence.NoFence;
|
||||
|
@ -243,7 +242,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (!Core.Slots[slot].RequestBufferCalled)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Slot {slot} was detached without requesting a buffer");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Slot {slot} was detached without requesting a buffer");
|
||||
|
||||
return Status.BadValue;
|
||||
}
|
||||
|
@ -314,7 +313,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (slot == BufferSlotArray.InvalidBufferSlot)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, "No available buffer slots");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, "No available buffer slots");
|
||||
|
||||
return Status.Busy;
|
||||
}
|
||||
|
@ -373,7 +372,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (!Core.Slots[slot].RequestBufferCalled)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Slot {slot} was queued without requesting a buffer");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Slot {slot} was queued without requesting a buffer");
|
||||
|
||||
return Status.BadValue;
|
||||
}
|
||||
|
@ -797,7 +796,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (newUndequeuedCount < minUndequeuedCount)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Min undequeued buffer count ({minUndequeuedCount}) exceeded (dequeued = {dequeuedCount} undequeued = {newUndequeuedCount})");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Min undequeued buffer count ({minUndequeuedCount}) exceeded (dequeued = {dequeuedCount} undequeued = {newUndequeuedCount})");
|
||||
|
||||
return Status.InvalidOperation;
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (binder == null)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
@ -84,7 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
readableEvent = null;
|
||||
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -98,7 +98,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (binder == null)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Invalid binder id {binderId}");
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (!InterfaceToken.Equals(inputInterfaceToken))
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Invalid interface token {inputInterfaceToken} (expected: {InterfaceToken}");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Invalid interface token {inputInterfaceToken} (expected: {InterfaceToken}");
|
||||
|
||||
return ResultCode.Success;
|
||||
}
|
||||
|
|
|
@ -269,7 +269,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (status != Status.Success)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, $"Error returned by transaction {(TransactionCode)code}: {status}");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, $"Error returned by transaction {(TransactionCode)code}: {status}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -125,7 +125,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
{
|
||||
lock (Lock)
|
||||
{
|
||||
Logger.PrintInfo(LogClass.SurfaceFlinger, $"Creating layer {layerId}");
|
||||
Logger.Info?.Print(LogClass.SurfaceFlinger, $"Creating layer {layerId}");
|
||||
|
||||
BufferQueue.CreateBufferQueue(_device, process, out BufferQueueProducer producer, out BufferQueueConsumer consumer);
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ namespace Ryujinx.HLE.HOS.Services.SurfaceFlinger
|
|||
|
||||
if (hasTimeout)
|
||||
{
|
||||
Logger.PrintError(LogClass.SurfaceFlinger, "Android fence didn't signal in 3000 ms");
|
||||
Logger.Error?.Print(LogClass.SurfaceFlinger, "Android fence didn't signal in 3000 ms");
|
||||
Wait(gpuContext, Timeout.InfiniteTimeSpan);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue