Por que o fontconfig é tão lento ao usar fontes definidas pelo usuário?

1

Para usar alguns modelos LaTeX, copiei algumas fontes de um MacBook para o meu Dell XPS 13 (com a instalação padrão do Ubuntu 16.04.3 LTS). Só usarei esses modelos ocasionalmente, mas achei que não seria difícil ter essas fontes disponíveis para outros aplicativos.

Mas desde que eu experimentei uma inicialização muito lenta de aproximadamente 15s de basicamente todos os aplicativos que usam a biblioteca fontconfig. Mesmo um simples fs-list demora tanto. É claro que já executei fs-cache -fv várias vezes e até mesmo criei arquivos fonts.dir e fonts.scale , mas sem sucesso.

Primeiramente, coloquei essas fontes em ~/.fonts em ~/.local/share/fonts depois que aprendi que o antigo diretório está obsoleto e finalmente em /usr/local/share/fonts depois que descobri que alguns sistemas têm problemas com a geração de arquivos cache para fontes do usuário, mas o problema permanece o mesmo.

Eu posso ver os arquivos de cache em ~/.cache/fontconfig e /var/cache/config com as permissões de leitura apropriadas. Mas o problema também ocorre quando eu inicio um aplicativo com direitos de administrador, portanto, um problema de permissão é improvável.

A única maneira de se livrar dos problemas é remover as fontes novamente (isto é, mantê-las em um diretório desconhecido pelo fontconfig). Mas isso me faz pensar se estou perdendo alguma coisa, já que não acho que isso deva ser um problema?

Ao usar strace , as chamadas que parecem retardar as coisas durante uma inicialização do aplicativo parecem ser desse tipo:

stat("/usr/local/share/fonts/Arial Black.ttf", {st_mode=S_IFREG|0644, st_size=122556, ...}) = 0
open("/usr/local/share/fonts/Arial Black.ttf", O_RDONLY) = 4
fcntl(4, F_SETFD, FD_CLOEXEC)           = 0
fstat(4, {st_mode=S_IFREG|0644, st_size=122556, ...}) = 0
mmap(NULL, 122556, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7f0ac8cab000
close(4)                                = 0

Como você pode ver, o arquivo não é apenas aberto, mas também carregado e mapeado na memória, o que não parece fazer sentido, já que isso não acontece com fontes pré-instaladas. Parece que isso está acontecendo para cada fonte de usuário da qual tenho cerca de 280, o que certamente explicaria a lentidão.

As fontes que eu copiei são em sua maioria .ttf e .ttc com alguns .otf e alguns .dfont .

Alguém sabe o que me falta?

    
por David Ongaro 11.10.2017 / 06:01

0 respostas