android: send the game window note on the first top-level map (A43)

Merged
UT
18d ago
+74-115

Under GameNative's X11 display server the boot splash hides on the first mapped window, whatever it is, and the user sees black until the game's first frame (the app's renderers never draw explorer). Under gamescope the splash waited for the game-window note from the shim's present path or from A43's commit-rate scan, because hiding it on map showed Wine's blue desktop, which gamescope composites. That gate kept the splash up long after there was something to show (on a Poco F6: Balatro hides at +29 s under gamescope versus +13 s under X11; L.A. Noire loads for 25 s behind the splash).

A43 reworked: the note is sent on the first top-level X map (in practice wine's desktop window), exactly the X11 rule, with no commit-rate gate. The daemon serves only the newest scan-out connection, so a note can be dropped when another client connects right after it; it is resent on a later commit, at most once a second and three times in all, through the same send_game_window_note(). The commit-rate counter and the game-child scan are gone. The patch is folded into 0043 so the train passes forward and reverse.

The blue is handled on the app side: game sessions get a black desktop background with no wallpaper and explorer's shell off (utkarshdalal/GameNative#2230), so what shows between the splash and the first frame is black under both display servers.

Verified on a Poco F6 with payload 20261023.3: the splash hides 0.4 to 0.6 s after xwm: first top-level map 0x400002: game window note sent (1/3) with the frame-latched daemon, and within 20 ms with the daemon from gamenative-drm#12. Balatro +29.2 s → +14.2 s, Blazing Chrome +24.3 s → +12.8 s, L.A. Noire +85.1 s → +23.8 s; the gap is black in every run; X11 unchanged.