hook(fifa17): pre-warm store purchase groups before screen-show; drop disproven rebind
The rebind approach was disproven live: the bind sensor measured mask=0x00 at screen-show (container empty, all six slots hidden -> no tab bar), and a rebind after the groups arrived (mask=0x0e = bronze|silver|gold) built NO tab bar. The Scaleform movie only honours the framework's OWN bind at screen-show, not a later re-publish/commit. Root cause therefore stands confirmed: the store's GET store/purchasegroup/all returns only after screen-show, so the first bind sees an empty container. Re-entry works because the groups are cached by then. Fix: load the purchase groups BEFORE the store screen is shown. FUN_180017870 (storefront) issues the store's own group request; firing it from the FUT hub event pump (a real game thread, before the store screen exists) lets the response arrive and populate the container so the first screen-show bind sees a full list and binds the tabs natively -- the re-entry path, on first entry. The bind detour is retained purely as the read-only SENSOR: the first-entry bind mask is the definitive measurement of whether the pre-warm landed in time. mask!=0 => pre-warm worked and the tabs bind natively; mask==0 with storefront_seen!=0 in the pre-warm log => a hub-time request cannot land in time and the remaining route is the extracted StoreFront.apt. Removed: render detour, maybe_rebind/should_rebind, and all rebind state. Re-added the hub-time maybe_prewarm_groups() call in sbc_dispatch::event_wrapper. Promoted (build-armed). Deployed artifact 668e9324; profile-gated fifa17 build.
This commit is contained in:
@@ -443,6 +443,10 @@ unsafe extern "system" fn event_wrapper(
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
// Piggyback the store pre-warm on this game-thread hub event: it loads the
|
||||
// purchase groups once, before the store screen is shown, so the store's native
|
||||
// screen-show tab bind sees a populated group list (see `store_entry`).
|
||||
crate::store_entry::maybe_prewarm_groups();
|
||||
let original: EventDispatchFn = core::mem::transmute(EVENT_TRAMPOLINE.load(Ordering::Acquire));
|
||||
let result = original(controller, event, payload);
|
||||
EVENT_EXITS.fetch_add(1, Ordering::Release);
|
||||
|
||||
Reference in New Issue
Block a user