Found during the eye-swap/phase investigation (PR #1089, refs #1031 #1033 #1063): an app publishing its window rect via xrSetAndroidWindowGeometryDXR stores it in the app-process android_globals; on the OOP route that publish never crosses the IPC boundary, so the service-side compositor leaves the origin at (0,0) — the OOP leg 'looked correct' in the offset-window A/B only because it applies no origin at all. Fix: forward the geometry call over IPC (mirror the #1033 updateWindowRect channel — possibly just route xrSetAndroidWindowGeometryDXR into the same per-session rect state the MonadoView poll feeds). Also note #1087: am task resize desyncs WM bounds from composited pixels on this OEM, so validation needs real drags or the SIGSTOP-pre-size recipe.
Found during the eye-swap/phase investigation (PR #1089, refs #1031 #1033 #1063): an app publishing its window rect via
xrSetAndroidWindowGeometryDXRstores it in the app-processandroid_globals; on the OOP route that publish never crosses the IPC boundary, so the service-side compositor leaves the origin at (0,0) — the OOP leg 'looked correct' in the offset-window A/B only because it applies no origin at all. Fix: forward the geometry call over IPC (mirror the #1033updateWindowRectchannel — possibly just routexrSetAndroidWindowGeometryDXRinto the same per-session rect state the MonadoView poll feeds). Also note #1087:am task resizedesyncs WM bounds from composited pixels on this OEM, so validation needs real drags or the SIGSTOP-pre-size recipe.