We have agreed to maintain the invariant that nothing should show up on the screen until the end of a rAF(). That begs the question why the present() call exists in the first place. In WebGL, there is no present() call, and the results show up at the end of rAF().
This matters regarding GPUSwapChain.getNextTexture(). Do you get the same texture if you call this twice in the same rAF()?