mirror of
https://github.com/sal063/AC6_recomp
synced 2026-06-17 07:17:36 -04:00
63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
// Native audio runtime
|
|
// Part of the AC6 Recompilation native foundation
|
|
|
|
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <deque>
|
|
#include <mutex>
|
|
#include <vector>
|
|
|
|
namespace rex::audio {
|
|
|
|
enum class AudioTraceSubsystem : uint8_t {
|
|
kCore = 0,
|
|
kKernel = 1,
|
|
kHost = 2,
|
|
kXma = 3,
|
|
};
|
|
|
|
enum class AudioTraceEventType : uint8_t {
|
|
kClientRegistered = 0,
|
|
kClientUnregistered = 1,
|
|
kFrameSubmitted = 2,
|
|
kFrameConsumed = 3,
|
|
kFrameDropped = 4,
|
|
kMalformedFrame = 5,
|
|
kXmaAllocated = 6,
|
|
kXmaReleased = 7,
|
|
kXmaStateUpdated = 8,
|
|
kCallbackDispatched = 9,
|
|
kCallbackThrottled = 10,
|
|
kCallbackCompleted = 11,
|
|
};
|
|
|
|
struct AudioTraceEvent {
|
|
uint64_t timestamp_us{0};
|
|
AudioTraceSubsystem subsystem{AudioTraceSubsystem::kCore};
|
|
AudioTraceEventType event_type{AudioTraceEventType::kClientRegistered};
|
|
uint32_t client_id{0};
|
|
uint32_t value_0{0};
|
|
uint32_t value_1{0};
|
|
uint32_t value_2{0};
|
|
};
|
|
|
|
class AudioTraceBuffer {
|
|
public:
|
|
void Reset();
|
|
void Record(AudioTraceSubsystem subsystem, AudioTraceEventType event_type, uint32_t client_id,
|
|
uint32_t value_0 = 0, uint32_t value_1 = 0, uint32_t value_2 = 0);
|
|
|
|
size_t size() const;
|
|
std::vector<AudioTraceEvent> Snapshot() const;
|
|
|
|
private:
|
|
static constexpr size_t kMaximumTraceEventCount = 2048;
|
|
|
|
mutable std::mutex mutex_;
|
|
std::deque<AudioTraceEvent> events_;
|
|
};
|
|
|
|
} // namespace rex::audio
|