summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-06-15 00:06:42 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-06-15 08:43:51 +0100
commitc2d1aaaed6b5cb7a30930d950f0490750d33eb1e (patch)
tree9db8c1a44fed33e059dbf5dcc7a1b4780e6f4f72
parent613e1715be1114c2221f1a12f067e3d1e215265f (diff)
downloadefl-c2d1aaaed6b5cb7a30930d950f0490750d33eb1e.tar.gz
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.
-rw-r--r--src/lib/edje/edje_message_queue.c34
1 files 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;
}
}