feat(diagnostic): 阶段 0A 输入链路被动探测与线程归属复现
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
#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
|
||||
}
|
||||
Reference in New Issue
Block a user