On Jan 10, 2008 9:51 AM, Cedric BAIL <[EMAIL PROTECTED]> wrote:
>
> On Jan 7, 2008 2:44 PM, Gustavo Sverzut Barbieri <[EMAIL PROTECTED]> wrote:
> > On Jan 7, 2008 10:43 AM, Cedric BAIL <[EMAIL PROTECTED]> wrote:
> > > On Jan 7, 2008 5:13 AM, Gustavo Sverzut Barbieri <[EMAIL PROTECTED]> 
> > > wrote:
> > > > On Jan 4, 2008 8:43 PM, Nathan Ingersoll <[EMAIL PROTECTED]> wrote:
> > > > > On Jan 4, 2008 4:02 PM, Cedric BAIL <[EMAIL PROTECTED]> wrote:
> > > > > >   I am looking for a way to improve edje file load time. Right now a
> > > > > > large amount of time is logically lost in 
> > > > > > _eet_data_descriptor_decode.
> > > > > > So looking at its profile, most of the time is lost in manipulating
> > > > > > string.
> > > > >
> > > > > Before getting into the details of your change ideas, could you
> > > > > explain the use case that you are profiling and the motivation behind
> > > > > it? For instance, are you seeing a slow load time when initially
> > > > > starting an application, or is this a case where various edje files
> > > > > are decoded over time, or accessing multiple data fields, etc?
> > >
> > > Sorry Nathan, I did reply directly to you and not to the mailing, it
> > > was a mistake.
> > >
> > > So I am profiling the time needed by an edje object to become
> > > visible/active to the end user after the edje_object_file_set. I was
> > > only testing with some quite complex edje file with many swallowed
> > > object. I just did test with multiple edje file at the same time and
> > > the profile result look the same.
> > >
> > > > Nathan points are valid, of course, but I'm really interested in this
> > > > kind of stuff, because it's mostly "for free" if you can mmap it, also
> > > > it will help on high memory pressure situations, since these regions
> > > > would be file-based and can be evicted and reloaded when app is used
> > > > again (not a situation I'd like, but would help on embedded systems a
> > > > bit).
> > >
> > > Yes, it should help and reduce memory presure on embedded systems.
> > >
> > > > Cedric, something else related is trying to group these strings near,
> > > > so when they're loaded they'd be on the same memory page, this would
> > > > help disk seeks and the issue I pointed before. Any knowledge of this
> > > > area?
> > >
> > > Right now, string are repeated a lot in the eet file and they are at
> > > many different place. If you want to see this, just change the call to
> > > eet_data_write inside edje_cc_out.c to not compress data.
> > >
> > > So packing them together in one section and reducing them to only one
> > > occurence inside the eet file could be another improvement. But the
> > > way I see it (adding a new kind of section at the end of the eet file
> > > and refering to it) will break backward compatibility (eet file using
> > > this will not be loadable with previous libeet). It could solve some
> > > of the issue you are pointing.
> > >
> > > A side effect of this solution, we will not need to tell the
> > > application anything about the char* we are giving to it. Because all
> > > of them will be in a uncompressed section available as long as the eet
> > > file is referenced somewhere. This solution break eet file
> > > representation but not eet application.
> >
> > I'm not sure others will like, but I do like this idea, and given
> > raster's word that "after E is marked stable, it will have to be
> > stable, so break things before it's released", I really think we
> > should fix this now (and break compat) rather than staying with this
> > for some years more.
>
> I took a little bit more time studing the internal of eet and I think
> we could change the format to the following layout :
>
> /* NB: all int's are stored in network byte order on disk */
> /* file format: */
> int magic; /* magic number ie 0x1ee7ff42 */
> int num_string_entries; /* number of string entries to follow */
> int num_directory_entries; /* number of directory entries to follow */
> struct
> {
>    int offset;
>    int len;
>    int hash;
> } string[num_string_entries];
> struct
> {
>    int offset; /* bytes offset into file for data chunk */
>    int flags; /* flags - for now 0 = uncompressed, 1 = compressed */
>    int size; /* size of the data chunk */
>    int data_size; /* size of the (uncompressed) data chunk */
>    int name_index; /* index of the name in the string entries */
> } directory[num_directory_entries];
> /* first all null terminated string */
> /* and now startes the data stream... */
>
> This format will not be readable by older version of libeet, that's
> the reason behind changing it's magic value. I also put all the
> strings after the directory structure so their is more chance to have
> aligned data and during use they should have more chance to be in the
> same memory page.
>
> I think the change are quite small inside eet. And it should be
> possible to still be able to open old eet file if necessary, but this
> will increase the code complexity of the library.
>
> Before I start doing implementing this change, I would like to know
> more opinion on this subject. For information, follow the current eet
> file format :
>
> /* NB: all int's are stored in network byte order on disk */
> /* file format: */
> int magic; /* magic number ie 0x1ee7ff00 */
> int num_directory_entries; /* number of directory entries to follow */
> int bytes_directory_entries; /* bytes of directory entries to follow */
> struct
> {
>    int offset; /* bytes offset into file for data chunk */
>    int flags; /* flags - for now 0 = uncompressed, 1 = compressed */
>    int size; /* size of the data chunk */
>    int data_size; /* size of the (uncompressed) data chunk */
>    int name_size; /* length in bytes of the name field */
>    char name[name_size]; /* name string (variable length) */
> } directory[num_directory_entries];
> /* and now startes the data stream... */

It's fine for me, just one minor thing: what was the use of
bytes_directory_entries? Is it ok to leave it out?


-- 
Gustavo Sverzut Barbieri
--------------------------------------
Jabber: [EMAIL PROTECTED]
   MSN: [EMAIL PROTECTED]
  ICQ#: 17249123
 Skype: gsbarbieri
Mobile: +55 (81) 9927 0010

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to