[Fontconfig] commit (branch): read and write cache files.
Keith Packard
keithp at keithp.com
Tue Jul 26 06:03:31 EST 2005
On Mon, 2005-07-25 at 14:39 -0400, Patrick Lam wrote:
> Keith Packard wrote:
> > I was thinking we'd continue to use per-directory caches unless you
> > don't think that will work. The reason here is that each user can add
> > directories to the set, and having only a global cache means that
> > everyone would have a ~/.fonts.cache-2 file. Right now, the local caches
> > are significantly more expensive to use as many additional stat(2) calls
> > are needed to validate the cache.
>
> I think that per-directory caches will work once I implement banked
> references to mmaped objects, e.g. right now we have
>
> typedef struct _FcValueListPtr {
> FcStorage storage;
> union {
> int stat;
> struct _FcValueList *dyn;
> } u;
> } FcValueListPtr;
>
> and after my next change we'll have
>
> typedef struct _FcStaticPtr {
> int bank;
> int offset;
> } FcStaticPtr;
>
> typedef struct _FcValueListPtr {
> FcStorage storage;
> union {
> FcStaticPtr stat;
> struct _FcValueList *dyn;
> } u;
> } FcValueListPtr;
>
> I wonder if we should manually pack the FcStaticPtr into, say, 24 bits
> for offset and 8 bits for bank. Or if we should wonder about that for
> now. The banked data structures enable per-directory caches.
If that would limit the number of directories to 256, that would be
bad...
However, what you might consider is making the special bank value of '0'
mean a pointer with other bank values being offsets. That would reduce
the size of the FcValueListPtr back to 8 bytes on 32-bit machines:
typedef struct _FcValueListPtr {
int bank;
union {
int stat;
struct _FcValueList *dyn;
} u;
} FcValueListPtr;
#define FC_BANK_DYNAMIC 0
>
> The only remaining issue is that FcObjectPtr is now an int, and we want
> to keep it that way. We can probably do something clever there, maybe
> again the 24/8 split or something.
I fear weird structures like this. If there aren't a lot of them in
writable memory, then a simpler representation will cause fewer problems
in the future.
>
> > If we need a single global cache, it would need to live in /var
> > somewhere, which is something of a pain as there isn't strong concensus
> > on what /var should look like these days. A quick read through the LSB
> > might provide some suggestions.
>
> Hopefully we can avoid the single global cache.
Right. That leaves us with the same file structure we have today. There
have been requests for us to *permit* externally stored cache files for
read-only directories (generally on shared Windows partitions). We can
consider how to manage that after we have per-directory caches working
again.
Thanks for all of your hard work.
-keith
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/fontconfig/attachments/20050725/bd94b930/attachment.pgp
More information about the Fontconfig
mailing list