Wine Staging 1.7.39 was released a couple of hours ago. This release mostly concentrates on speed optimizations and various bug fixes related to keyboard input handling.
One of the slowest things in Wine are wineserver calls. These calls are necessary if an applications wants to set or get an value which affects multiple programs, for example asking for the current foreground window. While this information is usually managed by the kernel on Windows, a program running in Wine needs to send a message to wineserver via a pipe and wait for the reply. Since the wineserver is a separate process the overhead of waking it up is very big, causing these calls to be about 10 times slower than on windows.
In this release we started implementing shared memory communication as an alternative. Instead of using shared memory for all wineserver calls, we decided to optimize specific frequently used functions and to prevent waking up the wineserver at all if possible. A call to
PeekMessage for example will not wake up the wineserver as long as there are no messages available. For some functions like
GetActiveWindow it was possible to eliminate the pipe communication in all cases. Since these changes affect many parts of Wine and might still contain some bugs, this feature is disabled by default and needs to enabled manually by setting the environment variable
STAGING_SHARED_MEMORY to 1.
In order to retain security, the code requires support for memfds and file sealing which is only available on Linux with Kernel versions >= 3.17. We might add compatibility code soon, to make this feature also available on older Kernels or also other platforms like FreeBSD and MacOS X, but currently we're still focusing on testing and doing performance measurements.
Besides this new feature we also added several bug fixes related to keyboard input handling affecting for example "Photoshop CS5", the application "Sculptris" and also the game "La-Mulana". As usual you can find all other changes in our changelog.