// // Copyright (c) 2019-2021 Ryujinx // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . // 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; } } }