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.
This commit is contained in:
Carsten Haitzler 2019-06-14 22:49:25 +01:00
parent e667dd8b2c
commit bda708d38f
2 changed files with 10 additions and 0 deletions

View File

@ -201,6 +201,7 @@ again:
} }
if (em->edje != lookup_ed) continue; if (em->edje != lookup_ed) continue;
tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main)); 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) if (!lookup_ed->delete_me)
{ {
lookup_ed->processing_messages++; lookup_ed->processing_messages++;
@ -651,6 +652,7 @@ _edje_message_propagate_send(Edje *ed, Edje_Queue queue, Edje_Message_Type type,
em->msg = msg; em->msg = msg;
msgq = eina_inlist_append(msgq, &(em->inlist_main)); msgq = eina_inlist_append(msgq, &(em->inlist_main));
em->edje->messages = eina_inlist_append(em->edje->messages, &(em->inlist_edje));
} }
void void
@ -898,6 +900,7 @@ _edje_message_queue_process(void)
em = INLIST_CONTAINER(Edje_Message, l, inlist_main); em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
ed = em->edje; ed = em->edje;
tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main)); 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--; em->edje->message.num--;
if (!ed->delete_me) if (!ed->delete_me)
{ {
@ -951,6 +954,7 @@ _edje_message_queue_clear(void)
em = INLIST_CONTAINER(Edje_Message, l, inlist_main); em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
msgq = eina_inlist_remove(msgq, &(em->inlist_main)); msgq = eina_inlist_remove(msgq, &(em->inlist_main));
em->edje->message.num--; em->edje->message.num--;
em->edje->messages = eina_inlist_remove(em->edje->messages, &(em->inlist_edje));
_edje_message_free(em); _edje_message_free(em);
} }
while (tmp_msgq) while (tmp_msgq)
@ -959,6 +963,7 @@ _edje_message_queue_clear(void)
em = INLIST_CONTAINER(Edje_Message, l, inlist_main); em = INLIST_CONTAINER(Edje_Message, l, inlist_main);
tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main)); tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
em->edje->message.num--; em->edje->message.num--;
em->edje->messages = eina_inlist_remove(em->edje->messages, &(em->inlist_edje));
_edje_message_free(em); _edje_message_free(em);
} }
} }
@ -979,6 +984,7 @@ _edje_message_del(Edje *ed)
{ {
msgq = eina_inlist_remove(msgq, &(em->inlist_main)); msgq = eina_inlist_remove(msgq, &(em->inlist_main));
em->edje->message.num--; em->edje->message.num--;
em->edje->messages = eina_inlist_remove(em->edje->messages, &(em->inlist_edje));
_edje_message_free(em); _edje_message_free(em);
} }
if (ed->message.num <= 0) return; 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)); tmp_msgq = eina_inlist_remove(tmp_msgq, &(em->inlist_main));
em->edje->message.num--; em->edje->message.num--;
em->edje->messages = eina_inlist_remove(em->edje->messages, &(em->inlist_edje));
_edje_message_free(em); _edje_message_free(em);
} }
if (ed->message.num <= 0) return; if (ed->message.num <= 0) return;

View File

@ -1742,6 +1742,8 @@ struct _Edje
lua_State *L; lua_State *L;
Eina_Inlist *lua_objs; Eina_Inlist *lua_objs;
Eina_Inlist *messages;
int lua_ref; int lua_ref;
int processing_messages; int processing_messages;
int references; int references;
@ -2220,6 +2222,7 @@ struct _Edje_Message_Signal
struct _Edje_Message struct _Edje_Message
{ {
Eina_Inlist inlist_main; // msgq or tmp_msgq - mut exclusive Eina_Inlist inlist_main; // msgq or tmp_msgq - mut exclusive
Eina_Inlist inlist_edje;
Edje *edje; Edje *edje;
unsigned char *msg; unsigned char *msg;
int id; int id;