Doing some profiling on winterbells (orisinal morning sunshine - SWF6)
I found the most time-consuming call is being string_table::noCase
mostly called by getProperty in turn called by get_prototype (looking up
"__proto__"). This accounts for 11.27% of time, followed by 8.83 of getProperty,
7.20 of map lookup and finally 6.5% of rendering.
For the first time I then see AS processing taking more than rendering.

The call to noCase seek for a match in a table of caseful-to-caseless
string_table::key values (longs) in order to tell if the input is already
lower-case or not (can Ben confirm this?).
This happens for any movie whose SWF version is < 7.

In this specific case the _caseTable "only" contains 275 entries.
Inlining the noCase implementation doesn't help much, just moves the time
to the caller (getProperty).

The process to find a property currently has these steps:
        1. Find the 'key' corresponding to a name (long from string)
        2. Find the lower-case 'key' corresponding to a 'key' (long from long)
        3. Find the Property corresponding to the lower-case 'key' (Property*
           from long)

That makes 3 containers lookups per property lookup, and multiply that
by the number of parents in a hierarchy chain (__proto__).

How can we improve it ?
Was this tested to be faster than looking for the string directly
using a case-insensitive index ?

--strk;

  ()   Free GIS & Flash consultant/developer
  /\   http://strk.keybit.net/services.html

_______________________________________________
Gnash-dev mailing list
Gnash-dev@gnu.org
http://lists.gnu.org/mailman/listinfo/gnash-dev

Reply via email to