From: godlytalias14573465 Date: Tue, 31 Dec 2019 08:51:28 +0000 (+0530) Subject: [Genlist] Optimization for application launch on item show scenario X-Git-Tag: submit/tizen/20200106.213925~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=659c7badec81bdec6d012270ad0aa05fda6bb86e;p=platform%2Fupstream%2Fefl.git [Genlist] Optimization for application launch on item show scenario Change-Id: Id7f914fff42684bbf52539f991bef258a5803112 Signed-off-by: godlytalias14573465 --- diff --git a/src/lib/elementary_tizen/elm_genlist.c b/src/lib/elementary_tizen/elm_genlist.c index 47f13ac..aab5df6 100644 --- a/src/lib/elementary_tizen/elm_genlist.c +++ b/src/lib/elementary_tizen/elm_genlist.c @@ -1392,14 +1392,19 @@ _calc(void *data) Item_Block *itb; Evas_Coord minw = 0, minh = 0, vw = 0, vh = 0, current_minh = 0; Evas_Coord processed_size = sd->minh; - int cnt = 0; + // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario + int cnt = 0, stop_cnt = MAX_ITEMS_PER_BLOCK; + // Evas_Coord bottom_margin; - if (sd->calc_done) return; // TIZEN_ONLY(20150828) : Calculate item which position on viewport area + // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario + Eina_Bool count_start = EINA_FALSE; while (sd->queue && - ((sd->viewport_h > processed_size) && (cnt < MAX_ITEMS_PER_BLOCK))) + ((sd->viewport_h > processed_size) || (sd->show_item && cnt < stop_cnt))) + // + // { Elm_Gen_Item *tmp; tmp = eina_list_data_get(sd->queue); @@ -1407,7 +1412,13 @@ _calc(void *data) if (!_item_process(sd, tmp)) continue; processed_size += GL_IT(tmp)->minh; tmp->item->queued = EINA_FALSE; - cnt++; + // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario + if (sd->show_item) + { + if (sd->show_item == tmp) count_start = EINA_TRUE; + if (count_start) cnt++; + } + // } // elm_interface_scrollable_content_viewport_geometry_get(sd->obj, NULL, NULL, &vw, &vh); @@ -2781,7 +2792,9 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data evas_object_geometry_get(obj, &ox, &oy, &ow, &oh); evas_output_viewport_get(evas_object_evas_get(obj), &cvx, &cvy, &cvw, &cvh); - + //TIZEN_ONLY(20190109): Show item in spinner when calc is completed + const char* str = edje_object_data_get(elm_layout_edje_get(psd->wsd->obj), "spinner_genlist"); + // //FIXME: This is for optimizing genlist calculation after // genlist sizing eval properly. if (ow <= 1) return; @@ -2819,6 +2832,65 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data } #endif + // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario + if (psd->wsd->show_item && + !psd->wsd->show_item->item->queued && + psd->wsd->show_item->item->calc_done && + psd->wsd->show_item->item->block->calc_done && + psd->wsd->calc_done && + (oh > 0) && + (!psd->wsd->loop_v || (psd->wsd->loop_v && !psd->wsd->queue)) && //psd->wsd->loop_v indicates if looping is enabled in vertical dir + (!str || (str && !psd->wsd->queue))) + { + Evas_Coord x, y, w, h; + Elm_Gen_Item *it = psd->wsd->show_item; + psd->wsd->show_item = NULL; + psd->wsd->comp_y = 0; + x = it->x + GL_IT(it)->block->x + psd->wsd->pan_x; + y = it->y + GL_IT(it)->block->y; + w = ow; + h = oh; + + switch (psd->wsd->scroll_to_type) + { + case ELM_GENLIST_ITEM_SCROLLTO_IN: + h = GL_IT(it)->h; + break; + case ELM_GENLIST_ITEM_SCROLLTO_MIDDLE: + y = y - (oh / 2) + (GL_IT(it)->h / 2); + break; +// tizen_feature + case ELM_GENLIST_ITEM_SCROLLTO_BOTTOM: + y = y - oh + GL_IT(it)->h; + break; +/// + default: + break; + } + if (psd->wsd->bring_in) + { + if (y != psd->wsd->pan_y) + elm_interface_scrollable_region_bring_in(psd->wsd->obj, x, y, w, h); + else + psd->wsd->adjusted_item = NULL; + } + else + { + if (psd->wsd->aligned_item && (psd->wsd->aligned_item != psd->wsd->adjusted_item)) + { + edje_object_signal_emit(wd->resize_obj, SIGNAL_FOCUS_BG_HIDE, "elm"); + edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm"); + } + psd->wsd->aligned_item = NULL; + psd->wsd->unhighlight_skip = EINA_TRUE; + + elm_interface_scrollable_content_region_show(WIDGET(it), x, y, ow, oh); + + psd->wsd->unhighlight_skip = EINA_FALSE; + } + _changed(psd->wsd->pan_obj); + } + // Belows are tweaks for performance // Block is not needed anymore because of below algorithm.. // later, we should remove dirty block algorithm @@ -3016,6 +3088,15 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data if (psd->wsd->comp_y) { + // TIZEN_ONLY(20161230): Optimization for application launch on item show scenario + if (psd->wsd->aligned_item) + { + evas_object_smart_callback_call(WIDGET(psd->wsd->aligned_item), SIG_ALIGNED_ITEM_DETECTED, NULL); + edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm"); + psd->wsd->aligned_item = NULL; + _changed(psd->wsd->pan_obj); + } + // psd->wsd->unhighlight_skip = EINA_TRUE; elm_interface_scrollable_content_region_show((psd->wsd)->obj, psd->wsd->pan_x, psd->wsd->pan_y + psd->wsd->comp_y, ow, oh); @@ -3048,52 +3129,6 @@ _elm_genlist_pan_efl_canvas_group_group_calculate(Eo *obj, Elm_Genlist_Pan_Data } psd->wsd->expanded_item = NULL; } - if (psd->wsd->show_item && - !psd->wsd->show_item->item->queued && - psd->wsd->show_item->item->calc_done && - psd->wsd->show_item->item->block->calc_done && - psd->wsd->calc_done) - { - Evas_Coord x, y, w, h; - Elm_Gen_Item *it = psd->wsd->show_item; - psd->wsd->show_item = NULL; - x = it->x + GL_IT(it)->block->x + psd->wsd->pan_x; - y = it->y + GL_IT(it)->block->y; - w = ow; - h = oh; - - switch (psd->wsd->scroll_to_type) - { - case ELM_GENLIST_ITEM_SCROLLTO_IN: - h = GL_IT(it)->h; - break; - - case ELM_GENLIST_ITEM_SCROLLTO_MIDDLE: - y = y - (oh / 2) + (GL_IT(it)->h / 2); - break; -// tizen_feature - case ELM_GENLIST_ITEM_SCROLLTO_BOTTOM: - y = y - oh + GL_IT(it)->h; - break; -/// - default: - break; - } - if (psd->wsd->bring_in) - elm_interface_scrollable_region_bring_in(WIDGET(it), x, y, w, h); - else - { - if (psd->wsd->aligned_item && (psd->wsd->aligned_item != psd->wsd->adjusted_item)) - edje_object_signal_emit(VIEW(psd->wsd->aligned_item), SIGNAL_ITEM_UNHIGHLIGHTED, "elm"); - edje_object_signal_emit(wd->resize_obj, SIGNAL_FOCUS_BG_HIDE, "elm"); - psd->wsd->aligned_item = NULL; - psd->wsd->unhighlight_skip = EINA_TRUE; - elm_interface_scrollable_content_region_show(WIDGET(it), x, y, ow, oh); - psd->wsd->unhighlight_skip = EINA_FALSE; - } - - _changed(psd->wsd->pan_obj); - } #ifdef GENLIST_FX_SUPPORT if (psd->wsd->add_fx.anim) { @@ -6137,7 +6172,7 @@ static Eina_Bool _queue_idle_enter(void *data) { Elm_Genlist_Data *sd = data; - Evas_Coord vw = 0; + Evas_Coord vw = 0, vh = 0; int n; double ft, t0; @@ -6167,8 +6202,13 @@ _queue_idle_enter(void *data) GL_IT(it)->resized = EINA_FALSE; if (!_item_process(sd, it)) continue; t = ecore_time_get(); + // TIZEN_ONLY(20161230): Optimization for application launch + sd->processed_sizes += GL_IT(it)->minh; + Item_Block *itb = (Item_Block*) sd->blocks; /* same as eina_inlist_count > 1 */ - if (sd->blocks && sd->blocks->next) + if ((sd->blocks && sd->blocks->next) || (sd->processed_sizes > vh) || + (itb->minh > vh)) + // { if ((t - t0) > ft) break; } @@ -6733,6 +6773,12 @@ _item_block_calc(Item_Block *itb, Evas_Coord vw EINA_UNUSED, Evas_Coord vh) { if (eo_prev == elm_genlist_first_item_get(itb->sd->obj)) { + if (GL_IT(prev)->block && GL_IT(prev)->block != itb) + { + int diff = GL_IT(prev)->minh - first_item_height; + GL_IT(prev)->block->minh -= diff; + if (itb) itb->y -= diff; + } GL_IT(prev)->h = GL_IT(prev)->minh = first_item_height; break; }