forked from enlightenment/efl
elm/genlist: remove calc jobs
now that we have a sane and consistent sizing calc mechanism, we no longer need to be randomly creating jobs to do additional side calcs in addition to our other multiple bespoke calculation methods instead, we can now call the calc function directly during the group calc to perform all the calcs at once and avoid the overhead of constantly triggering calc jobs a possible future improvement here could be to remove the _calc_job() call in the internal pan object's group_calculate, as this is likely a duplicated op but it will require additional testing to verify unit test performance (e.g., tree) increases roughly 50-80% after this patch Reviewed-by: Cedric BAIL <cedric.bail@free.fr> Differential Revision: https://phab.enlightenment.org/D10523
This commit is contained in:
parent
0fce67796b
commit
9400254088
|
@ -183,14 +183,6 @@ static const Elm_Action key_actions[] = {
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline void
|
|
||||||
_add_calc_job(Elm_Genlist_Data *sd)
|
|
||||||
{
|
|
||||||
ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
|
|
||||||
if (!efl_alive_get(sd->obj)) return;
|
|
||||||
sd->calc_job = ecore_job_add(_calc_job, sd->obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_size_cache_free(void *data)
|
_size_cache_free(void *data)
|
||||||
{
|
{
|
||||||
|
@ -296,7 +288,6 @@ _elm_genlist_pan_efl_gfx_entity_position_set(Eo *obj, Elm_Genlist_Pan_Data *psd,
|
||||||
|
|
||||||
psd->wsd->pan_changed = EINA_TRUE;
|
psd->wsd->pan_changed = EINA_TRUE;
|
||||||
evas_object_smart_changed(obj);
|
evas_object_smart_changed(obj);
|
||||||
ELM_SAFE_FREE(psd->wsd->calc_job, ecore_job_del);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -332,9 +323,7 @@ _elm_genlist_pan_efl_gfx_entity_size_set(Eo *obj, Elm_Genlist_Pan_Data *psd, Ein
|
||||||
// away or appeared to queue a job to deal with it. it should settle in
|
// away or appeared to queue a job to deal with it. it should settle in
|
||||||
// the end to a steady-state
|
// the end to a steady-state
|
||||||
if (old.w != size.w)
|
if (old.w != size.w)
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
else
|
|
||||||
ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
|
|
||||||
|
|
||||||
super:
|
super:
|
||||||
efl_gfx_entity_size_set(efl_super(obj, MY_PAN_CLASS), size);
|
efl_gfx_entity_size_set(efl_super(obj, MY_PAN_CLASS), size);
|
||||||
|
@ -783,7 +772,7 @@ _must_recalc_idler(void *data)
|
||||||
{
|
{
|
||||||
ELM_GENLIST_DATA_GET(data, sd);
|
ELM_GENLIST_DATA_GET(data, sd);
|
||||||
|
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
sd->must_recalc_idler = NULL;
|
sd->must_recalc_idler = NULL;
|
||||||
return ECORE_CALLBACK_CANCEL;
|
return ECORE_CALLBACK_CANCEL;
|
||||||
}
|
}
|
||||||
|
@ -793,7 +782,7 @@ _calc_job(void *data)
|
||||||
{
|
{
|
||||||
int in = 0;
|
int in = 0;
|
||||||
Item_Block *itb, *chb = NULL;
|
Item_Block *itb, *chb = NULL;
|
||||||
ELM_GENLIST_DATA_GET(data, sd);
|
Elm_Genlist_Data *sd = data;
|
||||||
Eina_Bool minw_change = EINA_FALSE;
|
Eina_Bool minw_change = EINA_FALSE;
|
||||||
Eina_Bool did_must_recalc = EINA_FALSE;
|
Eina_Bool did_must_recalc = EINA_FALSE;
|
||||||
Evas_Coord minw = -1, minh = 0, y = 0, ow = 0, vw = 0;
|
Evas_Coord minw = -1, minh = 0, y = 0, ow = 0, vw = 0;
|
||||||
|
@ -905,7 +894,7 @@ _calc_job(void *data)
|
||||||
if (did_must_recalc)
|
if (did_must_recalc)
|
||||||
{
|
{
|
||||||
if (!sd->must_recalc_idler)
|
if (!sd->must_recalc_idler)
|
||||||
sd->must_recalc_idler = ecore_idler_add(_must_recalc_idler, data);
|
sd->must_recalc_idler = ecore_idler_add(_must_recalc_idler, sd->obj);
|
||||||
}
|
}
|
||||||
if (!sd->show_item) sd->check_scroll = EINA_FALSE;
|
if (!sd->show_item) sd->check_scroll = EINA_FALSE;
|
||||||
if (sd->check_scroll)
|
if (sd->check_scroll)
|
||||||
|
@ -917,7 +906,6 @@ _calc_job(void *data)
|
||||||
_item_scroll(sd);
|
_item_scroll(sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
sd->calc_job = NULL;
|
|
||||||
evas_object_smart_changed(sd->pan_obj);
|
evas_object_smart_changed(sd->pan_obj);
|
||||||
evas_event_thaw(e);
|
evas_event_thaw(e);
|
||||||
evas_event_thaw_eval(e);
|
evas_event_thaw_eval(e);
|
||||||
|
@ -956,11 +944,13 @@ _elm_genlist_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Data *sd)
|
||||||
{
|
{
|
||||||
itb->must_recalc = EINA_TRUE;
|
itb->must_recalc = EINA_TRUE;
|
||||||
}
|
}
|
||||||
_add_calc_job(sd);
|
_calc_job(sd);
|
||||||
}
|
}
|
||||||
minw = vmw;
|
minw = vmw;
|
||||||
minh = vmh;
|
minh = vmh;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
_calc_job(sd);
|
||||||
|
|
||||||
if (sd->scr_minw)
|
if (sd->scr_minw)
|
||||||
{
|
{
|
||||||
|
@ -2621,9 +2611,7 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data
|
||||||
|
|
||||||
if (sd->pan_changed)
|
if (sd->pan_changed)
|
||||||
{
|
{
|
||||||
ecore_job_del(sd->calc_job);
|
_calc_job(sd);
|
||||||
sd->calc_job = NULL;
|
|
||||||
_calc_job(sd->obj);
|
|
||||||
sd->pan_changed = EINA_FALSE;
|
sd->pan_changed = EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3577,7 +3565,7 @@ _elm_genlist_efl_ui_widget_theme_apply(Eo *obj, Elm_Genlist_Data *sd)
|
||||||
itb->changed = EINA_TRUE;
|
itb->changed = EINA_TRUE;
|
||||||
}
|
}
|
||||||
if (sd->obj && efl_finalized_get(obj))
|
if (sd->obj && efl_finalized_get(obj))
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
evas_event_thaw(e);
|
evas_event_thaw(e);
|
||||||
evas_event_thaw_eval(e);
|
evas_event_thaw_eval(e);
|
||||||
|
@ -3699,7 +3687,7 @@ _item_block_del(Elm_Gen_Item *it)
|
||||||
itb->items = eina_list_remove(itb->items, it);
|
itb->items = eina_list_remove(itb->items, it);
|
||||||
itb->count--;
|
itb->count--;
|
||||||
itb->changed = EINA_TRUE;
|
itb->changed = EINA_TRUE;
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
if (itb->count < 1)
|
if (itb->count < 1)
|
||||||
{
|
{
|
||||||
Item_Block *itbn;
|
Item_Block *itbn;
|
||||||
|
@ -3767,8 +3755,6 @@ _item_block_del(Elm_Gen_Item *it)
|
||||||
{
|
{
|
||||||
sd->pan_changed = EINA_TRUE;
|
sd->pan_changed = EINA_TRUE;
|
||||||
evas_object_smart_changed(sd->pan_obj);
|
evas_object_smart_changed(sd->pan_obj);
|
||||||
ecore_job_del(sd->calc_job);
|
|
||||||
sd->calc_job = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3847,7 +3833,7 @@ _elm_genlist_item_del_serious(Elm_Gen_Item *it)
|
||||||
sd->group_items = eina_list_remove(sd->group_items, it);
|
sd->group_items = eina_list_remove(sd->group_items, it);
|
||||||
|
|
||||||
ELM_SAFE_FREE(sd->state, eina_inlist_sorted_state_free);
|
ELM_SAFE_FREE(sd->state, eina_inlist_sorted_state_free);
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
|
|
||||||
ELM_SAFE_FREE(it->item, free);
|
ELM_SAFE_FREE(it->item, free);
|
||||||
}
|
}
|
||||||
|
@ -4049,7 +4035,7 @@ _item_mouse_move_cb(void *data,
|
||||||
else
|
else
|
||||||
_item_position(it, VIEW(it), it->item->scrl_x, y_pos);
|
_item_position(it, VIEW(it), it->item->scrl_x, y_pos);
|
||||||
|
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -4653,7 +4639,7 @@ newblock:
|
||||||
itb->count++;
|
itb->count++;
|
||||||
itb->changed = EINA_TRUE;
|
itb->changed = EINA_TRUE;
|
||||||
it->item->block = itb;
|
it->item->block = itb;
|
||||||
_add_calc_job(itb->sd);
|
efl_canvas_group_change(itb->sd->obj);
|
||||||
|
|
||||||
if (itb->count > itb->sd->max_items_per_block)
|
if (itb->count > itb->sd->max_items_per_block)
|
||||||
{
|
{
|
||||||
|
@ -4812,7 +4798,6 @@ _item_process_post(Elm_Genlist_Data *sd, Elm_Gen_Item *it)
|
||||||
if (sd->pan_changed)
|
if (sd->pan_changed)
|
||||||
{
|
{
|
||||||
evas_object_smart_changed(sd->pan_obj);
|
evas_object_smart_changed(sd->pan_obj);
|
||||||
ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (show_me) it->item->block->show_me = EINA_TRUE;
|
if (show_me) it->item->block->show_me = EINA_TRUE;
|
||||||
|
@ -4898,7 +4883,7 @@ _item_idle_enterer(void *data)
|
||||||
if (wakeup)
|
if (wakeup)
|
||||||
{
|
{
|
||||||
// wake up mainloop
|
// wake up mainloop
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
if (ok == ECORE_CALLBACK_CANCEL) sd->queue_idle_enterer = NULL;
|
if (ok == ECORE_CALLBACK_CANCEL) sd->queue_idle_enterer = NULL;
|
||||||
|
|
||||||
|
@ -5144,7 +5129,7 @@ _item_mouse_up_cb(void *data,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
edje_object_signal_emit(VIEW(it), SIGNAL_REORDER_DISABLED, "elm");
|
edje_object_signal_emit(VIEW(it), SIGNAL_REORDER_DISABLED, "elm");
|
||||||
if (_elm_config->atspi_mode)
|
if (_elm_config->atspi_mode)
|
||||||
|
@ -5541,7 +5526,7 @@ _update_job(void *data)
|
||||||
}
|
}
|
||||||
if (position)
|
if (position)
|
||||||
{
|
{
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
evas_event_thaw(e);
|
evas_event_thaw(e);
|
||||||
evas_event_thaw_eval(e);
|
evas_event_thaw_eval(e);
|
||||||
|
@ -5895,7 +5880,6 @@ _elm_genlist_efl_canvas_group_group_del(Eo *obj, Elm_Genlist_Data *sd)
|
||||||
EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE,
|
EVAS_CALLBACK_CANVAS_VIEWPORT_RESIZE,
|
||||||
_evas_viewport_resize_cb, sd);
|
_evas_viewport_resize_cb, sd);
|
||||||
|
|
||||||
ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
|
|
||||||
ELM_SAFE_FREE(sd->update_job, ecore_job_del);
|
ELM_SAFE_FREE(sd->update_job, ecore_job_del);
|
||||||
ELM_SAFE_FREE(sd->pan_obj, evas_object_del);
|
ELM_SAFE_FREE(sd->pan_obj, evas_object_del);
|
||||||
ELM_SAFE_FREE(sd->queue_idle_enterer, ecore_idle_enterer_del);
|
ELM_SAFE_FREE(sd->queue_idle_enterer, ecore_idle_enterer_del);
|
||||||
|
@ -6048,7 +6032,6 @@ _internal_elm_genlist_clear(Evas_Object *obj)
|
||||||
sd->pan_changed = EINA_TRUE;
|
sd->pan_changed = EINA_TRUE;
|
||||||
if (!sd->queue)
|
if (!sd->queue)
|
||||||
{
|
{
|
||||||
ELM_SAFE_FREE(sd->calc_job, ecore_job_del);
|
|
||||||
sd->anchor_item = NULL;
|
sd->anchor_item = NULL;
|
||||||
ELM_SAFE_FREE(sd->queue_idle_enterer, ecore_idle_enterer_del);
|
ELM_SAFE_FREE(sd->queue_idle_enterer, ecore_idle_enterer_del);
|
||||||
ELM_SAFE_FREE(sd->must_recalc_idler, ecore_idler_del);
|
ELM_SAFE_FREE(sd->must_recalc_idler, ecore_idler_del);
|
||||||
|
@ -7296,7 +7279,7 @@ _elm_genlist_item_coordinates_calc(Elm_Gen_Item *it,
|
||||||
sd->scroll_to_type = type;
|
sd->scroll_to_type = type;
|
||||||
it->item->show_me = EINA_TRUE;
|
it->item->show_me = EINA_TRUE;
|
||||||
|
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
|
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
@ -7912,7 +7895,7 @@ _item_filtered_get(Elm_Gen_Item *it)
|
||||||
_filter_item_internal(it);
|
_filter_item_internal(it);
|
||||||
if (it->item->block)
|
if (it->item->block)
|
||||||
it->item->block->changed = EINA_TRUE;
|
it->item->block->changed = EINA_TRUE;
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
if (!it->hide) return EINA_TRUE;
|
if (!it->hide) return EINA_TRUE;
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
|
@ -7971,7 +7954,7 @@ _item_filter_enterer(void *data)
|
||||||
if (wakeup)
|
if (wakeup)
|
||||||
{
|
{
|
||||||
// wake up mainloop
|
// wake up mainloop
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
if (ok == ECORE_CALLBACK_CANCEL)
|
if (ok == ECORE_CALLBACK_CANCEL)
|
||||||
{
|
{
|
||||||
|
@ -8023,7 +8006,7 @@ _elm_genlist_filter_set(Eo *obj EINA_UNUSED, Elm_Genlist_Data *sd, void *filter_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_calc_job(sd->obj);
|
_calc_job(sd);
|
||||||
|
|
||||||
sd->queue_filter_enterer = ecore_idle_enterer_add(_item_filter_enterer,
|
sd->queue_filter_enterer = ecore_idle_enterer_add(_item_filter_enterer,
|
||||||
sd->obj);
|
sd->obj);
|
||||||
|
@ -8277,7 +8260,7 @@ _elm_genlist_decorate_mode_set(Eo *obj, Elm_Genlist_Data *sd, Eina_Bool decorate
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
@ -8423,7 +8406,7 @@ _flip_job(void *data)
|
||||||
|
|
||||||
it->flipped = EINA_TRUE;
|
it->flipped = EINA_TRUE;
|
||||||
it->item->nocache = EINA_TRUE;
|
it->item->nocache = EINA_TRUE;
|
||||||
_add_calc_job(sd);
|
efl_canvas_group_change(sd->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
|
|
|
@ -55,7 +55,6 @@ struct _Elm_Genlist_Data
|
||||||
Elm_Object_Item *last_selected_item;
|
Elm_Object_Item *last_selected_item;
|
||||||
Elm_Object_Item *focused_item; /**< a focused item by keypad arrow or mouse. This is set to NULL if widget looses focus. */
|
Elm_Object_Item *focused_item; /**< a focused item by keypad arrow or mouse. This is set to NULL if widget looses focus. */
|
||||||
Elm_Object_Item *last_focused_item; /**< This records the last focused item when widget looses focus. This is required to set the focus on last focused item when widgets gets focus. */
|
Elm_Object_Item *last_focused_item; /**< This records the last focused item when widget looses focus. This is required to set the focus on last focused item when widgets gets focus. */
|
||||||
Ecore_Job *calc_job;
|
|
||||||
int walking;
|
int walking;
|
||||||
int minw, minh;
|
int minw, minh;
|
||||||
unsigned int item_count;
|
unsigned int item_count;
|
||||||
|
|
Loading…
Reference in New Issue