From: Gustavo S. B. <bar...@gm...> - 2007-08-25 07:55:51
|
Hi, One guy here at the office was debugging his Smart_Object and noticed that show() and move() were being called each time when something not related to his object changed. We isolated the problem and the problem is caused by how edje is marked dirty and then recalculated. Our test case was an Edje with our smart object in the bottom and a text on the top, they were not dependent (rel1 nor rel2), but when the text was changed, the show/move calls were called on the smart object. Today, if we have some change, the whole edje is marked as dirty and then a loop marks both ep->calculated and ep->calculating with FLAG_NONE, then another look checks for ep->calculated != FLAG_XY and then triggers recalculation of that part. In an ideal world, the changed part should be flagged and recalc should act on this part and those that depend on it. My guess is that trade of common case impact versus difficulties to implement don't worth it, maybe there is no dependency graph handy, maybe something else. I see that usually smart objects check for properties and return right at the beginning if they're exactly the same. But in python bindings this will result in extra C call, that will trigger python calls and overhead is bigger there. So, what's the reason for it being like that? Any ideas to improve? Is that easy or will be a pain? How to get the dependency list? Also, should us avoid calling move()/show() and possible others if these properties are already the same? I mean this in Edje layer, not Evas. This would avoid some overhead (although complexity is still high). -- Gustavo Sverzut Barbieri -------------------------------------- Jabber: bar...@gm... MSN: bar...@gm... ICQ#: 17249123 Skype: gsbarbieri Mobile: +55 (81) 9927 0010 |