using System.Runtime.InteropServices; namespace Ryujinx.Audio.Renderer.Server.Performance { /// /// Implementation of for performance metrics version 2. /// [StructLayout(LayoutKind.Sequential, Pack = 1, Size = 0x30)] public struct PerformanceFrameHeaderVersion2 : IPerformanceHeader { /// /// The magic of the performance header. /// public uint Magic; /// /// The total count of entries in this frame. /// public int EntryCount; /// /// The total count of detailed entries in this frame. /// public int EntryDetailCount; /// /// The offset of the next performance header. /// public int NextOffset; /// /// The total time taken by all the commands profiled. /// public int TotalProcessingTime; /// /// The count of voices that were dropped. /// public uint VoiceDropCount; /// /// The start ticks of the . (before sending commands) /// public ulong StartRenderingTicks; /// /// The index of this performance frame. /// public uint Index; /// /// If set to true, the DSP is running behind. /// [MarshalAs(UnmanagedType.I1)] public bool IsDspRunningBehind; public int GetEntryCount() { return EntryCount; } public int GetEntryCountOffset() { return 4; } public int GetEntryDetailCount() { return EntryDetailCount; } public void SetDspRunningBehind(bool isRunningBehind) { IsDspRunningBehind = isRunningBehind; } public void SetEntryCount(int entryCount) { EntryCount = entryCount; } public void SetEntryDetailCount(int entryDetailCount) { EntryDetailCount = entryDetailCount; } public void SetIndex(uint index) { Index = index; } public void SetMagic(uint magic) { Magic = magic; } public void SetNextOffset(int nextOffset) { NextOffset = nextOffset; } public void SetStartRenderingTicks(ulong startTicks) { StartRenderingTicks = startTicks; } public void SetTotalProcessingTime(int totalProcessingTime) { TotalProcessingTime = totalProcessingTime; } public void SetVoiceDropCount(uint voiceCount) { VoiceDropCount = voiceCount; } } }