A sampling of starting a Flex app shows %95 of the time under this method. There's some kind of combinatorial nightmare happening here...
Maybe we need to remember work we've done during TraitsData loading? Like we should only have to "check" things about a type once, not everytime a type is loaded into the cache, like flags on TraitsEnv could record work done already. Maybe not directly related to this bug but might be a future work item, I see Flex apps causing a fair amount of churn in that 32 item cache.
I think the code is just insanely stupid, doing many redundant rechecks. It wasn't a factor in shallow inheritance hierarchies so we didn't notice it. Working on a fix now.
Created attachment 325609 [details] [diff] [review] Patch Tommy, I'm still testing this fix but I think it greatly improves the situation... try it and see if it helps. (Also includes two unrelated fixes to avm.cpp and WeakRef that will be documented momentarily)
Comment on attachment 325609 [details] [diff] [review] Patch just found a flaw, hold on...
Created attachment 325613 [details] [diff] [review] Patch Same as before, but fix an incorrect assert, avoid redundant generation of TraitsData, and enlarge the TraitsData cache.
Attachment #325613 - Flags: review?(treilly)
Attachment #325613 - Flags: review?(treilly) → review+
Status: ASSIGNED → RESOLVED
Last Resolved: 11 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.