Play Report Analyzer v4
You can now access the *entire* play report data in any given value formatter. The input types have been restructured and, notably, not every instance of Value has an ApplicationMetadata on it. It's now on the container type that also contains the matched values and the entire play report.
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
using Gommon;
|
||||
using MsgPack;
|
||||
using MsgPack.Serialization;
|
||||
using Ryujinx.Common.Logging;
|
||||
@@ -12,19 +11,12 @@ using Ryujinx.Horizon.Sdk.Sf;
|
||||
using Ryujinx.Horizon.Sdk.Sf.Hipc;
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using ApplicationId = Ryujinx.Horizon.Sdk.Ncm.ApplicationId;
|
||||
|
||||
namespace Ryujinx.Horizon.Prepo.Ipc
|
||||
{
|
||||
partial class PrepoService : IPrepoService
|
||||
{
|
||||
enum PlayReportKind
|
||||
{
|
||||
Normal,
|
||||
System,
|
||||
}
|
||||
|
||||
private readonly ArpApi _arp;
|
||||
private readonly PrepoServicePermissionLevel _permissionLevel;
|
||||
private ulong _systemSessionId;
|
||||
@@ -196,10 +188,17 @@ namespace Ryujinx.Horizon.Prepo.Ipc
|
||||
{
|
||||
return PrepoResult.InvalidBufferSize;
|
||||
}
|
||||
|
||||
|
||||
StringBuilder builder = new();
|
||||
MessagePackObject deserializedReport = MessagePackSerializer.UnpackMessagePackObject(reportBuffer.ToArray());
|
||||
|
||||
PlayReport playReport = new()
|
||||
{
|
||||
Kind = playReportKind,
|
||||
Room = gameRoom,
|
||||
ReportData = deserializedReport
|
||||
};
|
||||
|
||||
builder.AppendLine();
|
||||
builder.AppendLine("PlayReport log:");
|
||||
builder.AppendLine($" Kind: {playReportKind}");
|
||||
@@ -209,10 +208,12 @@ namespace Ryujinx.Horizon.Prepo.Ipc
|
||||
if (pid != 0)
|
||||
{
|
||||
builder.AppendLine($" Pid: {pid}");
|
||||
playReport.Pid = pid;
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.AppendLine($" ApplicationId: {applicationId}");
|
||||
playReport.AppId = applicationId;
|
||||
}
|
||||
|
||||
Result result = _arp.GetApplicationInstanceId(out ulong applicationInstanceId, pid);
|
||||
@@ -223,17 +224,20 @@ namespace Ryujinx.Horizon.Prepo.Ipc
|
||||
|
||||
_arp.GetApplicationLaunchProperty(out ApplicationLaunchProperty applicationLaunchProperty, applicationInstanceId).AbortOnFailure();
|
||||
|
||||
playReport.Version = applicationLaunchProperty.Version;
|
||||
|
||||
builder.AppendLine($" ApplicationVersion: {applicationLaunchProperty.Version}");
|
||||
|
||||
if (!userId.IsNull)
|
||||
{
|
||||
builder.AppendLine($" UserId: {userId}");
|
||||
playReport.UserId = userId;
|
||||
}
|
||||
|
||||
builder.AppendLine($" Room: {gameRoom}");
|
||||
builder.AppendLine($" Report: {MessagePackObjectFormatter.Format(deserializedReport)}");
|
||||
|
||||
HorizonStatic.HandlePlayReport(deserializedReport);
|
||||
HorizonStatic.HandlePlayReport(playReport);
|
||||
|
||||
Logger.Info?.Print(LogClass.ServicePrepo, builder.ToString());
|
||||
|
||||
|
||||
24
src/Ryujinx.Horizon/Prepo/Types/PlayReport.cs
Normal file
24
src/Ryujinx.Horizon/Prepo/Types/PlayReport.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using MsgPack;
|
||||
using Ryujinx.Horizon.Sdk.Account;
|
||||
using Ryujinx.Horizon.Sdk.Ncm;
|
||||
|
||||
namespace Ryujinx.Horizon.Prepo.Types
|
||||
{
|
||||
public struct PlayReport
|
||||
{
|
||||
public PlayReportKind Kind { get; init; }
|
||||
public string Room { get; init; }
|
||||
public MessagePackObject ReportData { get; init; }
|
||||
|
||||
public ApplicationId? AppId;
|
||||
public ulong? Pid;
|
||||
public uint Version;
|
||||
public Uid? UserId;
|
||||
}
|
||||
|
||||
public enum PlayReportKind
|
||||
{
|
||||
Normal,
|
||||
System,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user