Commit Graph

94 Commits

Author SHA1 Message Date
Lucas De Marchi 0a4617ae38 FORMATTING
* Remove vim modelines:
 find . -name '*.[chx]' -exec sed -i '/\/\*$/ {N;N;/ \* vim:ts/d}' \{\} \;
 find . -name '*.[chx]' -exec sed -i '/\/[\*\/] *vim:/d' \{\} \;

* Remove leading blank lines:
 find . -name '*.[cxh]' -exec sed -i '/./,$!d'

If you use vim, use this in your .vimrc:
set ts=8 sw=3 sts=8 expandtab cino=>5n-3f0^-2{2(0W1st0



SVN revision: 50816
2010-08-04 16:57:32 +00:00
Christopher Michael d061f6229c Remove some unused variables/dead assignments.
Fix some formatting while I am here.



SVN revision: 50717
2010-07-31 17:06:55 +00:00
Christopher Michael 428d5c05ab 'cache' is unused here.
SVN revision: 50710
2010-07-31 05:44:15 +00:00
Gustavo Sverzut Barbieri 7521047f09 Fix invalid access if using async-render
Ouch, that was nasty! src/lib/cache/evas_cache_image.c was assuming
all Image_Entry were RGBA_Image (why?!?!?), thus doing the cast and
having mutexes and other to operate on garbage (possibly crashing due
segv). This happened to be the case with Soft16_Image used by
software_16 engines.

I'm not sure, but this may fix problems that people noticed with
async-render hanging their systems even if not explicitly enabled
during runtime.

I also found it quite strange the number of locks required by this
code! Clearly we could use macros to simplify and avoid bugs, but
maybe some atomic_inc/dec code should be used to remove half of the
mutexes in that code?

/me wonders what kinds of bug more we can expect from this code :-/



SVN revision: 50300
2010-07-16 22:52:04 +00:00
Lucas De Marchi 2a84379ba9 Remove unneeded code with notnull.cocci script
The notnull.cocci script from Coccinelle finds places where you check if a
variable is NULL, but it's known not to be NULL. The check can be safely
removed. For example, this code would be caught by notnull:

if (!var) return;
if (var && var->fld) { ... }

It's needless to check again if var is not NULL because if it's in fact NULL,
it would have returned on the previous "if". This commit removes all the
trivial places where this pattern happens. Another patch will be generated for
the more complex cases.


SVN revision: 50241
2010-07-14 02:05:47 +00:00
Vincent Torri 5ab3172ca0 it seems that gcc 4.5.0 on Windows does not like my function pointers
SVN revision: 49592
2010-06-09 14:43:40 +00:00
Vincent Torri 558daff395 use function pointers
SVN revision: 49563
2010-06-08 06:08:17 +00:00
Cedric BAIL 5685faac42 * evas: make it possible to call unload_all from surface_alloc.
SVN revision: 49448
2010-06-04 15:21:12 +00:00
Carsten Haitzler d17e840e13 aaah yes - the flush will ... possibly delete the image - in fract almost
definitely as it got to 0 fref. unlocking the image is bad as it was just
deleted. do the delete (cache fluch) after unlock.



SVN revision: 49089
2010-05-21 07:44:07 +00:00
Carsten Haitzler eaad0eb095 big patch from Samsung SAIT (Advanced research group) for async multi-frame
rendering. to turn on:

1.
configure with --enable-async-render
2.
export EVAS_RENDER_MODE=non-blocking
  
presto. necessitates some api swizzling (thus the expedite. ecore etc. changes)

the kind of results you get on a desktop:

http://www.rasterman.com/files/evas-async-vs-none.html



SVN revision: 49087
2010-05-21 07:10:45 +00:00
Carsten Haitzler a6e4ee23f5 oops. fix scalecache issue - would do a LOT of unload/reload thanks to extra
dump code. moved into dump code as opposed to unload.



SVN revision: 47982
2010-04-13 03:00:29 +00:00
Carsten Haitzler afe65d7c0a add ability to dump engine coontents (if engine supports it). this means
unload images it has loaded from disk, unload fonts, and more. dump dump dump!



SVN revision: 47947
2010-04-12 08:23:53 +00:00
Vincent Torri 9ed7f52215 remove unneeded semi-colon
SVN revision: 47529
2010-03-28 12:24:10 +00:00
Cedric BAIL 3d27a7b9e4 * evas: improve thread rendering by moving image loading in worker thread.
SVN revision: 47434
2010-03-24 19:07:59 +00:00
Vincent Torri 20d5a675db * undef close() and open() in evas_module also for mingw
* init Evil in eina as it uses fcntl() with the winsock2 library
 * fix compilation of evas_cache_image.c with mingw
 * formatting


SVN revision: 45724
2010-01-30 00:09:29 +00:00
Christopher Michael d03271bf4a Fix compiler warning about discarding pointer type.
SVN revision: 45021
2010-01-10 17:59:53 +00:00
Cedric BAIL 7c00860cc1 * evas: Loader can now tell if they could be used in another thread or not.
xpm and svg loader don't allow preload at this time.


SVN revision: 44714
2009-12-24 13:15:34 +00:00
Gustavo Sverzut Barbieri 51c00c6526 fix evas image loading error reporting.
Evas image load was always reporint "generic" error, since it was
disconnected from actual loader modules.

This commit will break the module loader API (as it's restricted to
inside Evas, this should be no problem). The return was turned into
"Eina_Bool" for clarity, while an extra "int *error" is responsible to
report errors. This approach was choosen to force compiler warnings
and to try avoid mistakes as EINA_FALSE == EVAS_LOAD_ERROR_NONE and
thus we'd get opposite behavior if something slips.

Most loaders play well, except by eet that does not provide means to
know if the file open failed due missing file, incorrect format or
corrupted file :-(

Please report any issues. I added eina_log debugging to loader
functions, just run your Evas application as:

     EINA_LOG_LEVELS=evas_main:4 your_app




SVN revision: 44666
2009-12-22 23:11:57 +00:00
Cedric BAIL 579f2e5447 * evas_preload, ecore_thread: On memory allocation failure do call the cancel function too.
SVN revision: 44624
2009-12-21 12:25:32 +00:00
Carsten Haitzler bfd91eb67f remove excess tex update on dirty. some formattign and naming too.
SVN revision: 44592
2009-12-20 06:23:13 +00:00
Vincent Torri fdae6605b6 delete_me member is available on when async preload is available
SVN revision: 44564
2009-12-19 10:33:39 +00:00
Cedric BAIL b0ffd95878 * evas: Complete rewrite of evas image preload code.
This code should be cleaner and easier to understand. It also provides
	the ability to spread image decompression on all CPU core. I currently
	set it to the exact number of CPU core you have in your machine, if you
	find case where it slow down your EFL apps too much, we can reduce this
	to give at least one core to evas.
	   All previous bugs related with async preload are gone, hopefully no
	new one are in. Please report any problem with backtrace to me.


SVN revision: 44537
2009-12-18 11:03:31 +00:00
Cedric BAIL 67a1af400c * evas_cache_image: At this point link to the cache is destroyed.
SVN revision: 44051
2009-11-30 13:26:46 +00:00
Vincent Torri c6458f9e7f fix evas compilation when async preload is disabled
SVN revision: 43514
2009-11-07 18:19:44 +00:00
Cedric BAIL a82d161c27 * evas_cache_image: Attempt to make a definitiv fix for race condition on cancel.
WARNING: If you continue to see any segv in E17, please report to me with a backtrace. Thanks.


SVN revision: 43465
2009-11-05 17:38:51 +00:00
Carsten Haitzler bf871d0975 try uncondiutionalyl remove dropped images from preload queue
SVN revision: 43464
2009-11-05 16:05:29 +00:00
Vincent Torri e5046c8846 Fix some warnings. I don't touch map code for now.
SVN revision: 43218
2009-10-22 22:22:10 +00:00
Carsten Haitzler 526b6e8f3b and fix async load thing hanging around... put in shared queue and be able to
remove targets from the queue.



SVN revision: 42754
2009-09-28 03:51:21 +00:00
Carsten Haitzler aea9bb4064 i KNOW there is a bug here... the question is.. how to fix it?
SVN revision: 42692
2009-09-25 09:06:13 +00:00
Vincent Torri cefbd7abf5 use size_t instead of int
SVN revision: 42640
2009-09-23 06:45:39 +00:00
Carsten Haitzler 85c9ee14e1 and much pain and ganshing of teeth.. this took too long... no more hanging
preload cancels. u can cancel a preload (explicitly or implicitly) with no
lock penalty. now i can get on with my other fun.



SVN revision: 42616
2009-09-22 07:02:14 +00:00
Carsten Haitzler 65f147aa81 make loaders use "big image" macro to detect an image that is going to just
be way too big to ever allocate. probably code can do with other fixes too.

also make jpeg loader rudametarily understand load regions. very brute-force.
but enough for just this moment to do testing.



SVN revision: 42507
2009-09-16 09:48:05 +00:00
Carsten Haitzler f780cc2c8f add "region" load opt. no loader handles it... yet
SVN revision: 42494
2009-09-15 13:34:12 +00:00
Carsten Haitzler 7ee7fb5604 1. make max image size a #define
2. max image size > 65536x65536
3. fix cserve leak
4. fix cserve+async load to work together.



SVN revision: 42406
2009-09-11 13:44:53 +00:00
Cedric BAIL 6d0ee81526 * evas: Remove Evas_Bool.
SVN revision: 41067
2009-06-17 10:01:52 +00:00
Carsten Haitzler 47f6f036c1 fix load opts to only unload/reload if opts changed for cserve
SVN revision: 40573
2009-05-10 03:06:49 +00:00
Carsten Haitzler 46e8aa1b0d shared cache server++
is it ok?

1. it can be --disabled in evas's configure, but i think it works WITHOUT
disabling it (runtime) as it falls back to the old way of loading
2. it may cause build problems on some platforms - without it being enabled
we won't find out, so enable.
3. it needs enabling runtime to make use of it so it should be safe for now
until you enable it.

what is it?

it is a SHARED cache server - that means images loaded are loaded BY the
cache server (not by the actual process using evas). images are shared via
shared memory segments (shm_open + mmap). this means only 1 copy is in all
ram at any time - no matter how many processes need it , and its only loaded
once. also if another app has already loaded the same data - and its in the
cache or active hash, then another process needing the same stuff will avoid
the loads as it will just get instant replies from the cache of "image already
there". as it runs in its own process it can also time-out images from the
cache too.

right now you enable it by doing 2 things

1. run evas_cserve (it has cmd-line options to configure cache etc.
2. export EVAS_CSERVE=1 (im the environment of apps that should use the cache
server).

it works (for me) without crashes or problems. except for the following:

1. preloading doesnt work so its disabled if cserve is enabled. thisis
because the load threads interfere withthe unix comms socket causing
problems. this need to really change and have the cserve know about/do
preload and let the select() on the evas async events fd listen for the
unsolicited reply "load done". but it's not broken - simple preloads are
syncronous and forced if cserve is enabled (at build time).
2. if cserve is killed/crashes every app using it will have a bad day. baaad
day. so dont do it. also cserve may be vulnerable to apps crashing on it - it
may also exit with sigpipe. this needs fixing.
3. if the apps load using relative paths - this will break as it doesnt
account for the CWD of the client currently. will be fixed.
4. no way to change cache config runtime (yet)
5. no way to get internal cache state (yet).
6. if cache server exist - it wont clean up the shmem file nodes in /dev/shm
- it will clean on restart (remove the old junk). this needs fixing.

if you fine other issues - let me know.

things for the future:

1. now its a separate server.. the server could do async http etc. loads too
2. as a server it could monitor history of usage of files and images and
auto-pre-load files it knows historically are loaded then whose data is 
immediately accessed.
3. the same infra could be used to share font loads (freetype and/or 
fontconfig data).
4. ultimately being able to share rendered font glyphs will help a lot too.
5. it could, on its own, monitor "free memory" and when free memory runs
load, reduce cache size dynamically. (improving low memory situations).
6. it should get a gui to query cache state/contents and display visually.
this would be awesome to have a list of thumbnails that show whats in the
cache, how many referencesa they have, last active timestamps etc.

blah blah.

please let me know if the build is broken asap though as i will vanish
offline for a bit in about 24hrs...



SVN revision: 40478
2009-05-01 07:11:07 +00:00
Carsten Haitzler b4465ec30a use macros for lock/unlock in .c file
SVN revision: 39473
2009-03-14 05:08:08 +00:00
Gustavo Sverzut Barbieri 23b98358b0 sorry, let's keep name coherent with others.
SVN revision: 38750
2009-01-23 22:23:03 +00:00
Gustavo Sverzut Barbieri d58031f5fc evas preload: do not lock mutex aready locked.
SVN revision: 38749
2009-01-23 22:21:04 +00:00
Gustavo Sverzut Barbieri 018af5b44c Fix image cache shutdown.
we should just remove entries pending preload from the cache being
shutdown, not all of them.

this is untested as it is hard to force this situation, but should be
more correct than the previous.



SVN revision: 38747
2009-01-23 21:08:35 +00:00
Gustavo Sverzut Barbieri 14a88b52d4 evas preload: keep the preload thread alive.
before, when no more images were to be preloaded asynchronously, the
thread exited, but were not collected. This leads to a huge leak if
the process is doing aggressive use of image preloading (ie: photo
wall).

collecting dead threads in a proper way (read: without race
conditions) is a bit harder than keeping just one thread alive,
forever. As we do that for evas_pipe (the renderer), let's do the same
with preload and save code.



SVN revision: 38746
2009-01-23 20:36:04 +00:00
Gustavo Sverzut Barbieri 763999fa8b Remove all images pending preload before cache shuts down.
SVN revision: 38703
2009-01-23 00:09:10 +00:00
Gustavo Sverzut Barbieri 83783665f5 Let's try to shutdown cache and fix delete problem.
SVN revision: 38702
2009-01-23 00:08:11 +00:00
Cedric BAIL 5621e47f1c Correctly cancel each image object and not all at once.
SVN revision: 38658
2009-01-20 14:56:37 +00:00
Cedric BAIL 011bc06ecc * evas/src/lib/cache/evas_cache_image.c,
* evas/src/lib/include/evas_common.h: Now you should receive a async call for each image object that does async preload.


SVN revision: 38643
2009-01-19 14:06:09 +00:00
Gustavo Sverzut Barbieri 363ddc283d fix locking around entry_surface_alloc.
we must make sure flags are consistent with actual values, so lock
around use and set of these variables as well.



SVN revision: 38322
2008-12-26 12:50:55 +00:00
Gustavo Sverzut Barbieri 68bd5fb68b Possible last try to fix async imagre preload race conditions.
1 - use inlist as regular list uses non-thread safe mempool;
 2 - lock around image loading, so if main thread requests pixels right
     before worker thread is loading them, you don't get ie->info.module
     to NULL while it would be used (triggered from engines/common).
     Maybe this should be handled by a global mutex elsewhere instead of
     per-image mutex, but it has more granularity now.
 3 - emit "preloaded" callback if it was canceled to be loaded from main
     thread.

Please someone review these changes.



SVN revision: 38312
2008-12-23 23:07:48 +00:00
Gustavo Sverzut Barbieri 586979c07b fix bugs spotted by clang static analyser.
We had some problems with preload and after running LLVM's CLang
Static Analyser we found out that current->target could be NULL after
loop.

Also fixed some GCC and CLang warnings, kudos to these wonderful tools
that "Saved The Day".

PS: we should put some CLang Static Analyser results so others can
help fix other parts of E.



SVN revision: 38293
2008-12-23 18:14:16 +00:00
Gustavo Sverzut Barbieri 089b1c7925 fix image preload signature and make it callback if already preloaded.
evas_object_image_preload() should not use object as const because it
will mdofiy the object state (so it's semantic makes more sense).

if data was already loaded, then callback before ignored it (return).



SVN revision: 38246
2008-12-20 13:39:15 +00:00