INput
All checks were successful
CI / React UI Build (push) Successful in 10s
CI / Native Windows Build And Tests (push) Successful in 2m59s
CI / Windows Release Package (push) Has been skipped

This commit is contained in:
Aiden
2026-05-12 18:39:08 +10:00
parent 6e32941675
commit 0a8b335048
14 changed files with 822 additions and 24 deletions

View File

@@ -0,0 +1,49 @@
#pragma once
#include "../frames/InputFrameMailbox.h"
#include <atomic>
#include <chrono>
#include <cstdint>
#include <thread>
#include <vector>
namespace RenderCadenceCompositor
{
struct SyntheticInputProducerConfig
{
unsigned width = 1920;
unsigned height = 1080;
double frameDurationMilliseconds = 1000.0 / 59.94;
};
struct SyntheticInputProducerMetrics
{
uint64_t generatedFrames = 0;
uint64_t submitMisses = 0;
};
class SyntheticInputProducer
{
public:
SyntheticInputProducer(InputFrameMailbox& mailbox, SyntheticInputProducerConfig config);
SyntheticInputProducer(const SyntheticInputProducer&) = delete;
SyntheticInputProducer& operator=(const SyntheticInputProducer&) = delete;
~SyntheticInputProducer();
bool Start();
void Stop();
SyntheticInputProducerMetrics Metrics() const;
private:
void ThreadMain();
void GenerateFrame(uint64_t frameIndex, std::vector<unsigned char>& buffer) const;
InputFrameMailbox& mMailbox;
SyntheticInputProducerConfig mConfig;
std::thread mThread;
std::atomic<bool> mStopping{ false };
std::atomic<uint64_t> mGeneratedFrames{ 0 };
std::atomic<uint64_t> mSubmitMisses{ 0 };
};
}