I’ve been quiet lately, because I’ve been hard at work on beta-12. I’m not the best marketer, I’m afraid. When there’s an issue I’m working on, I find it really hard to break away from the code and chat about EpicTable. I’ve had a breakthrough of sorts with a memory issue, though, and thought I’d celebrate by posting.
The theme for beta 12 is “synchronization improvements”. A couple of the beta test groups have reported issues with objects disappearing mysteriously or object moves getting communicated to the players but not to the GM. The causes of these seem to fall into two categories:
- Issues related to rejoins (deliberate or automatic)
- Issues related to memory consumption
The first of these is somewhat random—except when it’s related to the second. Deliberate rejoins are when a participant restarts EpicTable and joins the same game. Automatic rejoins are when one participant’s EpicTable gets disconnected and rejoins automatically. You won’t necessarily even know about this unless you’re looking at the log or if the rejoiner is the host and thinks it has to rebroadcast the game state to everyone. This kind of rejoin can be caused by network errors. It can also be caused by high memory consumptions causing errors.
The high memory consumption is something I’ve observed on a few people’s machines. If you’re using a lot of maps and handouts, it’s not unusual to see EpicTable taking up 500-600MB or more. Clearly, this is undesirable, and it was surprising to me. Of course, I suspected very large maps were to blame, but by and large, I saw people using maps that were pretty reasonable in size.
Here’s what I was missing. I thought the maps were “small” because I was looking at the size of a JPG or PNG file. So, I thought I had a leak. When I got a memory profiler on it though, I found that I didn’t. I had a huge amount of “unmanaged memory”. It turns out, the images used to back maps have a large unmanaged memory component. This is because, unlike what you see on the file system, map images in memory are uncompressed. Save one of your maps as a .bmp instead of a .jpg and join me in recoiling in horror. Add three or four tabs with maps in them, and you can pretty quickly take up a lot of memory. That was why EpicTable took so much memory. What I’m doing now, and what I have proof- of-concept-quality code for right now, is releasing all the map images except the one in the current tab. When you change tabs, the map image for that tab is loaded and the last one is released. It had been the case that, once loaded, a map’s backing image stayed around. This change greatly reduces the incremental memory cost of adding a new map.
There are other, fairly minor, things in beta-12, like some bug fixes for automated error reports that have come in. I’m hoping to sneak in a surprise or two, but I really want to get beta-12 wrapped up this weekend, so we’ll see.
Thanks to all of those who have taken the time to report issues to me, open support tickets and gather diagnostics for me. It’s really helped.