[Bug 51367] New: Major dwrite:analyzer, dwrite:layout and dwrite:font slowdown when adding (CJK) fonts
WineHQ Bugzilla
wine-bugs at winehq.org
Wed Jun 30 12:37:37 CDT 2021
https://bugs.winehq.org/show_bug.cgi?id=51367
Bug ID: 51367
Summary: Major dwrite:analyzer, dwrite:layout and dwrite:font
slowdown when adding (CJK) fonts
Product: Wine
Version: 6.10
Hardware: x86-64
OS: Linux
Status: NEW
Severity: normal
Priority: P2
Component: dwrite
Assignee: wine-bugs at winehq.org
Reporter: fgouget at codeweavers.com
Distribution: ---
Created attachment 70223
--> https://bugs.winehq.org/attachment.cgi?id=70223
Command and fonts for Debian's locales
Adding fonts causes major slowdowns in dwrite:analyzer, dwrite:layout and
dwrite:font when running in Wine. On my test VM I get the following run times:
Base Full set
dwrite:analyzer <1s 50s
dwrite:layout ~1s 46s
dwrite:font ~2s 85s
On the TestBot's debiant2 VM dwrite:font actually runs in about 118 seconds
with the full set of fonts; which is why it times out about 6% of the time:
https://test.winehq.org/data/patterns.html#dwrite:font
The base set of font packages is:
fonts-dejavu-core
fonts-freefont-ttf
fonts-liberation
fonts-quicksand
The problem is that the base set produces unreadable text when running in a
Chinese, Japanese or Korean locale: all translated strings are replaced with a
set of black squares (surprisingly ar_MA, he_IL, hi_HI are ok). That does not
seem to impact the test results but it does not feel right either. At a minimum
if Debian says a given set of fonts are needed for a locale we should test the
said locale with that set of fonts.
So the full set of fonts was created by installing the font packages for all of
Debian's locale task packages and this is what debiant2 has. See
apt_wine_locales() in wt-install-dev [1]. For reference I attached the
corresponding set of packages.
The run time increase is not concentrated in one specific test_xxx() function
that would iterate over all the fonts. All test_xxx() functions take longer to
run. Even the test_CreateFontFromLOGFONT() run time increased to ~17s (iirc).
Yet it does not look like it's doing all that much.
To speed things up I modified dwrite:font to use multiple threads using the
same approach as d3d10core:d3d10core. However even with 8 threads that only
gained about 4 seconds out of 118s: each individual test function just took
longer.
Is that because of lots of global locking?
Or because each test adds/removes fonts forcing all the other threads to do
many rescans?
Are all fonts reloaded and analyzed despite most fonts not having changed?
[1] https://github.com/fgouget/wt-daily/blob/master/wt-install-dev#L556
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list