Strictly speaking, this is not directly related to WebGL, or specific implementations.
However, I’d expect the issue that I’m seeing to affect a significant amount of applications using WebGL, so posting it here seems like a good idea.
In my application, I’m experiencing “acceptable” frame rates. Even when turning anti-aliasing off, Firefox 4.0 seems to be significantly faster than Chrome 11/12, but I’ll see how things develop with future Chrome builds.
A more serious problem I’ve observed is the following.
In my application, the user can rotate a model using the mouse. This seems to be a fairly common scenario in 3D visualization. The actual application is not vertex/fragment limited - as mentioned, FPS is in the “comfortable zone”.
This is a huge difference though between Chrome and Firefox.
In Firefox, rotating the model with the mouse is
a) responsive: there is no noticeable lag between moving the mouse, and seeing the model rotate
b) smooth: it seems that every frame, the model rotates a few degrees/pixels, further improving the “interactive experience”
In contrast, in Google Chrome:
a) there seems to be a delay of a few hundred milliseconds before the mouse move event is actually dispatched to my code. When moving the mouse left/right, this gives the experience as if the model is attached to the mouse by a string of rubber. There is a small, but very noticeable delay before the model “follows” the movement of the user
2) mouse move events seem to be “aggregated”/“collected”, and only fired every 10/20 frames or so. In effect, the application seems to receive 6 mouse move events per seconds in Chrome, while in Firefox the same event is fired for every frame. This causes a distinct “choppiness” when moving/rotating models on screen with the mouse.
In my application, the WebGL/Canvas3D viewport typically covers the whole browser window, which perhaps exposes these slowdowns more than a smaller viewport would.
Then again, running the exact same code in Firefox does not exhibit any of the issues.
The typical target hardware I’m using is low end: 2010 Mac Mini with NVidia 940M.
However, I’m experiencing the same across a range of Intel/NVidia GPUs, on Windows 7 as well as Windows XP.
Most online WebGL demos using a large viewport and using the mouse to rotate a large model show this issue as well, which to me confirms that the issue is not in my code. For example, the Google “Body Browser” demo clearly shows the difference between Chrome and Firefox 4.
Am I the only seeing this? Is this a known side-effect of the Chrome multi-process model? Perhaps Chrome “optimizes” page responsiveness by “batching” mouse events before dispatching?