Trace full GPS query results
This commit is contained in:
@@ -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.
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user