[Scummvm-devel] ScummVM binary size comparison
Neil Millstone
neil at millstone.demon.co.uk
Sat Nov 8 16:02:07 CET 2008
Max Horn wrote:
> Am 08.11.2008 um 00:23 schrieb Neil Millstone:
>
>
>> > Hi Max and Team,
>>
> [...]
>
>
>> >
>> > So I used Max's handy command from an earlier post to find the biggest
>> > object files. I'm compiling with my normal settings. ARM instruction
>> > set mode (I'm sure thumb mode doesn't work with the current compiler),
>>
>
> It would still be a good thing to determine where it doesn't work,
> precisely, and to report this to upstream, to get it fixed. According
> to Robin, the binary size goes down several hundred KB, which we'll
> never be able to cut by optimizing our code manually.
>
>
I'm going to do this, but tracking these random crashes with no debugger
takes a very long time. Working out a minimal piece of code which
replicates the error takes even longer. I get the feeling that Tramboi
or Robin would be better at this than me!
I think this is the wrong solution though. I had a version of 0.9.1
that can run The Dig and Full Throttle. I only managed this by
compiling with Thumb and turning optimistaions off. If we need to use
Thumb just to keep games working that worked a few months ago, there's
going to be no chance of getting the binary down to the size it was then
in order to run The Dig/Full Throttle.
And what do we do next time the binary grows?
> [...]
>
>
>> > So, any ideas on how this can be improved?
>>
>
> Add
> #define DISABLE_FANCY_THEMES
> #define VECTOR_RENDERER_FORMAT 1555
> resp. the equivalent -D options. Then recompile. That might help a
> little bit.
>
>
That's already in there.
> Next, I noticed that the built-in theme takes up 35k alone (I think
> the old one used a similar number, though). Specifically, gui/themes/
> default.inc is 38870 (of course, you have to subtract a couple
> thousand bytes for quotation marks etc.).
>
> With a trivial trick I was able to save 4k in my binary: I opened gui/
> themes/default.inc, and replaced all occurrences of " = " by "=", and
> likewise ", " by "," -- after removing several thousand spaces this
> way, default.inc was down to 35888 bytes, and the binary size was
> reduced by 4096 bytes for me.
>
> Since the DS only needs the 320x240 GUI layout, I stripped the high-
> res layout (by removing "gui/themes/scummclassic/classic_layout.stx",
> then running "python scummtheme.py default scummclassic". Then removed
> the whitespaces. Result: default.inc at 20976 bytes. In my case, the
> binary now was 16384 bytes smaller (on OS X, it'll always be a
> multiple of 1024 for technical reasons.).
>
> Extending this idea, we could shrink the theme even more if we apply
> some kind of compression. Using a perl script / preprocessor magic, we
> could automatically replace lots of keywords on systems with low
> memory (both in the XML file as well as in the theming code itself):
> "foreground" -> "fore", "drawdata" -> "dd", "drawstep" -> "ds", etc..
> In addition, we could store the data zlib compressed and decompress it
> on the fly.
>
Unfortunately, zlib is not compiled in for the DS port. So it would add
50Kb or so to the binary size to include it.
> No matter what we do, XML by itself always is wasteful, and doesn't
> compress *that* well... We could avoid this, if we developed a way to
> just dump the whole theme into a binary file, without concern for
> forward compatibility, and compiled that in. Then we could also omit
> the XML parser, and save even more space. But I am not sure whether
> that would be worth it...
>
TBH, I wouldn't have ever chosen to use XML on low spec devices. Not
just the DS, but also some of the other ports we have.
Tokenising this stuff into a binary format seems like a good solution
though. There's already a preprocessor script for this stuff, so it
would be an extension to that.
> BTW, is you code including scummclassic.zip or scummmodern.zip? You
> shouldn't need either, the built-in theme should suffice.
>
Nope, neither are included.
>
> Oh, and do we really need super-expressive internal names for widgets
> and dialogs? "GameOptions_Volume.EnableTabCheckbox" and similar
> strings really add up to a lot.
>
>
> Anyway, there is still a lot more stuff that grew, and we need to look
> into this.
>
I'm sure we'll find it!
- Neil
More information about the Scummvm-devel
mailing list