Hello,
I am working on a project that makes use of edje/evas with large .edj
files. We have problems with performance. Here is an example of an .edj
file we use:
4300 programs
2126 parts
7940 "after" clauses for a program to invoke another programs

At any one time, only a small number of these parts are visible.
For performance and simplicity, we limit the number of Evas_Objects to
one, so all parts are contained in the same edje group.

Even a simple operation with modest graphics updates by 10
edje_object_part_text_set and 10-20 edje_object_signal_emit took
hundreds of ms or more.

I reduced the running time of edje_match_programs_exec by turning on
EDJE_PROGRAM_CACHE. This required me to fix some simple compilation
errors. Is EDJE_PROGRAM_CACHE ever used and considered stable enough?
But after all other optimizations, _edje_match_fn again accounts for 50%
of used CPU time.

As a result of the user pressing a button, I might want to do ten
edje_object_part_text_set and send some signals to update the visible
state. This causes a large number of _edje_recalc that takes a lot of
time (ex: 58 calls in a row taking 10-20 ms each).
Is there a drawback to calling edje_freeze()/edje_thaw() around all my
methods that reacts to user input? (We don't handle keypresses through
evas, so we only want to update the GUI state.)

Doing edje_freeze()/edje_thaw() around our ten edje_object_part_text_set
calls improves the situation, but not nearly good enough.
In some situations we have 20000 invocations of _edje_part_recalc for
some simple graphics operations. Once EDJE_PROGRAM_CACHE is enabled,
this is where the application spends most of its time.

What is your opinion of how worthwile it is to do different
optimizations of Edje for someone like me, with a few days of experience
with the source?
Here are some possibilities:
- Starting the executing of a program internally with signal
"program,start" could refer to the program struct directly instead of
the textual program name. (This would avoid many of the
edje_match_programs_exec calls).
- Isn't it possible to make a faster implementation of
edje_match_programs_exec/_edje_match_fn? Especially our long 'source'
names takes time to resolve.
- or if there are no wildcards in an .edj file, do a more efficient
_edje_match_fn.
- _edje_part_recalc only needs to update related objects
- postpone _edje_recalc to cover multiple updates

Other ideas how to make my project faster?

Thank you,
Anders Petersson


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to