raster pushed a commit to branch efl-1.22.

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

commit fde832343d37df61d137900d415d49b25215b1e7
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Jun 15 00:06:42 2019 +0100

    edje messages - on del use the per edje message list not global
    
    this massively cuts the walk to remove messages to only what's needed
    on teardown ... so yay! speedup.
---
 src/lib/edje/edje_message_queue.c | 34 ++++++++++------------------------
 1 file changed, 10 insertions(+), 24 deletions(-)

diff --git a/src/lib/edje/edje_message_queue.c 
b/src/lib/edje/edje_message_queue.c
index 0257127969..db5542b06e 100644
--- a/src/lib/edje/edje_message_queue.c
+++ b/src/lib/edje/edje_message_queue.c
@@ -953,32 +953,18 @@ _edje_message_del(Edje *ed)
    Edje_Message *em;
 
    if (ed->message.num <= 0) return;
-   /* delete any messages on the main queue for this edje object */
-   for (l = msgq; l; l = ln)
-     {
-        ln = l->next;
-        em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
-        if (em->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;
-     }
-   /* delete any on the processing queue */
-   for (l = tmp_msgq; l; l = ln)
+   // delete any messages on the main or tmp queue for this edje object
+   for (l = ed->messages; l; l = ln)
      {
         ln = l->next;
-        em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
-        if (em->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);
-          }
+        em = INLIST_CONTAINER(Edje_Message, l, inlist_edje);
+        em->edje->message.num--;
+        if (em->in_tmp_msgq)
+          tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
+        else
+          msgq = eina_inlist_remove(msgq, &(em->inlist_main));
+        em->edje->messages = eina_inlist_remove(em->edje->messages, 
&(em->inlist_edje));
+        _edje_message_free(em);
         if (ed->message.num <= 0) return;
      }
 }

-- 


Reply via email to