Skip to content

gdiplus: Boost performance of GdipDrawImagePointsRect.

Bartosz Kosiorek requested to merge gang65/wine:perf5 into master

By not using floorf from external library ucrtbase.dll the performance of GdipDrawImagePointsRect was improved.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53947

After applying patch the game performance is similar to native gdiplus.dll.

Result of oprofile before patch:

samples  %        image name               app name                 symbol name
895705   33.4761  ucrtbase.dll.so          wine                     floor
351683   13.1438  no-vmlinux               wine                     /no-vmlinux
330995   12.3706  gdiplus.dll.so           wine                     resample_bitmap_pixel
300093   11.2157  win32u.so                wine                     blend_rects_8888
272645   10.1898  gdiplus.dll.so           wine                     GdipDrawImagePointsRect
137421    5.1360  gdiplus.dll.so           wine                     sample_bitmap_pixel
112476    4.2037  gdiplus.dll.so           wine                     convert_32bppARGB_to_32bppPARGB
35455     1.3251  no-vmlinux               wineserver               /no-vmlinux
35223     1.3164  no-vmlinux               wine64-preloader         /no-vmlinux
30252     1.1306  libc.so.6                wine                     /usr/lib/i386-linux-gnu/libc.so.6

and after patch:

samples  %        image name               app name                 symbol name
248581   18.3279  no-vmlinux               wine                     /no-vmlinux
200141   14.7564  gdiplus.dll.so           wine                     resample_bitmap_pixel
199840   14.7342  win32u.so                wine                     blend_rects_8888
179135   13.2076  gdiplus.dll.so           wine                     GdipDrawImagePointsRect
105785    7.7995  no-vmlinux               wine-preloader           /no-vmlinux
89534     6.6013  gdiplus.dll.so           wine                     sample_bitmap_pixel
83947     6.1894  no-vmlinux               wine64-preloader         /no-vmlinux
74132     5.4658  gdiplus.dll.so           wine                     convert_32bppARGB_to_32bppPARGB
22978     1.6942  anon (tgid:374066 range:0x7bc10000-0x7bffffff) wine                     anon (tgid:374066 range:0x7bc10000-0x7bffffff)
19747     1.4559  libc.so.6                wine                     /usr/lib/i386-linux-gnu/libc.so.6
14570     1.0742  win32u.so                wine                     solid_rects_32

Can we stop using floorf and ceilf from math.h?

Edited by Bartosz Kosiorek

Merge request reports

Loading