#pragma once #include "../frames/InputFrameMailbox.h" #include #include #include #include #include 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& buffer) const; InputFrameMailbox& mMailbox; SyntheticInputProducerConfig mConfig; std::thread mThread; std::atomic mStopping{ false }; std::atomic mGeneratedFrames{ 0 }; std::atomic mSubmitMisses{ 0 }; }; }