Trace full GPS query results

This commit is contained in:
2026-06-20 21:21:32 -05:00
parent 1a9f560922
commit 54f014b74d
3 changed files with 31 additions and 5 deletions
+17 -3
View File
@@ -30,18 +30,29 @@ In `red4ext/EdgeWeightGPS/src/Main.cpp`:
- `kEnableGpsProviderClassPatch = false`
- `kEnableGpsProviderClassPatchTrace = false`
- `kEnableGpsTraceHooks = true`
- `kEnableGpsQueryLifecycleHooks = false`
- `kEnableGpsQueryLifecycleHooks = true`
- `kEnableGpsRouteJobLifecycleHooks = false`
- `kEnableGpsLocalSearchHooks = true`
- `kEnableRouteUiTraceHooks = false`
Active hooks:
- query lifecycle:
- `GPSQuerySubmit 0x70a42c`
- `GPSQueryDispatch 0x70a570`
- `GPSQueryResultFetch 0x7094b8`
- `GPSQueryStatus 0xaa5704`
- `GPSSearch 0x44f054`
- `GPSRouteProducer 0x44cc7c`
- `GPSEdgeCost 0x44f838`
- filtered provider filter `0x44ff68`
- base provider filter `0x450b08`
Async route-job hooks (`0x8d17d8`, `0x126b28`, `0x883cd8`,
`0x11f5f60`, `0x818ba8`) are split behind
`kEnableGpsRouteJobLifecycleHooks` and currently disabled to keep the next
run focused on solved route result records plus local search/cost stats.
The filter probe records pass/fail totals by GPS point class and by bits in
`point + 0x10`, tested against provider masks at `+0x108` and `+0x10a`.
@@ -125,9 +136,12 @@ Ask for timestamps for:
After the run:
1. Archive the log to `logs/EdgeWeightGPS_provider_filter_probe_<time>.log`.
2. Inspect `GPSSearch result` lines for `filterPassClasses`,
2. Inspect `GPSQuerySubmit`/`GPSQueryResultFetch` lines for tracked route IDs
from submit return RVA `0x8d20d4`, especially successful `0x7094b8`
records with `gpsResult_ptr28_rec40`.
3. Inspect `GPSSearch result` lines for `filterPassClasses`,
`filterFailClasses`, `filterPassMaskBits`, and `filterFailMaskBits`.
3. Compare filter pass/fail classes to `edgeSrcClasses` and route output
4. Compare filter pass/fail classes to `edgeSrcClasses` and route output
records. The key question is whether the class/mask filter is selecting the
graph subset before cost weighting can matter.
+6 -1
View File
@@ -67,7 +67,12 @@ Current behavior:
Active build note:
- The currently installed build is read-only. It disables provider class
multiplier overrides and enables local GPS search tracing.
multiplier overrides and enables GPS query lifecycle tracing plus local GPS
search tracing.
- The async route-job hooks are split behind `kEnableGpsRouteJobLifecycleHooks`
and are disabled in the active probe; this keeps the log focused on
`0x70a42c` submissions, `0x7094b8` result records, and local
search/provider-cost stats.
- It hooks `GPSSearch` (`0x44f054`), `GPSRouteProducer` (`0x44cc7c`),
`GPSEdgeCost` (`0x44f838`), and the two cost-provider filters
`0x44ff68`/`0x450b08`.
+8 -1
View File
@@ -100,7 +100,8 @@ constexpr bool kEnableGpsCostTablePatch = false;
constexpr bool kEnableGpsProviderClassPatch = false;
constexpr bool kEnableGpsProviderClassPatchTrace = false;
constexpr bool kEnableGpsTraceHooks = true;
constexpr bool kEnableGpsQueryLifecycleHooks = false;
constexpr bool kEnableGpsQueryLifecycleHooks = true;
constexpr bool kEnableGpsRouteJobLifecycleHooks = false;
constexpr bool kEnableGpsRouteJobStartTrace = false;
constexpr bool kEnableGpsLocalSearchHooks = true;
constexpr bool kEnableRouteUiTraceHooks = false;
@@ -4362,6 +4363,9 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
AttachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva,
reinterpret_cast<void*>(&DetourGpsQueryStatus),
reinterpret_cast<void**>(&gOriginalGpsQueryStatus));
}
if (kEnableGpsRouteJobLifecycleHooks)
{
AttachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva,
reinterpret_cast<void*>(&DetourGpsDispatchAdvance),
reinterpret_cast<void**>(&gOriginalGpsDispatchAdvance));
@@ -4536,6 +4540,9 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
DetachProbeHook("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva);
DetachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva);
DetachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva);
}
if (kEnableGpsRouteJobLifecycleHooks)
{
DetachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva);
DetachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva);
DetachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva);