diff options
author | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2019-06-15 00:06:42 +0100 |
---|---|---|
committer | Carsten Haitzler (Rasterman) <raster@rasterman.com> | 2019-06-15 08:43:51 +0100 |
commit | c2d1aaaed6b5cb7a30930d950f0490750d33eb1e (patch) | |
tree | 9db8c1a44fed33e059dbf5dcc7a1b4780e6f4f72 | |
parent | 613e1715be1114c2221f1a12f067e3d1e215265f (diff) | |
download | efl-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.c | 34 |
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; } } |