BitmapFont can Increase Your LibGDX Load Time

I noticed that my game was making a lot of calls to StringTokenizer and other String-related classes during significant portions of its load time. My game spent nearly 50% of its load time chugging away at Strings somewhere. This perplexed me for weeks until I noticed some calls to BitmapFont. I knew that BitmapFont had some expensive operations but I didn’t realize that just creating a new instance is very expensive.

I went about consolidating all the BitmapFont instances into one shared instance in the main Game class. I then passed the reference to this instance into the constructors for whatever classes needed to write text to the screen. Going from 4 instances of BitmapFont to just 1 shaved about 4 seconds off the load time. That’s a huge improvement when my game used to take 8 seconds to load on my Evo 4G.

So if method profiling yields several groups of StringTokenizer calls lasting around 1-2 seconds during your game’s loading phase, check if you are using more than one instance of BitmapFont. If all of your text uses the same font style and size, try using one shared instance.

3 comments on “BitmapFont can Increase Your LibGDX Load Time

  1. badlogic on said:

    Can you provide me with your original, uncosolidated font files? I’d like to reproduce your load time claims and fix them if possible. An issue on the issue tracker would help a lot :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>