https://bugs.winehq.org/show_bug.cgi?id=46059
Bug ID: 46059 Summary: Final Fantasy XI Online: Mouse Movement Heavily Affects FPS Product: Wine Version: 3.5 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: user32 Assignee: wine-bugs@winehq.org Reporter: escomk3@hotmail.com Distribution: ---
This isn't exactly a new issue, and it hasn't been a bother before, especially if one doesn't tend to use the mouse in the game, but it has become so bad that moving the mouse around steadily makes the game a slide-show. Bisect actually took me a lot farther back in history than I would have guessed.
It seems commit c2e0ae5b [1] is responsible, and reverting it restores abnormality (there's still a clear effect on the FPS, but it's very different, and definitely not as drastic).
A quick 'operf' test, though I'm not sure how accurate or helpful it might be...
Top 5 with the commit, without moving the mouse, and spinning the camera steadily around using the keyboard during a period of about 10 seconds:
samples| %| ------------------ 377648 69.8603 wined3d.dll.so 67991 12.5775 vmlinux 41998 7.7691 libnvidia-glcore.so.410.66 13403 2.4794 anon (tgid:18170 range:0x2681000-0x299dfff) 9164 1.6952 dsound.dll.so
Now with additionally moving the mouse around (if in windowed mode, the cursor needs to go over the game window, whether it's the active window or not):
samples| %| ------------------ 201289 38.5848 wined3d.dll.so 163583 31.3570 libwine.so.1.0 51344 9.8420 vmlinux 41387 7.9334 gdi32.dll.so 12685 2.4316 libnvidia-glcore.so.410.66
Now without the commit, while moving the mouse (without moving the mouse, there's not much of a difference as one might expect):
samples| %| ------------------ 452427 67.5044 wined3d.dll.so 85858 12.8104 vmlinux 40397 6.0274 libnvidia-glcore.so.410.73 22614 3.3741 libwine.so.1.0 14258 2.1274 anon (tgid:3579 range:0x2681000-0x299dfff)
To get a bit more in-depth, I gave 'opannotate' a go, though it may be inaccurate even according to its docs.
The highest spikes would seem to come from a 'switch(index)' [2], with 35667 samples, and 'if (index >= nb_dll_paths) return NULL;' [3] with 44687 samples. Without the commit, these lines get hit with only 4811 and 6023 samples respectively.
1. https://source.winehq.org/git/wine.git/commit/c2e0ae5bfd084d9b34c46517507e5d... 2. https://source.winehq.org/git/wine.git/blob/c2e0ae5bfd084d9b34c46517507e5d31... 3. https://source.winehq.org/git/wine.git/blob/c2e0ae5bfd084d9b34c46517507e5d31...