From 67a8db57b18b9f5d0b059175f25d1348dd88ab22 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Sun, 17 Jun 2012 04:32:54 +0000 Subject: [PATCH] evas: let's have an O(1) check instead of O(N). SVN revision: 72266 --- legacy/evas/src/lib/engines/common/evas_pipe.c | 16 +++++----------- legacy/evas/src/lib/engines/common/evas_pipe.h | 2 +- .../src/lib/engines/common/evas_text_utils.h | 1 + 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/legacy/evas/src/lib/engines/common/evas_pipe.c b/legacy/evas/src/lib/engines/common/evas_pipe.c index 37bc12eaa6..0249595f93 100644 --- a/legacy/evas/src/lib/engines/common/evas_pipe.c +++ b/legacy/evas/src/lib/engines/common/evas_pipe.c @@ -619,6 +619,7 @@ evas_common_pipe_load(void *data) { evas_common_font_draw_prepare(text_props); text_props->changed = EINA_FALSE; + text_props->prepare = EINA_FALSE; } LKU(fi->ft_mutex); } @@ -738,11 +739,9 @@ evas_common_pipe_image_load(RGBA_Image *im) } EAPI void -evas_common_pipe_text_prepare(const Evas_Text_Props *text_props) +evas_common_pipe_text_prepare(Evas_Text_Props *text_props) { RGBA_Font_Int *fi; - const Evas_Text_Props *tmp_props; - const Eina_List *l; fi = text_props->font_instance; if (!fi) return ; @@ -750,22 +749,17 @@ evas_common_pipe_text_prepare(const Evas_Text_Props *text_props) if (!text_props->changed && text_props->generation == fi->generation && text_props->bin) return ; - fi = text_props->font_instance; - if (!fi) return ; - LKL(fi->ft_mutex); - if (!fi->task) + if (!fi->task) { LKL(text_task_mutex); text_task = eina_list_append(text_task, fi); LKU(text_task_mutex); } - EINA_LIST_FOREACH(fi->task, l, tmp_props) - if (tmp_props == text_props) - goto end; - + if (text_props->prepare) goto end; + text_props->prepare = EINA_TRUE; fi->task = eina_list_append(fi->task, text_props); end: diff --git a/legacy/evas/src/lib/engines/common/evas_pipe.h b/legacy/evas/src/lib/engines/common/evas_pipe.h index 42531e1c52..b4614241b7 100644 --- a/legacy/evas/src/lib/engines/common/evas_pipe.h +++ b/legacy/evas/src/lib/engines/common/evas_pipe.h @@ -23,7 +23,7 @@ EAPI void evas_common_pipe_rectangle_draw(RGBA_Image *dst, RGBA_Draw_Context *dc EAPI void evas_common_pipe_line_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1, int y1); EAPI void evas_common_pipe_poly_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Point *points, int x, int y); EAPI void evas_common_pipe_text_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, Evas_Text_Props *intl_props); -EAPI void evas_common_pipe_text_prepare(const Evas_Text_Props *text_props); +EAPI void evas_common_pipe_text_prepare(Evas_Text_Props *text_props); EAPI void evas_common_pipe_image_load(RGBA_Image *im); EAPI void evas_common_pipe_image_draw(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, int smooth, int src_region_x, int src_region_y, int src_region_w, int src_region_h, int dst_region_x, int dst_region_y, int dst_region_w, int dst_region_h); EAPI void evas_common_pipe_map_begin(RGBA_Image *root); diff --git a/legacy/evas/src/lib/engines/common/evas_text_utils.h b/legacy/evas/src/lib/engines/common/evas_text_utils.h index 69489d0c5b..e30827db9b 100644 --- a/legacy/evas/src/lib/engines/common/evas_text_utils.h +++ b/legacy/evas/src/lib/engines/common/evas_text_utils.h @@ -35,6 +35,7 @@ struct _Evas_Text_Props int generation; Eina_Bool changed : 1; + Eina_Bool prepare : 1; }; struct _Evas_Text_Props_Info