http://bugs.winehq.org/show_bug.cgi?id=14168
--- Comment #13 from Dan Kegel dank@kegel.com 2009-11-30 06:25:33 --- Might want to increase HASH_LEN from 0x101. When I increased it to a prime about 10x larger, the profile was again dominated by strlen, but this time from a different caller:
# opreport | head 286158 83.8602 libwine.so.1.0 23536 6.8974 kernel32.dll.so 19068 5.5880 msi.dll.so 5689 1.6672 no-vmlinux 930 0.2725 ntdll.dll.so
# opreport -l ~dank/wine-git/libs/wine/libwine.so 253335 88.5298 strlenW 20633 7.2104 compare_unicode_weights 5589 1.9531 wine_compare_string
# opreport -l ~dank/wine-git/dlls/msi/msi.dll.so 17015 89.2333 get_loaded_component 849 4.4525 lstrcmpW 568 2.9788 __wine_spec_get_pc_thunk_eax 117 0.6136 find_entry_in_hash 56 0.2937 WHERE_get_dimensions
winedbg bt all says: Backtrace: =>0 0xf7e20e3e strlenW+0x18(str=0x49f4850) 1 0x7ede1659 CompareStringW+0xda 2 0x7ede1bb1 lstrcmpW+0x7a 3 0x7e3c7075 STRCMP_Evaluate+0xc1(wv=0x59aef30, row=6650597, cond=0x59aeef8, val=0x159ce48, record=(nil)) [/home/dank/wine-git/dlls/msi/where.c:309] in msi (0x0159cdc0) 4 0x7e3c734f WHERE_evaluate+0x271(wv=0x59aef30, row=6650597, cond=0x59aeef8, val=0x159ce48, record=(nil)) [/home/dank/wine-git/dlls/msi/where.c:362] in msi (0x0159ce10) 5 0x7e3c7278 WHERE_evaluate+0x19a(wv=0x59aef30, row=6650597, cond=0x59aef18, val=0x159ceb4, record=(nil)) [/home/dank/wine-git/dlls/msi/where.c:348] in msi (0x0159ce60) ...
YMMV.