[cairo] Performance degradation of font cache in 1.11.3
deokjin81.kim at samsung.com
Fri Dec 30 01:53:15 PST 2011
When I measure elapased time of cairo using cairo-perf-trace, elapsed time of 1.10.2(release version) is shorter than that of 1.11.3(latest code). That is, performance of 1.10.2 is better than that of 1.11.3.
I think change of font cache is playing a role in causing this issue.
I found two root cause.
1. Use original_font_face instead of font_face when you create key of scaled font in cairo_scaled_font_create().
This change degrades hit ratio of _cairo_hash_table_lookup().
Below is related source code of 1.11.3.
1028 _cairo_scaled_font_init_key (&key, original_font_face,
1029 font_matrix, ctm, options); // In 1.10.2, use font_face instead of original_font_face
1031 while ((scaled_font = _cairo_hash_table_lookup (font_map->hash_table,
2. Some change of hash table.
- hash: Improve double hashing
- hash: Compare hash values before calling keys_equal
- hash: Improve handling of dead entries
I think purpose of above code change is very good, but actual result is not good.
As I know, 1 is more significant than 2.
(Actually influence of 2 is slight.)
Please give me advice.
Thank you in advance.
More information about the cairo