path: root/src/lib/evas/include/evas_private.h
diff options
authorCarsten Haitzler (Rasterman) <>2016-11-26 10:47:34 +0900
committerCarsten Haitzler (Rasterman) <>2016-11-26 18:33:56 +0900
commit69cb85aaca1e8d6bd7ef070fc1f2a3cb78b838f6 (patch)
treebf457ef20547b4443cfd9a834322e42129eca652 /src/lib/evas/include/evas_private.h
parent1bba6d5759d859d0db9ad5b5556883044d3a1b11 (diff)
evas render - cache object arrays rto avoid processing them in phase1
evas render in phase1 in order to generate update rects, active, render etc. object arrays has to walk every object in our tree. this is a waste of time if we already have walked objects in a previous frame if they havent changed, so cache this data in render cache in smart objects to avoid re-walking and now just dumbly "memcpy" these cached arrays into the master array. i have seen cpu usage by e drop like about 15% in the sencarios i'm looking at "enlightenment compositor with some window updating animation all the time, but most other stuff being static). @optimize
Diffstat (limited to 'src/lib/evas/include/evas_private.h')
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index f955e1d3b3..ce4fc76bad 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -886,6 +886,8 @@ struct _Evas_Public_Data
886 886
887 Eina_List *font_path; 887 Eina_List *font_path;
888 888
889 Eina_Inarray *update_del_redirect_array;
889 int in_smart_calc; 891 int in_smart_calc;
890 int smart_calc_count; 892 int smart_calc_count;
891 893
@@ -1134,6 +1136,7 @@ struct _Evas_Object_Protected_Data
1134 unsigned int animator_ref; 1136 unsigned int animator_ref;
1135 uint64_t callback_mask; 1137 uint64_t callback_mask;
1136 1138
1139 unsigned char no_change_render;
1137 unsigned char delete_me; 1140 unsigned char delete_me;
1138 1141
1139 Eina_Bool render_pre : 1; 1142 Eina_Bool render_pre : 1;
@@ -1593,6 +1596,9 @@ void evas_debug_magic_null(void);
1593void evas_debug_magic_wrong(DATA32 expected, DATA32 supplied); 1596void evas_debug_magic_wrong(DATA32 expected, DATA32 supplied);
1594void evas_debug_generic(const char *str); 1597void evas_debug_generic(const char *str);
1595const char *evas_debug_magic_string_get(DATA32 magic); 1598const char *evas_debug_magic_string_get(DATA32 magic);
1599void evas_render_update_del(Evas_Public_Data *e, int x, int y, int w, int h);
1600void evas_render_object_render_cache_free(Evas_Object *eo_obj, void *data);
1596void evas_object_smart_use(Evas_Smart *s); 1602void evas_object_smart_use(Evas_Smart *s);
1597void evas_object_smart_unuse(Evas_Smart *s); 1603void evas_object_smart_unuse(Evas_Smart *s);
1598void evas_smart_cb_descriptions_fix(Evas_Smart_Cb_Description_Array *a) EINA_ARG_NONNULL(1); 1604void evas_smart_cb_descriptions_fix(Evas_Smart_Cb_Description_Array *a) EINA_ARG_NONNULL(1);
@@ -1617,6 +1623,10 @@ void evas_object_smart_member_raise(Evas_Object *member);
1617void evas_object_smart_member_lower(Evas_Object *member); 1623void evas_object_smart_member_lower(Evas_Object *member);
1618void evas_object_smart_member_stack_above(Evas_Object *member, Evas_Object *other); 1624void evas_object_smart_member_stack_above(Evas_Object *member, Evas_Object *other);
1619void evas_object_smart_member_stack_below(Evas_Object *member, Evas_Object *other); 1625void evas_object_smart_member_stack_below(Evas_Object *member, Evas_Object *other);
1626void evas_object_smart_render_cache_clear(Evas_Object *eo_obj);
1627void *evas_object_smart_render_cache_get(const Evas_Object *eo_obj);
1628void evas_object_smart_render_cache_set(Evas_Object *eo_obj, void *data);
1620const Eina_Inlist *evas_object_smart_members_get_direct(const Evas_Object *obj); 1630const Eina_Inlist *evas_object_smart_members_get_direct(const Evas_Object *obj);
1621void _efl_canvas_group_group_members_all_del(Evas_Object *obj); 1631void _efl_canvas_group_group_members_all_del(Evas_Object *obj);
1622void _evas_object_smart_xy_update(Eo *eo_obj, Evas_Coord *px, Evas_Coord *py, Evas_Coord x, Evas_Coord y); 1632void _evas_object_smart_xy_update(Eo *eo_obj, Evas_Coord *px, Evas_Coord *py, Evas_Coord x, Evas_Coord y);