[PATCH 1/2] gdi32/tests: Add locale-dependent face matching test.

Rémi Bernon rbernon at codeweavers.com
Mon Nov 23 07:40:17 CST 2020


On 11/23/20 2:16 PM, Alexandre Julliard wrote:
> Rémi Bernon <rbernon at codeweavers.com> writes:
> 
>> Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
>> ---
>>
>> This brings another ~200ms prefix startup time improvement, from ~1.2s
>> to ~1s for "wine cmd /c exit" execution time on average, as well as a
>> ~50ms process startup time improvement, from ~0.25s to ~0.2s execution
>> time when prefix is already started.
>>
>> The test shows that using wcsicmp is incorrect for face name comparison,
>> or at least that we should not rely on the current locale, and perf
>> also reports a high number of CPU cache miss coming from the locale
>> refcounting, which is the main source of improvement here.
>>
>> IIUC RtlDowncaseUnicodeChar also does locale dependent case folding,
>> but I'm not sure to see how it's controlled (it's the system default
>> locale that defines the loaded tables right?), and we should probably
>> check if case matching depends on it. If not, is there any canonical
>> normalized unicode case folding that should be used instead?
> 
> Unicode case mapping in ntdll is not locale-dependent. You can use
> CompareStringOrdinal() for that sort of thing.
> 

I also wanted to avoid iterating the whole strings as much as possible. 
RtlCompareUnicodeStrings (and so CompareStringOrdinal too) needs the 
actual strings length, or at least one of the two strings length to stop 
the iteration. This starts to add up as these comparisons are done quite 
a lot, specially when there's a lot of fonts.

Using CompareStringOrdinal, with strlenW calls to get the actual 
lengths, instead adds ~50ms to the results above when prefix is not 
start, and ~15ms to the process execution time when prefix is already 
started.

Of course the results depends on how many system fonts are installed, 
and I'm testing it with the debian fonts-noto package which brings a 
lot, but I don't think it's so unusual (I didn't even install it for the 
test, for some reason I've got it installed for a while).
-- 
Rémi Bernon <rbernon at codeweavers.com>



More information about the wine-devel mailing list