When calling Engine.PushGuiPage a promise is returned. The promise is settled when the "child" page is closed. That allows to await it inside async functions.
Previously the callback is run right inside the call to Engine.PopGuiPage. Now the continuation of the promise is called at the end of the "tick".
This diff won't help performance. It will more likely make things worse. Since gui pages aren't opened or closed that frequently, it doesn't matter that much.
Refs: D1684
For the engine side:
The promise is stored in the CGUIManager::SGUIPage (like previously the callback). When the promise is fulfilled it enqueues a callback in the JobQueue of the JSContext.