[Scummvm-devel] MADE engine performance

Max Horn max at quendi.de
Wed Sep 23 11:56:13 CEST 2009

Am 23.09.2009 um 10:54 schrieb John Doe:

> Hi,
> The problem is that in MADE the mainloop is in the script and so the  
> script interpreter runs all the time in contrast to other games  
> where game scripts are called from the C++ code and run for only a  
> short time.
> There's a workaround in script.cpp ("We sleep a little after 500  
> opcodes to reduce the CPU load.") which I added which reduces the  
> CPU load in x86/WinXP considerably. Maybe decreasing this number  
> could help so it will sleep after e.g. 100 opcodes.
> I didn't profile it but I guess the engine spends some time in the  
> findObjectProperty in database.cpp since it seems to be called quite  
> often. Theoretically the call result could be cached somewhere  
> (using the call parameters as ID) and reused later on. (I'll try to  
> try that later.)

Well, that should be rather easy to achieve using a Common::HashMap,  
one for each object (i.e. a new member of class Object), with int16  
propertyId as key. Drawback would be increased memory consumption --  
would be good to hear how much "room" is left free on the DS with  
MADE... But then I guess I am telling you things you already know... :)

BTW: I noticed that GameDatabase::getObject() may return NULL, but you  
never check for that. In fact it seems every place calling it assumes  
that it will always return a valid value. Hence shouldn't  
GameDatabase::getObject() not return NULL, but instead assert/error  
when an invalid index is passed in?


More information about the Scummvm-devel mailing list