raster pushed a commit to branch efl-1.22.

http://git.enlightenment.org/core/efl.git/commit/?id=4aed68ee3f0598f2c45c88c8d00f5b02448a96f2

commit 4aed68ee3f0598f2c45c88c8d00f5b02448a96f2
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Fri Jun 14 22:49:25 2019 +0100

    edje messages - track all messages for an edge obj in the edje
    
    this is the basis for some future speedups to avoid full message queue
    walks - get this right first.
---
 src/lib/edje/edje_message_queue.c | 7 +++++++
 src/lib/edje/edje_private.h       | 3 +++
 2 files changed, 10 insertions(+)

diff --git a/src/lib/edje/edje_message_queue.c 
b/src/lib/edje/edje_message_queue.c
index cb424c3de3..e92cbabfc5 100644
--- a/src/lib/edje/edje_message_queue.c
+++ b/src/lib/edje/edje_message_queue.c
@@ -201,6 +201,7 @@ again:
           }
         if (em->edje != lookup_ed) continue;
         tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
+        em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
         if (!lookup_ed->delete_me)
           {
              lookup_ed->processing_messages++;
@@ -651,6 +652,7 @@ _edje_message_propagate_send(Edje *ed, Edje_Queue queue, 
Edje_Message_Type type,
 
    em->msg = msg;
    msgq = eina_inlist_append(msgq, &(em->inlist_main));
+   em->edje->messages = eina_inlist_append(em->edje->messages, 
&(em->inlist_edje));
 }
 
 void
@@ -898,6 +900,7 @@ _edje_message_queue_process(void)
              em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
              ed = em->edje;
              tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
+             em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
              em->edje->message.num--;
              if (!ed->delete_me)
                {
@@ -951,6 +954,7 @@ _edje_message_queue_clear(void)
         em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
         msgq = eina_inlist_remove(msgq, &(em->inlist_main));
         em->edje->message.num--;
+        em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
         _edje_message_free(em);
      }
    while (tmp_msgq)
@@ -959,6 +963,7 @@ _edje_message_queue_clear(void)
         em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
         tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
         em->edje->message.num--;
+        em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
         _edje_message_free(em);
      }
 }
@@ -979,6 +984,7 @@ _edje_message_del(Edje *ed)
           {
              msgq = eina_inlist_remove(msgq, &(em->inlist_main));
              em->edje->message.num--;
+             em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
              _edje_message_free(em);
           }
         if (ed->message.num <= 0) return;
@@ -992,6 +998,7 @@ _edje_message_del(Edje *ed)
           {
              tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
              em->edje->message.num--;
+             em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
              _edje_message_free(em);
           }
         if (ed->message.num <= 0) return;
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index d1bc640ac4..3914cbb613 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -1747,6 +1747,8 @@ struct _Edje
    lua_State            *L;
    Eina_Inlist          *lua_objs;
 
+   Eina_Inlist          *messages;
+
    int                   lua_ref;
    int                   processing_messages;
    int                   references;
@@ -2225,6 +2227,7 @@ struct _Edje_Message_Signal
 struct _Edje_Message
 {
    Eina_Inlist        inlist_main; // msgq or tmp_msgq - mut exclusive
+   Eina_Inlist        inlist_edje;
    Edje              *edje;
    unsigned char     *msg;
    int                id;

-- 


Reply via email to