hermet pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=03cb0212ac26b4359263228851ece40cae474193
commit 03cb0212ac26b4359263228851ece40cae474193 Author: Hermet Park <[email protected]> Date: Fri Aug 2 18:17:40 2019 +0900 efl_canvas_rectangle: rendering optmization. There was a weird profiling result that rectangles drawing is much much slower than images. Checked reason, the computation rect clip area is the overload point. I don't think it's necesary but we can simplely improve the performance here by replacing native function. I tested this by drawing 400 number of rectangles, and this patch improved up abt 10 fps(sw), 20fps(gl). @TEST CODE MAX_SIZE = 400; for(int i=0; i< MAX_SIZE; i++) { Evas_Object *rect = evas_object_rectangle_add(layout); int x = rand() % WINDOW_WIDTH; int y = rand() % WINDOW_HEIGHT; evas_object_resize(rect, ELM_SCALE_SIZE(200), ELM_SCALE_SIZE(200)); evas_object_move(rect, x, y); evas_object_color_set(rect, (rand() % 256), (rand() % 256), (rand() % 256), 255); evas_object_show(rect); Elm_Transit *transit = elm_transit_add(); elm_transit_object_add(transit, rect); int dX = rand() % WINDOW_WIDTH; int dY = rand() % WINDOW_HEIGHT; elm_transit_effect_translation_add(transit, 0, 0, dX - x, dY - y); elm_transit_repeat_times_set(transit, -1); elm_transit_duration_set(transit, 1.0); elm_transit_go(transit); } --- src/lib/evas/canvas/evas_object_rectangle.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_rectangle.c b/src/lib/evas/canvas/evas_object_rectangle.c index 45cb1ada65..222effe942 100644 --- a/src/lib/evas/canvas/evas_object_rectangle.c +++ b/src/lib/evas/canvas/evas_object_rectangle.c @@ -234,6 +234,10 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj, (obj->cur->geometry.w != obj->prev->geometry.w) || (obj->cur->geometry.h != obj->prev->geometry.h)) { + evas_object_render_pre_prev_cur_add(&obj->layer->evas->clip_changes, eo_obj, obj); + +//This Performance is not so good ...! +#if 0 evas_rects_return_difference_rects(&obj->layer->evas->clip_changes, obj->cur->geometry.x, obj->cur->geometry.y, @@ -243,15 +247,7 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj, obj->prev->geometry.y, obj->prev->geometry.w, obj->prev->geometry.h); - //// rl = evas_rects_return_difference_rects(obj->cur->cache.geometry.x, - //// obj->cur->cache.geometry.y, - //// obj->cur->cache.geometry.w, - //// obj->cur->cache.geometry.h, - //// obj->prev->cache.geometry.x, - //// obj->prev->cache.geometry.y, - //// obj->prev->cache.geometry.w, - //// obj->prev->cache.geometry.h); - goto done; +#endif } done: evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, eo_obj, is_v, was_v); --
