[webkit-dev] Font cache cleaning

Dan Bernstein mitz at apple.com
Sat Oct 11 01:12:20 PDT 2008


On Oct 10, 2008, at 6:29 AM, Frederic Marmond wrote:

> Hi people,
> I just wonder how to clear the font cache, arbitrary.
> For example, when leaving a site, clear all cached font data, to  
> start loading the new page in a 'clean' environment.
> I know it may slow down things :)  old memory vs speed debate...
> I tried to call the FontCache::invalidate(); in my  
> WebFrameLoaderClient::postProgressFinishedNotification(), but it  
> doesn't do anything in my testcase.
> I use valgrind to see what goes on.
> my testcase is very simple:
> first.html:
> <span style="font-family: arial;">1234512345</span>
> <a href="second.html">2</a>
> second.html:
> <span style="font-family: verdana;">a</span>
> If I load first.html and then the second.html by clicking the link,  
> then exit, I would expect memory be less used than if I only load  
> first.html and exit.
> That's not the case, arial font datas are not cleared despite my  
> invalidate() call.
> I'm a bit lost in the Font Cache, is there any guru that may kindly  
> point me where to look?
> I tried to modify cTargetInactiveFontData and related parameters,  
> without success, I can't manage to limit the font cache size... it  
> grows and grows :(
> Thanks in advance,
> best regards
> Fred

Hi Fred,

The way to clear the WebCore font cache is to invoke  
FontCache::purgeInactiveFontData(). This will remove all unreferenced  
font data from the cache. There is an amount of font data that is  
never released from the cache and therefore leaks, namely font data  
created in FontCache::getFontDataForCharacters. The call to  
invalidate() should release all other font data, but also re-create  
and re-cache font data for all active fonts. Perhaps by the time you  
call invalidate(), the render tree for the page has not been destroyed  
yet, so the fonts are referenced. I don’t know what valgrind measures,  
but in your simple test case you should be able to use the debugger to  
track all font data allocations and deallocations and specifically see  
whether and why purgeInactiveFontData() does not deallocate anything.

-- Dan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.webkit.org/pipermail/webkit-dev/attachments/20081011/33b7141a/attachment.html 


More information about the webkit-dev mailing list