[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Time to load font with pygame.font.SysFont on Mac



If I remember correctly, there's a external call to fc-list that is very slow. At one time, I intended to improve this situation by removing the fc-list dependency on Mac and Linux and instead collecting only the needed font data by using freetype and/or Mike C. Fletcher's TTFQuery, but I got too busy.

Jason

On Sun, Apr 4, 2021, 4:36 PM Irv Kalb <Irv@xxxxxxxxxxxxxx> wrote:
[I apologize if this is a duplicate, but I haven't seen this message show up on the list.]


I have tracked down a huge slowdown on loading fonts with pygame.font.SysFont

Mac OSX 11.2.3
Python 3.9.1
Pygame 2.0.1

If I load a font like the system font using None with a call to pygame.font.font, it happens almost immediately.

But if I load a font by name using pygame.font.SysFont, it's taking over 7 seconds on my Mac to load.  It doesn't seem to matter which font I try to use. 

Sample program:

import sys
import pygame
import time

pygame.init()
screen = pygame.display.set_mode((400, 400))
clock = pygame.time.Clock()

now = time.time()
font1 = pygame.font.Font(None, 24)
print('Loading System font took', time.time() - now)

now = time.time()
font2 = pygame.font.SysFont('Arial', 24)
print('Loading Arial font took', time.time() - now)

while True:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           pygame.quit()
           sys.exit()

   screen.fill((255, 255, 255))

   pygame.display.flip()
   clock.tick(30)


Output:
pygame 2.0.1 (SDL 2.0.14, Python 3.9.1)
Hello from the pygame community. https://www.pygame.org/contribute.html
Loading System font took 0.0006210803985595703
Loading Arial font took 7.058471202850342


(I don't have a setup to test this on Windows.)

This seems like a rather excessive amount of time as it slows down that start up of many of my programs. 

It seems to be related to how long it takes to get the list of fonts.  If I add this before the call to SysFont:

now = time.time()
fontList = pygame.font.get_fonts()
print('Getting fonts took', time.time() - now)

I get:

Loading System font took 0.0006549358367919922
Getting fonts took 7.013390064239502
Loading Arial font took 0.0004830360412597656


Anyone else seeing this?

Can someone tell me how to send in a bug report for this?

Thanks,

Irv