#pragma once #include #include #include struct ExMessage; namespace StellarX::Internal { struct InputProbeWndProcToken { std::uint64_t callId = 0; std::uint64_t enterSequence = 0; std::uint64_t compositionId = 0; std::uint32_t callDepth = 0; UINT message = 0; bool depthCounted = false; bool recorded = false; }; struct InputProbeBatchToken { std::uint64_t batchId = 0; std::uint64_t startedQpcTicks = 0; std::uint32_t dispatchDepth = 0; std::uint32_t modalDepth = 0; bool active = false; bool modal = false; bool materialized = false; }; #if defined(STELLARX_ENABLE_INPUT_PROBE) void inputProbeAttach(HWND hwnd) noexcept; void inputProbeDetach(HWND hwnd) noexcept; InputProbeWndProcToken inputProbeWndProcEnter( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) noexcept; LRESULT inputProbeWndProcLeave( const InputProbeWndProcToken& token, LRESULT result, bool forwardedToOldProc) noexcept; InputProbeBatchToken inputProbeHostBatchBegin(HWND hwnd, bool modal) noexcept; void inputProbeObserveEasyXMessage( HWND hwnd, InputProbeBatchToken& batch, const ExMessage& message) noexcept; void inputProbeHostBatchEnd( HWND hwnd, InputProbeBatchToken& batch, std::size_t processed, bool stopped) noexcept; void inputProbeFlushAtSafePoint(HWND hwnd) noexcept; #else inline void inputProbeAttach(HWND) noexcept {} inline void inputProbeDetach(HWND) noexcept {} inline InputProbeWndProcToken inputProbeWndProcEnter( HWND, UINT, WPARAM, LPARAM) noexcept { return {}; } inline LRESULT inputProbeWndProcLeave( const InputProbeWndProcToken&, LRESULT result, bool) noexcept { return result; } inline InputProbeBatchToken inputProbeHostBatchBegin(HWND, bool) noexcept { return {}; } inline void inputProbeObserveEasyXMessage( HWND, InputProbeBatchToken&, const ExMessage&) noexcept {} inline void inputProbeHostBatchEnd( HWND, InputProbeBatchToken&, std::size_t, bool) noexcept {} inline void inputProbeFlushAtSafePoint(HWND) noexcept {} #endif }