[webkit-dev] FontPlatformData, FontCache and HashMap
Stephan Assmus
superstippi at gmx.de
Sun Feb 21 01:06:40 PST 2010
On 2010-02-21 at 06:02:01 [+0100], n179911 <n179911 at gmail.com> wrote:
> I have a related question about SimpleFontData and FontPlatformData.
>
> When does Webkit create a FontPlatformData and SimpleFontData?
> I too put debug printfs in these classes constructors. And I see
> Webkit creates different FontPlatformData and SimpleFontData for same
> font family and same font size.
It's all in FontCache.cpp. There is two levels of caching, that's why you see
two FontPlatformData objects being created. One is created via the
createFontPlatformData() that you have to implement. This object is placed in
the hash map gFontPlatformDataCache in the method
FontCache::getCachedFontPlatformData(). SimpleFontData objects are created in
FontCache::getCachedFontData, which use the previously created
FontPlatformData in the FontPlatformData copy constructor that you have to
write, for the SimpleFontData member m_platformData. This SimpleFontData gets
put into the gFontDataCache hash map and from it you will later retrieve the
native font.
FontPlatformData should to be implemented such that it maintains an internal
object which wraps your platform native font with reference counting, so that
copy consructor, operator=() and operator==() become cheap operations. The Qt
implementation makes it clear how this has to work. What is also important is
that you generate the same hash value for two different instances of your
private native font wrapper which present the same logical font.
Best regards,
-Stephan
More information about the webkit-dev
mailing list