From bda708d38fbea33fc2554d95e661af6e36b79f5b Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Fri, 14 Jun 2019 22:49:25 +0100 Subject: [PATCH] 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 59be35a878..1593d8177f 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -1742,6 +1742,8 @@ struct _Edje lua_State *L; Eina_Inlist *lua_objs; + Eina_Inlist *messages; + int lua_ref; int processing_messages; int references; @@ -2220,6 +2222,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;