78 lines
2.0 KiB
C++
78 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <windows.h>
|
|
|
|
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
|
|
}
|