Commit Graph

158 Commits

Author SHA1 Message Date
Cedric BAIL abffaa922d evas: wipe out cache in the right order.
SVN revision: 61956
2011-08-01 14:56:26 +00:00
Mike Blumenkrantz ee754de955 fixes a weird bug exposed somewhere by giant tooltips resulting in the following crash:
#0  0xb7e92786 in evas_cache_image_flush (cache=0x0) at evas_cache_image.c:1353
#1  0xb7e9192e in evas_cache_image_drop (im=0xb6aa4d38) at evas_cache_image.c:913
#2  0xb7ee3d8b in eng_image_free (data=0xb6a020c0, image=0xb6aa4d38) at evas_engine.c:383
#3  0xb7e4b8e6 in evas_object_image_free (obj=0xb7517178) at evas_object_image.c:2478
#4  0xb7e4f403 in evas_object_free (obj=0xb7517178, clean_layer=0) at evas_object_main.c:45
#5  0xb7e41c95 in evas_layer_free_objects (lay=0xb6a5d8b0) at evas_layer.c:80
#6  0xb7e42656 in evas_free (e=0xb6a98cd8) at evas_main.c:204
#7  0xb7f27ad3 in _ecore_evas_free (ee=0xb6ab18e8) at ecore_evas.c:2822
#8  0xb7f24161 in ecore_evas_free (ee=0xb6ab18e8) at ecore_evas.c:839
#9  0xb7df2f7f in _deferred_ecore_evas_free (data=0xb6ab18e8) at elm_win.c:477
#10 0x4b0fd858 in _ecore_job_event_handler (data=0x0, type=14, ev=0xb6a99c58) at ecore_job.c:131
#11 0x4b0f907e in _ecore_event_call () at ecore_events.c:693
#12 0x4b0ff93e in _ecore_main_loop_iterate_internal (once_only=0) at ecore_main.c:1750
#13 0x4b0fe195 in ecore_main_loop_begin () at ecore_main.c:848



SVN revision: 61736
2011-07-26 10:03:07 +00:00
Cedric BAIL 5cbc6350ba evas: add software YUY2 colorspace converter.
NOTE: will shortly learn how to write the corresponding shader and add it soon.


SVN revision: 61548
2011-07-21 10:36:05 +00:00
Carsten Haitzler 36e2d698a4 free on success, not failure of pthread_join.
SVN revision: 60499
2011-06-20 06:44:37 +00:00
Boris Faure e6119fa4d9 remove .cvsignore files
SVN revision: 60246
2011-06-12 21:38:37 +00:00
Cedric BAIL 260718c700 evas: add evas_object_image_load_orientation_set, evas_object_image_load_orientation_get.
SVN revision: 60040
2011-06-07 13:39:13 +00:00
Lucas De Marchi 10237c5b56 evas: fix misspellings
Misspellings found by codespell



SVN revision: 59822
2011-05-30 16:45:08 +00:00
Vincent Torri 4963571e08 Evas : evas_preload.c : Fix compilation when --disable-async-preload is passed to configure.
SVN revision: 59786
2011-05-29 14:34:33 +00:00
Carsten Haitzler 4dd1d5cf62 fix load of data to ACTUALLY set the load error in evas's image
objects. including preload.



SVN revision: 59529
2011-05-19 11:19:22 +00:00
Carsten Haitzler a59cd2a040 pointed out by jiyoun ... but patch wasn't quite right. shouldnt
manually ref-- the old im - should call drop. also... dont make
original dirty as we don't modify it, we just drop (unref) it.



SVN revision: 59431
2011-05-16 02:06:41 +00:00
Vincent Torri c3d5bfb5c5 Evas: cache: missing guards
SVN revision: 59394
2011-05-15 10:11:22 +00:00
Cedric BAIL c2df2df0c6 evas: don't use dead condition.
SVN revision: 59300
2011-05-09 14:42:12 +00:00
Cedric BAIL f91a33ef0d evas: we should not rely on mutex recursive stuff. fix potential source of bug.
SVN revision: 59294
2011-05-09 12:55:57 +00:00
Cedric BAIL 2166ee30c5 evas: use Eina_Condition.
SVN revision: 59288
2011-05-09 10:33:21 +00:00
Carsten Haitzler 57e07025d4 if you preload the same image more than once.. it may/will cause
problems as target is inserter in cache image target list multiple
times. fix by only alloding preload request to go in once.



SVN revision: 59140
2011-05-03 03:20:02 +00:00
Cedric BAIL 902350711d evas: don't use EINA_LOCK_INITIALIZER and improve eina_threads call.
Only call eina_threads_shutdown when thread are dead and not before.

Release and destroy thread lock before calling evas_async_events_process
as you should never have a lock taken in the main loop when calling it.


SVN revision: 59119
2011-05-02 11:28:47 +00:00
Carsten Haitzler a05d575f0a warning-- for eina locks
SVN revision: 59102
2011-05-02 08:24:27 +00:00
Carsten Haitzler e3a69d7c4a and fix up lock goop to work right with improved eina lock goop. i
hope i nixed this bug.



SVN revision: 59086
2011-05-01 13:25:23 +00:00
Carsten Haitzler 3aa2f7bb4a revert some changces to try fix lock issues - they create other
nastier ones.



SVN revision: 59073
2011-05-01 07:26:42 +00:00
Carsten Haitzler d5b8646544 try and remove lock deadlocks...
SVN revision: 59070
2011-05-01 06:58:36 +00:00
Carsten Haitzler 3d4b3d40a9 and try and reduce possible cache deadlocks/issues.
SVN revision: 59064
2011-05-01 06:26:41 +00:00
Carsten Haitzler a41176be3d remove unneded lock+unlock
SVN revision: 59060
2011-05-01 04:44:56 +00:00
Cedric BAIL c517bb20ee evas: use eina_lock.
NOTE: now when preload and ecore_thread are not running all lock
are disabled inside evas.


SVN revision: 58878
2011-04-24 20:25:34 +00:00
Carsten Haitzler c885080057 an initial test at trying pixman instead of evas software rendering.
results... in comments. disabled atm unless u --enable it. only
replaces 1 operation in 2 cases.



SVN revision: 58824
2011-04-22 11:47:14 +00:00
Carsten Haitzler 6152914dd5 fix some nasty image cache issues i've found like double-frees, leaks
etc. etc. in corner-cases. it also re-factors the image cache code to
be much more manageable and understandable with cache/list management
doing the right thing in the internal calls.



SVN revision: 58779
2011-04-21 06:24:27 +00:00
Christopher Michael b42f8940b3 Evas: Fix nasty blank space after return and before semicolon.
NB: Nothing functional, just formatting.



SVN revision: 58708
2011-04-18 16:31:12 +00:00
Carsten Haitzler 7a2f6cd6d6 failure case more efficient
SVN revision: 58683
2011-04-15 09:32:28 +00:00
Carsten Haitzler 4e5231b3f8 fix image double-deref/free when not meant to happen
SVN revision: 58682
2011-04-15 07:49:25 +00:00
Cedric BAIL 25f1cf2d2f evas: fix build with uclibc.
SVN revision: 57991
2011-03-22 14:29:25 +00:00
Cedric BAIL 9eb10c822d evas: that wasn't a typo in fact.
SVN revision: 57989
2011-03-22 13:44:29 +00:00
Cedric BAIL bc554a974d evas: fix typos.
SVN revision: 57988
2011-03-22 13:36:16 +00:00
Carsten Haitzler cc58ee1e6a evas cache system more pedantic about matches and statting.
SVN revision: 57890
2011-03-19 07:08:59 +00:00
Carsten Haitzler 3d26ace1c7 evas: add memory image loader api. ask not how it works or i shall
disembowel you. ktnxbi.



SVN revision: 57736
2011-03-14 10:53:37 +00:00
Carsten Haitzler 19d4f8affc add unload callback - missing event problem that makes it impossible
for client apps that tried to be efficient with preloads to adapt
when the preloaded data is taken away from them. this allows it.
missing callback api bug fix.



SVN revision: 55745
2010-12-24 16:04:27 +00:00
Carsten Haitzler 62c8659619 fixed async preload stall bug! still 1 issue left when caches
(scalecaches) are flushed which can cause a hang until all data is
"loaded back in" again. it's a bit of a doosey actually and so isn't
fixed here.



SVN revision: 55551
2010-12-14 10:22:06 +00:00
Cedric BAIL c9b34768ef * evas: remove useless header.
SVN revision: 54790
2010-11-22 14:19:08 +00:00
Carsten Haitzler 9fe4dfe9b3 put in some disabled cache dump dbg.
SVN revision: 53949
2010-10-28 10:00:22 +00:00
Carsten Haitzler 91946c9430 unsigned INT!
SVN revision: 53853
2010-10-25 10:41:36 +00:00
Fabiano Fidêncio 76e6a7fac6 Remove warnings from evas_preload
Use EINA_INLIST_CONTAINER_GET instead of cast to
(Evas_Preload_Pthread_Worker*) to get  eina_inlist_remove's return.

This works even if the first field of Evas_Preload_Pthread_Worker is no
longer a EINA_INLIST

Patch by: Fabiano Fidêncio <fabianofidencio@gmail.com>



SVN revision: 53826
2010-10-23 22:33:33 +00:00
Cedric BAIL 625d84003e * evas: don't use eina_list in thread that's not safe.
SVN revision: 53359
2010-10-13 15:22:13 +00:00
Lucas De Marchi b5dfed45d8 Use eina_sched_prio_drop()
SVN revision: 52653
2010-09-23 20:40:35 +00:00
Gustavo Sverzut Barbieri d89ebf341b cleanup: internal image information is now unsigned.
There is no meaning in negative values for image loading, marking as
dirty or size, so image internals (cache, entry) were changed to
unsigned, reducing possible errors, particularly with overflow.

engines were converted to the new way, but any 3rd party modules will
still work as they should be using values >= 0 only anyway.

please review.

new cases introduced by "comparison between signed and unsigned" were
fixed in the modules that used cache_entry or Image_Entry dimensions.



SVN revision: 52428
2010-09-18 23:16:25 +00:00
Gustavo Sverzut Barbieri e37c1c7a0a cleanup: fix some "unused" errors from -Wextra.
As we're heading for a release we better remove as much errors as
possible and as the first step I'm removing warnings due unused
parameters, variables and functions. These tend to pollute real errors
spotted by -Wall and clang/llvm.

This does not fixes all, just the clear that could be set to
__UNUSED__, particularly to do (and I'd like some help from the
authors):

 * src/lib/engines/common/evas_font_{draw,query}.c (tasn):
   intl_props is just used while doing BIDI, but also used in other
   #ifdef blocks :-/

 * evas_map_* (raster):
   huge amount of warnings, code is quite confusing and thus I'm not
   touching it. I have no idea whenever the commented blocks or extra
   parameters are intended to be used or no.

 * src/modules/engines/fbevas_fb_main.c (raster?):
   is fb_setvt() to be used? If not do you mind removing it?

 * src/modules/engines/gl_{common,x11} (raster):
   huge amount of warnings, code is quite nested and full of #ifdefs
   that does not help to give a clear picture of what's going on.

 * src/bin/evas_cserve_main.c (raster):
   I could have ignored most of the errors, but is the code correct? I
   mean, there is no unload of images being applied. If you confirm
   none of those warnings are harmful I can flag them as unused.

 * src/lib/engines/common_8 (dottedmag):
   lots of unused functions that were acquired from common_16, they
   are unused and if they will not, then they should be removed.



SVN revision: 52421
2010-09-18 19:17:41 +00:00
Lucas De Marchi 9c091e1714 Assert cache->usage never becomes negative
Assert cache->usage never becomes negative as was occurring before the
fix in r52149.

Just in time, the fix in r52149 was made by Ulisses, not me.



SVN revision: 52190
2010-09-13 13:58:34 +00:00
Lucas De Marchi d32c0f99bd Fix accounting of memory usage in image cache
Memory usage was not accounted right because
cache->func.mem_size_get(ie) returns 0 when called after
cache->func.destructor(ie). Thus the total memory used, kept on
cache->usage, is never decremented in _evas_cache_image_remove_activ()

This implies that cache->usage will keep growing and eventually it will
overflow, becoming negative. So evas_cache_image_flush() will not do its
job because cache->limit (assumed to be positive) will not be less than
cache->usage anymore. So the total memory allocated will start to grow
and the limit won't be respected.

Strictly speaking, it's not a leak, since all the memory will be
eventually freed when evas shutdown is called, but the program might be
killed by over allocating memory. This is caught by valgrind with the
massif tool. The graphic below shows that in the end a huge memory amount
is allocated. This is the moment when cache->usage became negative.

MB
26.04^                                                                   #
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
|                                                                   #::::
| :::::::::::::::::@@:::::::::@:::@::::::@::::::::::::::::::::::::::#::::
| : ::: ::: ::: :::@ :: ::: : @:: @:: :::@: :: ::: : : :: :: : ::: :#::::
0 +----------------------------------------------------------------------->Gi
0                                                                   54.83

This patch is a one line fix, which swaps the calls to
_evas_cache_image_remove_activ() and cache->func.destructor() making
cache->limit to be respected.



SVN revision: 52149
2010-09-10 23:00:26 +00:00
Lucas De Marchi 19c1b1e899 Fix priority dropping
Lowering priority was wrong. Some bugs:

1) You don't lower the priority by setting the scheduler policy to some
   of the real-time ones (SCHED_RR or SCHER_FIFO). If you do so, you are
   actually increasing the priority of the workers and your main thread
   you be preempted and stalled until the workers complete their job.
   Fortunately this will only happen if your programming is running as
   root, as normal users (without CAP_SYS_NICE) are unable to set
   priority to real-time values.

2) setpriority() and getpriority() are not part of pthread and you can't
   use the id returned by pthread. Manpage explicitly says so on
   pthread_self(3):
   "The  thread ID returned by pthread_self() is not the same thing as the
       kernel thread ID returned by a call to gettid(2)."

   Since glibc does not have a gettid, here we are using
   syscall(SYS_gettid)

This patch was tested with the program below. Compile and run:
   $ gcc p_hello2.c -o p_hello2 -lpthread
   $ ./p_hello2 10

You'll see that the main thread remains with its priority and threads
created by the main thread change their own niceness.

 #include <errno.h>
 #include <pthread.h>
 #include <sched.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/resource.h>
 #include <sys/syscall.h>
 #include <sys/time.h>
 #include <sys/types.h>

/* Lower priority of current thread.
 *
 * It's used by worker threads so they use up "bg cpu" as it was really intended
 * to work. If current thread is running with real-time priority, we decrease
 * our priority by 5. This is done in a portable way.  Otherwise we are
 * running with SCHED_OTHER policy and there's no portable way to set the nice
 * level on current thread. In Linux, it does work and it's the only one that is
 * implemented.
 */
static void
_ecore_thread_pri_drop(void)
{
   struct sched_param param;
   int pol, prio, ret;
   pid_t tid;
   pthread_t pthread_id;

   pthread_id = pthread_self();
   ret = pthread_getschedparam(pthread_id, &pol, &param);
   if (ret)
     {
        fprintf(stderr, "Unable to query sched parameters\n");
        return;
     }

   if (pol == SCHED_RR || pol == SCHED_FIFO)
     {
        prio = sched_get_priority_max(pol);
        param.sched_priority += 5;
        if (prio > 0 && param.sched_priority > prio)
           param.sched_priority = prio;

        pthread_setschedparam(pthread_id, pol, &param);
     }
 #ifdef __linux__
   else
     {
        tid = syscall(SYS_gettid);
        errno = 0;
        prio = getpriority(PRIO_PROCESS, tid);
        if (errno == 0)
          {
             prio += 5;
             if (prio > 19)
                prio = 19;

             setpriority(PRIO_PROCESS, tid, prio);
          }
     }
 #endif
}

/*
 * p_hello.c -- a hello program (in pthread)
 */
 #define MAX_THREAD 1000

typedef struct {
    int id;
} parm;

void *hello(void *arg)
{
    parm *p=(parm *)arg;
    pid_t tid;
    int prio;
    tid =  syscall(SYS_gettid);
    printf("[%d] Hello from node %d\n", tid, p->id);
    pthread_yield();

    printf("[%d] HELLO!\n", tid);

    _ecore_thread_pri_drop();

    prio = getpriority(PRIO_PROCESS, tid);
    printf("[%d] New nice value: %d\n", tid, prio);
    return (NULL);
}

int main(int argc, char* argv[]) {
    int n,i;
    pthread_t *threads;
    pthread_attr_t pthread_custom_attr;
    parm *p;

    pid_t tid;
    int prio;

    if (argc != 2)
    {
        printf ("Usage: %s n\n  where n is no. of threads\n",argv[0]);
        exit(1);
    }

    n=atoi(argv[1]);

    if ((n < 1) || (n > MAX_THREAD)) {
        printf ("The no of thread should between 1 and %d.\n",MAX_THREAD);
        exit(1);
    }

    threads = (pthread_t *)malloc(n * sizeof(*threads));
    pthread_attr_init(&pthread_custom_attr);

    p = (parm *)malloc(n * sizeof(parm));
    /* Start up thread */

    tid = syscall(SYS_gettid);
    for (i=0; i<n; i++) {
        prio = getpriority(PRIO_PROCESS, tid);
        printf("[%d] root thread nice value: %d\n", tid, prio);

        p[i].id=i;
        pthread_create(&threads[i], &pthread_custom_attr, hello, (void *)(p+i));
    }

    /* Synchronize the completion of each thread. */

    for (i=0; i<n; i++) {
        pthread_join(threads[i],NULL);
    }
    free(p);

    return 0;
}



SVN revision: 52040
2010-09-09 12:45:39 +00:00
Carsten Haitzler 9a4aa69e71 return NULL after if to avoid other lku
SVN revision: 52033
2010-09-09 07:27:56 +00:00
Carsten Haitzler 40e57dd2d7 that should have been an LKU
SVN revision: 52032
2010-09-09 07:23:55 +00:00
Carsten Haitzler 5f6add7b2f and some final fixes anc cleanups - tested.
SVN revision: 52031
2010-09-09 07:14:11 +00:00
Carsten Haitzler c4ee82f6a7 lots of cleanups... actually tested! :)
SVN revision: 52030
2010-09-09 07:08:10 +00:00