Trace full GPS query results
This commit is contained in:
@@ -30,18 +30,29 @@ In `red4ext/EdgeWeightGPS/src/Main.cpp`:
|
|||||||
- `kEnableGpsProviderClassPatch = false`
|
- `kEnableGpsProviderClassPatch = false`
|
||||||
- `kEnableGpsProviderClassPatchTrace = false`
|
- `kEnableGpsProviderClassPatchTrace = false`
|
||||||
- `kEnableGpsTraceHooks = true`
|
- `kEnableGpsTraceHooks = true`
|
||||||
- `kEnableGpsQueryLifecycleHooks = false`
|
- `kEnableGpsQueryLifecycleHooks = true`
|
||||||
|
- `kEnableGpsRouteJobLifecycleHooks = false`
|
||||||
- `kEnableGpsLocalSearchHooks = true`
|
- `kEnableGpsLocalSearchHooks = true`
|
||||||
- `kEnableRouteUiTraceHooks = false`
|
- `kEnableRouteUiTraceHooks = false`
|
||||||
|
|
||||||
Active hooks:
|
Active hooks:
|
||||||
|
|
||||||
|
- query lifecycle:
|
||||||
|
- `GPSQuerySubmit 0x70a42c`
|
||||||
|
- `GPSQueryDispatch 0x70a570`
|
||||||
|
- `GPSQueryResultFetch 0x7094b8`
|
||||||
|
- `GPSQueryStatus 0xaa5704`
|
||||||
- `GPSSearch 0x44f054`
|
- `GPSSearch 0x44f054`
|
||||||
- `GPSRouteProducer 0x44cc7c`
|
- `GPSRouteProducer 0x44cc7c`
|
||||||
- `GPSEdgeCost 0x44f838`
|
- `GPSEdgeCost 0x44f838`
|
||||||
- filtered provider filter `0x44ff68`
|
- filtered provider filter `0x44ff68`
|
||||||
- base provider filter `0x450b08`
|
- 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
|
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`.
|
`point + 0x10`, tested against provider masks at `+0x108` and `+0x10a`.
|
||||||
|
|
||||||
@@ -125,9 +136,12 @@ Ask for timestamps for:
|
|||||||
After the run:
|
After the run:
|
||||||
|
|
||||||
1. Archive the log to `logs/EdgeWeightGPS_provider_filter_probe_<time>.log`.
|
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`.
|
`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
|
records. The key question is whether the class/mask filter is selecting the
|
||||||
graph subset before cost weighting can matter.
|
graph subset before cost weighting can matter.
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,12 @@ Current behavior:
|
|||||||
Active build note:
|
Active build note:
|
||||||
|
|
||||||
- The currently installed build is read-only. It disables provider class
|
- 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`),
|
- It hooks `GPSSearch` (`0x44f054`), `GPSRouteProducer` (`0x44cc7c`),
|
||||||
`GPSEdgeCost` (`0x44f838`), and the two cost-provider filters
|
`GPSEdgeCost` (`0x44f838`), and the two cost-provider filters
|
||||||
`0x44ff68`/`0x450b08`.
|
`0x44ff68`/`0x450b08`.
|
||||||
|
|||||||
@@ -100,7 +100,8 @@ constexpr bool kEnableGpsCostTablePatch = false;
|
|||||||
constexpr bool kEnableGpsProviderClassPatch = false;
|
constexpr bool kEnableGpsProviderClassPatch = false;
|
||||||
constexpr bool kEnableGpsProviderClassPatchTrace = false;
|
constexpr bool kEnableGpsProviderClassPatchTrace = false;
|
||||||
constexpr bool kEnableGpsTraceHooks = true;
|
constexpr bool kEnableGpsTraceHooks = true;
|
||||||
constexpr bool kEnableGpsQueryLifecycleHooks = false;
|
constexpr bool kEnableGpsQueryLifecycleHooks = true;
|
||||||
|
constexpr bool kEnableGpsRouteJobLifecycleHooks = false;
|
||||||
constexpr bool kEnableGpsRouteJobStartTrace = false;
|
constexpr bool kEnableGpsRouteJobStartTrace = false;
|
||||||
constexpr bool kEnableGpsLocalSearchHooks = true;
|
constexpr bool kEnableGpsLocalSearchHooks = true;
|
||||||
constexpr bool kEnableRouteUiTraceHooks = false;
|
constexpr bool kEnableRouteUiTraceHooks = false;
|
||||||
@@ -4362,6 +4363,9 @@ RED4EXT_C_EXPORT bool RED4EXT_CALL Main(RED4ext::v1::PluginHandle aHandle, RED4e
|
|||||||
AttachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva,
|
AttachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva,
|
||||||
reinterpret_cast<void*>(&DetourGpsQueryStatus),
|
reinterpret_cast<void*>(&DetourGpsQueryStatus),
|
||||||
reinterpret_cast<void**>(&gOriginalGpsQueryStatus));
|
reinterpret_cast<void**>(&gOriginalGpsQueryStatus));
|
||||||
|
}
|
||||||
|
if (kEnableGpsRouteJobLifecycleHooks)
|
||||||
|
{
|
||||||
AttachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva,
|
AttachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva,
|
||||||
reinterpret_cast<void*>(&DetourGpsDispatchAdvance),
|
reinterpret_cast<void*>(&DetourGpsDispatchAdvance),
|
||||||
reinterpret_cast<void**>(&gOriginalGpsDispatchAdvance));
|
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("GPSQueryDispatch 0x70a570", kGpsQueryDispatchRva);
|
||||||
DetachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva);
|
DetachProbeHook("GPSQueryResultFetch 0x7094b8", kGpsQueryResultFetchRva);
|
||||||
DetachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva);
|
DetachProbeHook("GPSQueryStatus 0xaa5704", kGpsQueryStatusRva);
|
||||||
|
}
|
||||||
|
if (kEnableGpsRouteJobLifecycleHooks)
|
||||||
|
{
|
||||||
DetachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva);
|
DetachProbeHook("GPSDispatchAdvance 0x8d17d8", kGpsDispatchAdvanceRva);
|
||||||
DetachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva);
|
DetachProbeHook("GPSAsyncWorkerTick 0x126b28", kGpsAsyncWorkerTickRva);
|
||||||
DetachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva);
|
DetachProbeHook("GPSRouteJobPoll 0x883cd8", kGpsRouteJobPollRva);
|
||||||
|
|||||||
Reference in New Issue
Block a user