pthread_create can fail if to much pthread are pending. As pthread_join
is only called when the main loop can flush the async call list, there was
a possibility for edje_cc to run out of thread due to that. We know
force the flush of the async call list and so call pthread_join when
pthread_create fail.
SVN revision: 71555
NOTE: I am now all for removing this lock. They trigger crash,
are not implementing the feature they are advertising, are not
maintained and impossible to fix.
SVN revision: 68987
This gets rid of a lot of temporary variables and cleans the code up again...
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
SVN revision: 62342
Thread safety is disabled by default.
Enable it with --enable-thread-safety
Should cover timers, events, animators, idlers and fd handlers.
Tested with Enlightenment and elementary_test.
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
SVN revision: 61851
Replace with if statements and stub epoll calls, and let the
compiler optimize out the stub code.
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
SVN revision: 61081
Rearrange the the order of startup to avoid triggering
the thread checks in ecore_event_type_new().
Signed-off-by: Mike McCormack <mj.mccormack@samsung.com>
SVN revision: 61040
if epoll support is not enabled, the function does nothing
this will be removed prior to actual release, but will be very useful in finding the last epoll bugs until then
SVN revision: 55791
Instead of relying on unix time, use a monotonic clock provided by
clock_gettime(). If a monotonic clock is not available, it will fallback
to CLOCK_REALTIME or unix time if neither is available.
The impact is that now it only makes sense to call ecore_time_get() or
ecore_time_loop_get() if the value retrieved is intended to be used as
relative to previous/posterior measurements. If an absolute value is
needed, the right function to call now is ecore_time_unix_get() which
will give the number of seconds since Jan 1st, 1970, 12:00AM.
SVN revision: 52824
This patch implements the ecore main loop in terms of the GTK main loop, so
ecore is a layer on top of glib.
Compared the the current glib integration in ecore, this has the added
advantage of allowing use of EFL libraries in GTK.
SVN revision: 51113
note: I've chosen to consolidate typedefs where possible to simplify things
my time is limited this week, so feel free to expand on the doxy stubs I've added if you know what they do
SVN revision: 50803
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
Add reference counting to events, event filters and event handlers so
they can recurse main loops.
Note that the required "continuation" when entering main loops is not
there, thus recursion will restart and this will fail badly in lots of
cases. This should be fixed in future commits.
SVN revision: 46417
We should start doing unit-test for ecore, accumulating these
problems. Follows the test case:
#include <Ecore.h>
#include <Eina.h>
static int _log_dom;
#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__)
static int quiter(void *data)
{
INF("quit!");
ecore_main_loop_quit();
return 1;
}
static int idler(void *data)
{
INF("idler");
return 1;
}
static int cb1(void *data)
{
INF("cb1");
ecore_timer_add(0.0, quiter, NULL);
return 0;
}
int main(void)
{
ecore_init();
_log_dom = eina_log_domain_register("test", EINA_COLOR_CYAN);
/*
* Create a main loop with just idlers, there is a special case
* for just idlers without timers in ecore.
*
* From idler, add a timer that quits the application. It should
* always quit.
*
* If it does not quit, then there is a bug of new timers not
* being immediately detected and system never exits idle.
*/
INF("main: begin");
ecore_idler_add(cb1, NULL);
ecore_idler_add(idler, NULL);
ecore_main_loop_begin();
INF("main: end");
return 0;
}
SVN revision: 46405
* add 2 internal ecore_exe functions as ecore_signak.c uses Ecore_Exe members
no test is done in those 2 functions
* remove standard headers from ecore_private.h
SVN revision: 44862
that's it, it's here... tested and works fine, please try with your
favorite gmainloop dependent library and report problems. Suggestions:
* GConf to access Gnome and its applications settings.
* GtkSettings to access other properties of Gnome and its applications.
* GUPnP (okay, we have EUPnP, but they have more features so far)
* Rygel, based on GUPnP.
* Libsoup, SOAP and HTTP access, useful for web access and required
by other libraries.
* Mojito, by Moblin, access to various web2.0 services like flickr,
picasa, twitter...
And last but not least, this enables Flash plugin on WebKit-EFL and
may enable us to get Google Gadgets sooner (before someone writes a
proper EFL backend).
Support is auto-detected at compile time but can be disabled with
--disable-glib. Runtime support is not enabled by default (so
compiling with it will just link yet another library), one needs to
call ecore_main_loop_glib_integrate() to do so.
Thanks to INdT folks that provided the initial implementation. I
rewrote it to make it correct, but the idea was good.
SVN revision: 42825
that still integrate cleanly with the EFL.
ecore_thread_run need two callbacks :
* func_heavy is called from another thread and should not use the
EFL except Eina, but carefully.
* func_end is called when func_heavy is done, but from inside ecore
main loop, so you can at this point call every EFL functions without
fear.
Note :
The system automatically detect how many CPU you have and will spread
the load on all of them.
You must not assume that the result will come in the same order you
requested it. Depend on each CPU load and how heavy the function on it
are.
SVN revision: 41555