Commit Graph

3171 Commits

Author SHA1 Message Date
Tom Hacohen 78deeca6ba Evas textblock: Fixed the bug with disappearing text with many tabs and text.
I removed a function that caused the issue and made no sense at all, honestly, it didn't make any sense.
I did a lot of testing trying to see if there are any new bugs after the fix, and nothing, so I guess my instincts were correct.
Please if you can, check out the removed function (_layout_walk_back_to_item_word_redo) and see if it makes any sense to you, if it does, please let me know.

SVN revision: 52243
2010-09-14 13:57:26 +00:00
Iván Briano 2bd045dd1f Pending patch from glima, who's on vacations.
Add two new canvas level callbacks: OBJECT_FOCUS_IN/OUT
As we already had callbacks for objects gaining or losing focus, then
two more for the Canvas, now we can have the entire Evas be notified when
any object changes its focused status. The object in question is passed
as the event_info for the callback.


SVN revision: 52196
2010-09-13 18:04:23 +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
Carsten Haitzler 679d566fde actually revert that - not enough testing. need to work on it.
SVN revision: 52029
2010-09-09 06:36:01 +00:00
Carsten Haitzler 4975395633 major clean of the preload stuff. leaks. bugs. nastinessesssss...
SVN revision: 52028
2010-09-09 06:31:29 +00:00
Brett Nash c69628f5af Whitespace --;
SVN revision: 52024
2010-09-09 05:36:56 +00:00
Tom Hacohen 471d682228 Evas textblock: Fixed paragraph char last.
SVN revision: 51985
2010-09-08 10:22:38 +00:00
Tom Hacohen bcc518ed97 Evas textblock: Should not clean the props of the item.
SVN revision: 51984
2010-09-08 10:00:47 +00:00
Tom Hacohen b267a0a03a Evas textblock: Fixed a typo.
SVN revision: 51981
2010-09-08 07:54:00 +00:00
Tom Hacohen 4c716af06a Evas textblock: cursor_geometry_get now also returns the direction of the cursor: rtl/ltr/whatever.
Fixed documentation a bit.

SVN revision: 51979
2010-09-08 07:28:16 +00:00
Lucas De Marchi 85815e306c Fix common misspellings
Following misspellings were fixed:

accomodate->accommodate
achive->achieve
beacuse->because
caluclate->calculate
cant->can't
carefull->careful
convertion->conversion
dependancy->dependency
dependant->dependent
doesnt->doesn't
existant->existent
extention->extension
fucntion->function
impliment->implement
inital->initial
lenght->length
occured->occurred
occuring->occurring
onyl->only
positon->position
possibilty->possibility
postion->position
proccessing->processing
proccess->process
propogate->propagate
recieve->receive
sucessive->successive
teh->the
ther->there
throught->through
thsi->this
wasnt->wasn't
whcih->which
wheras->whereas




SVN revision: 51965
2010-09-08 03:51:24 +00:00
Carsten Haitzler 47fbbe6196 well dldrawarrays doesnthave a limit according to the gl spec - but
drivers may implement one. as such add a check. but check and fix
seems to fail for some rendering. wonder why?



SVN revision: 51923
2010-09-06 13:36:32 +00:00
Tom Hacohen b3982e535d Evas textblock: Update bidi props also when merging nodes and when deleting formats.
SVN revision: 51922
2010-09-06 12:19:17 +00:00
Tom Hacohen 2a073bc103 Evas bidi: Fixed docs.
SVN revision: 51900
2010-09-05 09:45:28 +00:00
Tom Hacohen 2d1d631b48 Evas textblock: Added evas_textblock_cursor_content_get.
SVN revision: 51898
2010-09-05 08:28:58 +00:00
Tom Hacohen cc250013be Evas textblock: Fixed documentation typos. Patch by Jihoon Kim.
SVN revision: 51896
2010-09-05 07:04:59 +00:00
Carsten Haitzler c67a9ac86a and fix gl engine to actually do map for yuv images! :) fix fix.
SVN revision: 51893
2010-09-05 02:58:30 +00:00
Christopher Michael d6da81ea66 Update email address across the board.
SVN revision: 51890
2010-09-04 18:32:59 +00:00
Carsten Haitzler 360fb6511a make priority of thread drop linux only - fallback.
SVN revision: 51886
2010-09-04 14:34:23 +00:00
Carsten Haitzler cc1e39498f back to RR - hope kernel allows us to set minimum realtime pri anyway.
SVN revision: 51877
2010-09-04 05:40:09 +00:00
Carsten Haitzler 69fa1e6386 fix async enabled evas on a single core system.
SVN revision: 51876
2010-09-04 04:12:46 +00:00
Carsten Haitzler e0860db059 dont call mouse out or in if already in or out in evas. causing
infinite loops in edje_viewer! bad!



SVN revision: 51875
2010-09-04 03:53:34 +00:00
Carsten Haitzler 4748c05e38 also rr->other
SVN revision: 51872
2010-09-04 00:54:42 +00:00
Carsten Haitzler c3f73fb210 sched other pls. :)
SVN revision: 51871
2010-09-04 00:52:24 +00:00
Carsten Haitzler 3aedfa6956 preload in bg. low pri th.
SVN revision: 51859
2010-09-03 10:07:20 +00:00
Carsten Haitzler 9a51cd55fa fix raols bug he found map + del obj.
SVN revision: 51857
2010-09-03 08:44:13 +00:00
Carsten Haitzler 28a28cbf27 grrrr. slowness bug. fix. now display bug is back.
SVN revision: 51855
2010-09-03 08:23:38 +00:00
Carsten Haitzler 4c63db37f8 in order to fix some horridibubble things. i had to add 4 api's. ugh.
done. working. now... still 1 more bug. seems to be a changed flag bug
too in dlip 2 test in scrolling list after map anim finished. smaller
bug to deal with now. ugh. bug one bug to the other



SVN revision: 51849
2010-09-03 00:06:56 +00:00
Tom Hacohen 76d197bf6b Evas textblock: Fixed char coord set to work better.
SVN revision: 51842
2010-09-02 13:53:14 +00:00
Tom Hacohen 8b88b84c9f Evas textblock: width should remain the same no matter what's the position, removed that unwanted adjustment.
SVN revision: 51838
2010-09-02 12:01:23 +00:00
Tom Hacohen bc755aa40f Evas textblock: updated docs.
SVN revision: 51837
2010-09-02 11:57:52 +00:00
Tom Hacohen ea9922698e Evas textblock: Fixed compilation without fribidi.
SVN revision: 51836
2010-09-02 11:53:40 +00:00
Tom Hacohen e8c59bf0e8 Evas textblock+font engine: Implemented evas_textblock_cursor_geometry_get.
Fixed evas_common_font_char_coords to work correctly with the NULL character in RTL text.

SVN revision: 51834
2010-09-02 11:49:00 +00:00
Carsten Haitzler b37a2117d1 fix more map+clip goop.
SVN revision: 51830
2010-09-02 09:40:23 +00:00
Vincent Torri 3527150853 evas_object_text*_get: return 0 in case of error
SVN revision: 51829
2010-09-02 05:48:23 +00:00
Carsten Haitzler de6ab93e2a notes. still a bork.
SVN revision: 51827
2010-09-01 22:51:00 +00:00
Carsten Haitzler 6e3d671219 and fix up some related map+clip+smart render issues along with fixing
map boundary bugs as in trying to fix it i added some bugs.



SVN revision: 51826
2010-09-01 22:45:30 +00:00
Carsten Haitzler 29f59da989 comment++
SVN revision: 51824
2010-09-01 21:38:34 +00:00
Carsten Haitzler bfab8b9254 now that mostly fixes this map clip issue... ugh. took a while to come up
with an elegant solution. also it does add overhead to fix. i might be
able to improve the overhead.
 


SVN revision: 51823
2010-09-01 21:37:10 +00:00
Tom Hacohen 4554c06a70 Evas textblock: Fixed compilation without fribidi. <-- For real now. :P
SVN revision: 51809
2010-09-01 14:26:55 +00:00
Tom Hacohen 97b766773b Evas textblock: Fixed compilation without fribidi.
SVN revision: 51808
2010-09-01 14:08:23 +00:00
Tom Hacohen 5e433f1956 Evas bidi: Changed the design a bit so it'll be easy to implement async-rendering with it.
Fixed a couple of issues with unwanted cleans and generally data corruption.
Cleaned up async-rendering.

SVN revision: 51806
2010-09-01 13:15:04 +00:00
Cedric BAIL b4ed699e9e * evas: reenable pipe rendering almost work for me with 16 CPU.
Just don't forget to Spank Tasn.


SVN revision: 51805
2010-09-01 12:25:25 +00:00
Tom Hacohen e6304cafaf Evas textblock: Fixed updating BiDi properties when we delete.
SVN revision: 51801
2010-09-01 08:25:19 +00:00