Gnash optimization

Gnash has recently been benefiting from some performance enhancements.

Sandro Santilli started profiling ActionScript execution and noticed some serious bottlenecks in the way Gnash handles property identifiers.

The identifiers are stored as strings in a global table and each unique string receives a unique numeric identifier. This design dates back to about 2006, but never fulfilled its promise. Indeed, it caused some serious difficulty with case-insensitive matching. Even worse, the compatibility improvements gained by handling ActionScript array indices as genuine properties put an enormous strain on the string table.

Sandro's recent improvements concentrate on reducing the number of lookups in this table, both by caching values for case-insensitive matching and removing unnecessary lookups.

Perhaps even more importantly from the Gnash developers' point of view, these improvements make future changes to identifiers much easier. In future it may be possible to drop the string table altogether, although currently we don't know if this will be better.

I can't just sit by and watch, so I rewrote Gnash's PropertyList, the container for object properties, to take advantage of the new identifier class.

These changes already make a big difference, so I've uploaded new Gnash Windows binaries. Though please note: because Flash has so many different elements, the speed improvements are only noticeable in some movies.