diff options
author | Jérémy Zurcher <jeremy@asynk.ch> | 2013-09-06 00:28:29 +0200 |
---|---|---|
committer | Jérémy Zurcher <jeremy@asynk.ch> | 2013-09-06 00:28:29 +0200 |
commit | e600f5ae94eff3d54c009a57659baf2250330d82 (patch) | |
tree | 2da38d93eb87abe3ddb95d2f01eee7426a82267a | |
parent | d981910222970eb2b70b79853690abc818b92060 (diff) | |
download | efl-devs/jeyzu/eo2_only.tar.gz |
wip-worktree-statedevs/jeyzu/eo2_only
-rw-r--r-- | eo2test/eo2_composite.c | 54 | ||||
-rw-r--r-- | eo2test/eo2_composite.h | 9 | ||||
-rw-r--r-- | eo2test/now | 26 | ||||
-rw-r--r-- | eo2test/prof | 1004 | ||||
-rw-r--r-- | src/lib/eo/eo.c | 70 | ||||
-rw-r--r-- | src/lib/eo/eo_private.h | 111 | ||||
-rw-r--r-- | src/lib/eo/eo_ptr_indirection.h | 36 |
7 files changed, 1217 insertions, 93 deletions
diff --git a/eo2test/eo2_composite.c b/eo2test/eo2_composite.c new file mode 100644 index 0000000000..aea0145621 --- /dev/null +++ b/eo2test/eo2_composite.c @@ -0,0 +1,54 @@ +#include "Eo.h" +#include "eo2_simple.h" +#include "eo2_composite.h" + +static int +_get(Eo *objid, void *obj_data EINA_UNUSED) +{ + return eo2_do_super(objid, eo2_inc()); +} + +static void +_a_get(Eo *obj, void *class_data EINA_UNUSED, va_list *list) +{ + int *a; + a = va_arg(*list, int *); + eo_do_super(obj, MY_CLASS, simple_a_get(a)); +} + +static void +_constructor(Eo *obj, void *obj_data) +{ + Private_Data *data = (Private_Data *) obj_data; + + /* Eo *simple = eo_add(SIMPLE_CLASS, obj); */ + /* eo_composite_attach(simple, obj); */ + /* eo_do(simple, eo_event_callback_forwarder_add(EV_A_CHANGED, obj)); */ + + /* fail_if(eo_composite_is(obj)); */ + /* fail_if(!eo_composite_is(simple)); */ + + /* eo_do(obj, eo_base_data_set("simple-obj", simple, NULL)); */ + + eo2_do_super(obj, eo2_simple_constructor(66)); +} + +static Eo2_Op_Description op_descs [] = { + EO2_OP_FUNC_OVERRIDE(_constructor, eo2_constructor), + EO2_OP_FUNC_OVERRIDE(_get, eo2_get), + EO2_OP_SENTINEL +}; + +static const Eo_Class_Description class_desc = { + EO2_VERSION, + "Eo2 Composite", + EO_CLASS_TYPE_REGULAR, + EO2_CLASS_DESCRIPTION_OPS(op_descs), + NULL, + 0, + NULL, + NULL +}; + +EO_DEFINE_CLASS(eo2_composite_class_get, &class_desc, + EO2_BASE_CLASS, EO2_SIMPLE_CLASS, NULL) diff --git a/eo2test/eo2_composite.h b/eo2test/eo2_composite.h new file mode 100644 index 0000000000..404d725698 --- /dev/null +++ b/eo2test/eo2_composite.h @@ -0,0 +1,9 @@ +#ifndef _EO2_COMPOSITE_H +#define _EO2_COMPOSITE_H + +#include "Eo.h" + +EAPI const Eo *eo2_composite_class_get(void); +#define EO2_COMPOSITE_CLASS eo2_composite_class_get() + +#endif diff --git a/eo2test/now b/eo2test/now new file mode 100644 index 0000000000..1f6b4c0529 --- /dev/null +++ b/eo2test/now @@ -0,0 +1,26 @@ + + *** cleanup_test + + *** class_do_test +Hello 2 - body Eo2 Inherit - EAPI Eo2 Simple +Hello 4 - body Eo2 Simple - EAPI Eo2 Simple + + *** do_batch_test +simple inc() - 99999 calls +calls/eo_do() EO [ms] [ns]/call - EO2 [ms] [ns]/call + #1 3 37 5 50 + #3 4 15 4 16 + #5 4 9 7 14 + #7 6 9 9 13 + + *** override_batch_test +overriden inc - 99999 calls +calls/eo_do() EO [ms] [ns]/call - EO2 [ms] [ns]/call + #1 4 46 5 51 + #3 11 38 11 39 + #5 18 36 18 37 + #7 25 36 25 36 + + *** virtual_test + + *** event_test diff --git a/eo2test/prof b/eo2test/prof new file mode 100644 index 0000000000..3663134e61 --- /dev/null +++ b/eo2test/prof @@ -0,0 +1,1004 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ms/call ms/call name + 44.45 0.04 0.04 1600004 0.00 0.00 eo2_call_resolve_internal + 22.22 0.06 0.02 3200010 0.00 0.00 _dich_func_get + 11.11 0.07 0.01 2000014 0.00 0.00 _eo_data_scope_get + 11.11 0.08 0.01 1600004 0.00 0.00 _eo_kls_itr_func_get + 11.11 0.09 0.01 400008 0.00 0.00 _eo_dov_internal + 0.00 0.09 0.00 1600004 0.00 0.00 _eo_op_internal + 0.00 0.09 0.00 1599987 0.00 0.00 _inc + 0.00 0.09 0.00 1599987 0.00 0.00 _inc + 0.00 0.09 0.00 1599987 0.00 0.00 eo2_inc + 0.00 0.09 0.00 800027 0.00 0.00 _eo_obj_pointer_get + 0.00 0.09 0.00 800021 0.00 0.00 _eo_unref + 0.00 0.09 0.00 800019 0.00 0.00 _eo_ref + 0.00 0.09 0.00 400010 0.00 0.00 _eo2_do_end + 0.00 0.09 0.00 400010 0.00 0.00 eo2_do_end + 0.00 0.09 0.00 400010 0.00 0.00 eo2_do_start + 0.00 0.09 0.00 400007 0.00 0.00 eo_do_internal + 0.00 0.09 0.00 63 0.00 0.00 _dich_chain_alloc + 0.00 0.09 0.00 60 0.00 0.00 _dich_func_set + 0.00 0.09 0.00 38 0.00 0.00 eina_list_data_get + 0.00 0.09 0.00 26 0.00 0.00 _eo_op_class_get + 0.00 0.09 0.00 26 0.00 0.00 _eo_op_id_desc_get + 0.00 0.09 0.00 14 0.00 0.00 _eo_class_pointer_get + 0.00 0.09 0.00 14 0.00 0.00 check + 0.00 0.09 0.00 12 0.00 0.00 eina_list_count + 0.00 0.09 0.00 8 0.00 0.00 _eo2_api_desc_get + 0.00 0.09 0.00 8 0.00 0.00 _eo_class_list_remove_duplicates + 0.00 0.09 0.00 8 0.00 0.00 eina_list_last + 0.00 0.09 0.00 8 0.00 0.00 eina_list_next + 0.00 0.09 0.00 8 0.00 0.00 eina_mempool_alignof + 0.00 0.09 0.00 7 0.00 0.00 _eo_class_id_get + 0.00 0.09 0.00 7 0.00 0.00 _get + 0.00 0.09 0.00 7 0.00 0.00 _get + 0.00 0.09 0.00 7 0.00 0.00 eo2_api_op_id_get + 0.00 0.09 0.00 7 0.00 0.00 eo2_get + 0.00 0.09 0.00 5 0.00 0.00 _set + 0.00 0.09 0.00 5 0.00 0.00 _set + 0.00 0.09 0.00 5 0.00 0.00 eo2_set + 0.00 0.09 0.00 5 0.00 0.00 eo_base_class_get + 0.00 0.09 0.00 4 0.00 0.00 _dich_func_clean_all + 0.00 0.09 0.00 4 0.00 0.00 _eo_class_base_op_init + 0.00 0.09 0.00 4 0.00 0.00 _eo_class_constructor + 0.00 0.09 0.00 4 0.00 0.00 _eo_class_mro_add + 0.00 0.09 0.00 4 0.00 0.00 _eo_class_mro_init + 0.00 0.09 0.00 4 0.00 0.00 _eo_condtor_done + 0.00 0.09 0.00 4 0.00 0.00 _eo_condtor_reset + 0.00 0.09 0.00 4 0.00 0.00 eina_list_prev + 0.00 0.09 0.00 4 0.00 0.00 eina_lock_release + 0.00 0.09 0.00 4 0.00 0.00 eina_lock_take + 0.00 0.09 0.00 4 0.00 0.00 eo_class_free + 0.00 0.09 0.00 4 0.00 0.00 eo_class_name_get + 0.00 0.09 0.00 4 0.00 0.00 eo_class_new + 0.00 0.09 0.00 4 0.00 0.00 eo_parent_set + 0.00 0.09 0.00 4 0.00 0.00 report + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_release + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_release + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_release + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_release + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_take + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_take + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_take + 0.00 0.09 0.00 3 0.00 0.00 eina_lock_take + 0.00 0.09 0.00 3 0.00 0.00 simple_class_get + 0.00 0.09 0.00 2 0.00 0.00 _dich_copy_all + 0.00 0.09 0.00 2 0.00 0.00 _eo2_class_funcs_set + 0.00 0.09 0.00 2 0.00 0.00 _eo2_kls_itr_next + 0.00 0.09 0.00 2 0.00 0.00 _eo_class_check_op_descs + 0.00 0.09 0.00 2 0.00 0.00 _eo_del_internal + 0.00 0.09 0.00 2 0.00 0.00 _eo_free + 0.00 0.09 0.00 2 0.00 0.00 _eo_id_allocate + 0.00 0.09 0.00 2 0.00 0.00 _eo_id_mem_alloc + 0.00 0.09 0.00 2 0.00 0.00 _eo_id_mem_calloc + 0.00 0.09 0.00 2 0.00 0.00 _eo_id_mem_free + 0.00 0.09 0.00 2 0.00 0.00 _eo_id_release + 0.00 0.09 0.00 2 0.00 0.00 _eo_kls_itr_next + 0.00 0.09 0.00 2 0.00 0.00 eo2_destructor + 0.00 0.09 0.00 2 0.00 0.00 eo_class_funcs_set + 0.00 0.09 0.00 2 0.00 0.00 eo_del + 0.00 0.09 0.00 2 0.00 0.00 eo_do_super_internal + 0.00 0.09 0.00 2 0.00 0.00 eo_unref + 0.00 0.09 0.00 1 0.00 0.00 _class_constructor + 0.00 0.09 0.00 1 0.00 0.00 _class_constructor + 0.00 0.09 0.00 1 0.00 0.00 _class_constructor + 0.00 0.09 0.00 1 0.00 0.00 _constructor + 0.00 0.09 0.00 1 0.00 0.00 _constructor + 0.00 0.09 0.00 1 0.00 0.00 _constructor + 0.00 0.09 0.00 1 0.00 0.00 _constructor + 0.00 0.09 0.00 1 0.00 0.00 _destructor + 0.00 0.09 0.00 1 0.00 0.00 _destructor + 0.00 0.09 0.00 1 0.00 0.00 _destructor + 0.00 0.09 0.00 1 0.00 0.00 _destructor + 0.00 0.09 0.00 1 0.00 0.00 _eo_callback_remove_all + 0.00 0.09 0.00 1 0.00 0.00 _eo_callback_remove_all + 0.00 0.09 0.00 1 0.00 0.00 _eo_callbacks_clear + 0.00 0.09 0.00 1 0.00 0.00 _eo_callbacks_clear + 0.00 0.09 0.00 1 0.00 0.00 _eo_free_ids_tables + 0.00 0.09 0.00 1 0.00 0.00 _eo_generic_data_del_all + 0.00 0.09 0.00 1 0.00 0.00 _eo_generic_data_del_all + 0.00 0.09 0.00 1 0.00 0.00 _eo_obj_pointer_get + 0.00 0.09 0.00 1 0.00 0.00 _eo_obj_pointer_get + 0.00 0.09 0.00 1 0.00 0.00 _eo_ref + 0.00 0.09 0.00 1 0.00 0.00 _eo_ref + 0.00 0.09 0.00 1 0.00 0.00 _eo_unref + 0.00 0.09 0.00 1 0.00 0.00 _eo_unref + 0.00 0.09 0.00 1 0.00 0.00 _ev_cb_call + 0.00 0.09 0.00 1 0.00 0.00 _ev_cb_call + 0.00 0.09 0.00 1 0.00 0.00 _get_available_entry + 0.00 0.09 0.00 1 0.00 0.00 _search_tables + 0.00 0.09 0.00 1 0.00 0.00 _wref_destruct + 0.00 0.09 0.00 1 0.00 0.00 _wref_destruct + 0.00 0.09 0.00 1 0.00 90.01 do_batch_test + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_free + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_free + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_free + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_free + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_free + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_new + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_new + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_new + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_new + 0.00 0.09 0.00 1 0.00 0.00 eina_lock_new + 0.00 0.09 0.00 1 0.00 0.00 eo2_add_internal_end + 0.00 0.09 0.00 1 0.00 0.00 eo2_add_internal_start + 0.00 0.09 0.00 1 0.00 0.00 eo2_base_class_get + 0.00 0.09 0.00 1 0.00 0.00 eo2_constructor + 0.00 0.09 0.00 1 0.00 0.00 eo2_event_callback_call + 0.00 0.09 0.00 1 0.00 0.00 eo2_simple_class_get + 0.00 0.09 0.00 1 0.00 0.00 eo2_simple_constructor + 0.00 0.09 0.00 1 0.00 0.00 eo_add_internal + 0.00 0.09 0.00 1 0.00 0.00 eo_init + 0.00 0.09 0.00 1 0.00 0.00 eo_shutdown + 0.00 0.09 0.00 1 0.00 90.01 run_batch + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + + Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 11.11% of 0.09 seconds + +index % time self children called name + 0.00 0.09 1/1 main [2] +[1] 100.0 0.00 0.09 1 do_batch_test [1] + 0.00 0.09 1/1 run_batch [3] + 0.00 0.00 1/1 eo2_simple_constructor [15] + 0.00 0.00 3/7 eo2_get [13] + 0.00 0.00 3/1599987 eo2_inc [5] + 0.00 0.00 2/800016 eo2_do_end <cycle 1> [26] + 0.00 0.00 2/2 eo_del [16] + 0.00 0.00 1/1 eo_add_internal [18] + 0.00 0.00 1/800016 eo_do_internal <cycle 1> [28] + 0.00 0.00 1/5 eo2_set [14] + 0.00 0.00 6/14 check [30] + 0.00 0.00 2/400010 eo2_do_start [27] + 0.00 0.00 1/3 simple_class_get [53] + 0.00 0.00 1/1 eo2_simple_class_get [68] + 0.00 0.00 1/1 eo2_add_internal_start [66] + 0.00 0.00 1/1 eo2_add_internal_end [65] +----------------------------------------------- + <spontaneous> +[2] 100.0 0.00 0.09 main [2] + 0.00 0.09 1/1 do_batch_test [1] + 0.00 0.00 1/1 eo_init [69] + 0.00 0.00 1/1 eo_shutdown [70] +----------------------------------------------- + 0.00 0.09 1/1 do_batch_test [1] +[3] 100.0 0.00 0.09 1 run_batch [3] + 0.00 0.05 1599984/1599987 eo2_inc [5] + 0.01 0.01 400004/800016 eo_do_internal <cycle 1> [28] + 0.01 0.01 400004/800016 eo2_do_end <cycle 1> [26] + 0.00 0.00 4/5 eo2_set [14] + 0.00 0.00 4/7 eo2_get [13] + 0.00 0.00 400004/400010 eo2_do_start [27] + 0.00 0.00 8/14 check [30] + 0.00 0.00 4/4 report [44] +----------------------------------------------- + 0.00 0.00 1/1600004 eo2_event_callback_call [22] + 0.00 0.00 1/1600004 eo2_constructor [21] + 0.00 0.00 1/1600004 eo2_simple_constructor [15] + 0.00 0.00 2/1600004 eo2_destructor <cycle 1> [20] + 0.00 0.00 5/1600004 eo2_set [14] + 0.00 0.00 7/1600004 eo2_get [13] + 0.04 0.01 1599987/1600004 eo2_inc [5] +[4] 57.8 0.04 0.01 1600004 eo2_call_resolve_internal [4] + 0.01 0.00 1600004/3200010 _dich_func_get [10] + 0.00 0.00 400010/2000014 _eo_data_scope_get [12] +----------------------------------------------- + 0.00 0.00 3/1599987 do_batch_test [1] + 0.00 0.05 1599984/1599987 run_batch [3] +[5] 57.8 0.00 0.05 1599987 eo2_inc [5] + 0.04 0.01 1599987/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 1599987/1599987 _inc [156] + 0.00 0.00 1/7 eo2_api_op_id_get [35] +----------------------------------------------- +[6] 42.2 0.01 0.03 800016+1600045 <cycle 1 as a whole> [6] + 0.01 0.03 400008 _eo_dov_internal <cycle 1> [7] + 0.00 0.00 2 eo2_destructor <cycle 1> [20] + 0.00 0.00 2 _eo_del_internal <cycle 1> [23] + 0.00 0.00 800021 _eo_unref <cycle 1> [159] + 0.00 0.00 400010 eo2_do_end <cycle 1> [26] + 0.00 0.00 400010 _eo2_do_end <cycle 1> [161] + 0.00 0.00 400007 eo_do_internal <cycle 1> [28] + 0.00 0.00 1 _destructor <cycle 1> [199] +----------------------------------------------- + 400007 eo_do_internal <cycle 1> [28] + 0.00 0.00 1/800016 eo_add_internal [18] +[7] 42.2 0.01 0.03 400008 _eo_dov_internal <cycle 1> [7] + 0.00 0.03 1600002/1600002 _eo_op_internal <cycle 2> [9] + 0.00 0.00 400008/800019 _eo_ref [160] + 400008 _eo_unref <cycle 1> [159] +----------------------------------------------- +[8] 31.1 0.00 0.03 1600002+6 <cycle 2 as a whole> [8] + 0.00 0.03 1600004 _eo_op_internal <cycle 2> [9] + 0.00 0.00 2 eo_do_super_internal <cycle 2> [24] + 0.00 0.00 1 _constructor <cycle 2> [196] + 0.00 0.00 1 _destructor <cycle 2> [200] +----------------------------------------------- + 2 eo_do_super_internal <cycle 2> [24] + 0.00 0.03 1600002/1600002 _eo_dov_internal <cycle 1> [7] +[9] 31.1 0.00 0.03 1600004 _eo_op_internal <cycle 2> [9] + 0.01 0.01 1600004/1600004 _eo_kls_itr_func_get [11] + 0.01 0.00 1600004/2000014 _eo_data_scope_get [12] + 0.00 0.00 1599987/1599987 _inc [157] + 0.00 0.00 7/7 _get [171] + 0.00 0.00 5/5 _set [173] + 0.00 0.00 1/1 _destructor [197] + 0.00 0.00 1/1 _ev_cb_call [214] + 0.00 0.00 1/1 _constructor [194] + 1 _destructor <cycle 2> [200] + 1 _constructor <cycle 2> [196] +----------------------------------------------- + 0.00 0.00 2/3200010 _eo_kls_itr_next [25] + 0.01 0.00 1600004/3200010 eo2_call_resolve_internal [4] + 0.01 0.00 1600004/3200010 _eo_kls_itr_func_get [11] +[10] 22.2 0.02 0.00 3200010 _dich_func_get [10] +----------------------------------------------- + 0.01 0.01 1600004/1600004 _eo_op_internal <cycle 2> [9] +[11] 22.2 0.01 0.01 1600004 _eo_kls_itr_func_get [11] + 0.01 0.00 1600004/3200010 _dich_func_get [10] +----------------------------------------------- + 0.00 0.00 400010/2000014 eo2_call_resolve_internal [4] + 0.01 0.00 1600004/2000014 _eo_op_internal <cycle 2> [9] +[12] 11.1 0.01 0.00 2000014 _eo_data_scope_get [12] +----------------------------------------------- + 0.00 0.00 3/7 do_batch_test [1] + 0.00 0.00 4/7 run_batch [3] +[13] 0.0 0.00 0.00 7 eo2_get [13] + 0.00 0.00 7/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 7/7 _get [170] + 0.00 0.00 1/7 eo2_api_op_id_get [35] +----------------------------------------------- + 0.00 0.00 1/5 do_batch_test [1] + 0.00 0.00 4/5 run_batch [3] +[14] 0.0 0.00 0.00 5 eo2_set [14] + 0.00 0.00 5/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 5/5 _set [172] + 0.00 0.00 1/7 eo2_api_op_id_get [35] +----------------------------------------------- + 0.00 0.00 1/1 do_batch_test [1] +[15] 0.0 0.00 0.00 1 eo2_simple_constructor [15] + 0.00 0.00 1/1 _constructor [19] + 0.00 0.00 1/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 1/7 eo2_api_op_id_get [35] +----------------------------------------------- + 0.00 0.00 2/2 do_batch_test [1] +[16] 0.0 0.00 0.00 2 eo_del [16] + 0.00 0.00 2/2 eo_unref [17] + 0.00 0.00 2/4 eo_parent_set [43] +----------------------------------------------- + 0.00 0.00 2/2 eo_del [16] +[17] 0.0 0.00 0.00 2 eo_unref [17] + 0.00 0.00 2/800016 _eo_unref <cycle 1> [159] + 0.00 0.00 2/800027 _eo_obj_pointer_get [158] +----------------------------------------------- + 0.00 0.00 1/1 do_batch_test [1] +[18] 0.0 0.00 0.00 1 eo_add_internal [18] + 0.00 0.00 1/800016 _eo_dov_internal <cycle 1> [7] + 0.00 0.00 1/800016 _eo_unref <cycle 1> [159] + 0.00 0.00 1/14 _eo_class_pointer_get [166] + 0.00 0.00 1/2 _eo_id_allocate [186] + 0.00 0.00 1/4 eo_parent_set [43] + 0.00 0.00 1/4 _eo_condtor_reset [180] + 0.00 0.00 1/800019 _eo_ref [160] +----------------------------------------------- + 0.00 0.00 1/1 eo2_simple_constructor [15] +[19] 0.0 0.00 0.00 1 _constructor [19] + 0.00 0.00 1/800016 eo2_do_end <cycle 1> [26] + 0.00 0.00 1/1 eo2_constructor [21] + 0.00 0.00 1/400010 eo2_do_start [27] +----------------------------------------------- + 1 _eo_del_internal <cycle 1> [23] + 1 _destructor <cycle 1> [199] +[20] 0.0 0.00 0.00 2 eo2_destructor <cycle 1> [20] + 0.00 0.00 2/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 1/7 eo2_api_op_id_get [35] + 0.00 0.00 1/1 _destructor [198] + 1 _destructor <cycle 1> [199] +----------------------------------------------- + 0.00 0.00 1/1 _constructor [19] +[21] 0.0 0.00 0.00 1 eo2_constructor [21] + 0.00 0.00 1/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 1/7 eo2_api_op_id_get [35] + 0.00 0.00 1/1 _constructor [195] +----------------------------------------------- + 0.00 0.00 1/1 _eo_del_internal <cycle 1> [23] +[22] 0.0 0.00 0.00 1 eo2_event_callback_call [22] + 0.00 0.00 1/1600004 eo2_call_resolve_internal [4] + 0.00 0.00 1/7 eo2_api_op_id_get [35] + 0.00 0.00 1/1 _ev_cb_call [215] +----------------------------------------------- + 2 _eo_unref <cycle 1> [159] +[23] 0.0 0.00 0.00 2 _eo_del_internal <cycle 1> [23] + 0.00 0.00 1/1 eo2_event_callback_call [22] + 0.00 0.00 2/400010 eo2_do_start [27] + 0.00 0.00 2/4 _eo_condtor_reset [180] + 0.00 0.00 2/8 eina_list_next [33] + 0.00 0.00 2/38 eina_list_data_get [29] + 2 eo2_do_end <cycle 1> [26] + 2 eo_do_internal <cycle 1> [28] + 1 eo2_destructor <cycle 1> [20] +----------------------------------------------- + 1 _constructor <cycle 2> [196] + 1 _destructor <cycle 2> [200] +[24] 0.0 0.00 0.00 2 eo_do_super_internal <cycle 2> [24] + 0.00 0.00 2/2 _eo_kls_itr_next [25] + 0.00 0.00 2/800027 _eo_obj_pointer_get [158] + 0.00 0.00 2/14 _eo_class_pointer_get [166] + 2 _eo_op_internal <cycle 2> [9] +----------------------------------------------- + 0.00 0.00 2/2 eo_do_super_internal <cycle 2> [24] +[25] 0.0 0.00 0.00 2 _eo_kls_itr_next [25] + 0.00 0.00 2/3200010 _dich_func_get [10] +----------------------------------------------- + 1 _destructor <cycle 1> [199] + 2 _eo_del_internal <cycle 1> [23] + 0.00 0.00 1/800016 _constructor [19] + 0.00 0.00 2/800016 do_batch_test [1] + 0.01 0.01 400004/800016 run_batch [3] +[26] 0.0 0.00 0.00 400010 eo2_do_end <cycle 1> [26] + 400010 _eo2_do_end <cycle 1> [161] +----------------------------------------------- + 0.00 0.00 1/400010 _constructor [19] + 0.00 0.00 1/400010 _destructor <cycle 1> [199] + 0.00 0.00 2/400010 _eo_del_internal <cycle 1> [23] + 0.00 0.00 2/400010 do_batch_test [1] + 0.00 0.00 400004/400010 run_batch [3] +[27] 0.0 0.00 0.00 400010 eo2_do_start [27] + 0.00 0.00 400010/800019 _eo_ref [160] + 0.00 0.00 400008/800027 _eo_obj_pointer_get [158] + 0.00 0.00 2/2 _eo2_kls_itr_next [183] +----------------------------------------------- + 2 _eo_del_internal <cycle 1> [23] + 0.00 0.00 1/800016 do_batch_test [1] + 0.01 0.01 400004/800016 run_batch [3] +[28] 0.0 0.00 0.00 400007 eo_do_internal <cycle 1> [28] + 0.00 0.00 400007/800027 _eo_obj_pointer_get [158] + 400007 _eo_dov_internal <cycle 1> [7] +----------------------------------------------- + 0.00 0.00 2/38 _eo_del_internal <cycle 1> [23] + 0.00 0.00 8/38 _eo_class_mro_init [178] + 0.00 0.00 28/38 eo_class_new [42] +[29] 0.0 0.00 0.00 38 eina_list_data_get [29] +----------------------------------------------- + 0.00 0.00 6/14 do_batch_test [1] + 0.00 0.00 8/14 run_batch [3] +[30] 0.0 0.00 0.00 14 check [30] +----------------------------------------------- + 0.00 0.00 12/12 eo_class_new [42] +[31] 0.0 0.00 0.00 12 eina_list_count [31] +----------------------------------------------- + 0.00 0.00 8/8 _eo_class_list_remove_duplicates [168] +[32] 0.0 0.00 0.00 8 eina_list_last [32] +----------------------------------------------- + 0.00 0.00 2/8 _eo_del_internal <cycle 1> [23] + 0.00 0.00 6/8 eo_class_new [42] +[33] 0.0 0.00 0.00 8 eina_list_next [33] +----------------------------------------------- + 0.00 0.00 2/8 eo_init [69] + 0.00 0.00 6/8 eo_class_new [42] +[34] 0.0 0.00 0.00 8 eina_mempool_alignof [34] +----------------------------------------------- + 0.00 0.00 1/7 eo2_event_callback_call [22] + 0.00 0.00 1/7 eo2_constructor [21] + 0.00 0.00 1/7 eo2_destructor <cycle 1> [20] + 0.00 0.00 1/7 eo2_inc [5] + 0.00 0.00 1/7 eo2_get [13] + 0.00 0.00 1/7 eo2_set [14] + 0.00 0.00 1/7 eo2_simple_constructor [15] +[35] 0.0 0.00 0.00 7 eo2_api_op_id_get [35] + 0.00 0.00 7/8 _eo2_api_desc_get [167] +----------------------------------------------- + 0.00 0.00 1/5 _constructor [194] + 0.00 0.00 1/5 _destructor [197] + 0.00 0.00 1/5 _constructor [195] + 0.00 0.00 1/5 _destructor [198] + 0.00 0.00 1/5 simple_class_get [53] +[36] 0.0 0.00 0.00 5 eo_base_class_get [36] + 0.00 0.00 3/3 eina_lock_take [49] + 0.00 0.00 3/3 eina_lock_release [45] + 0.00 0.00 1/1 eina_lock_new [61] + 0.00 0.00 1/4 eo_class_new [42] + 0.00 0.00 1/1 eina_lock_free [56] +----------------------------------------------- + 0.00 0.00 4/4 _eo_class_list_remove_duplicates [168] +[37] 0.0 0.00 0.00 4 eina_list_prev [37] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_new [42] +[38] 0.0 0.00 0.00 4 eina_lock_release [38] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_new [42] +[39] 0.0 0.00 0.00 4 eina_lock_take [39] +----------------------------------------------- + 0.00 0.00 4/4 eo_shutdown [70] +[40] 0.0 0.00 0.00 4 eo_class_free [40] + 0.00 0.00 4/4 _dich_func_clean_all [174] +----------------------------------------------- + 0.00 0.00 1/4 _constructor [194] + 0.00 0.00 1/4 _destructor [197] + 0.00 0.00 1/4 _constructor [195] + 0.00 0.00 1/4 _destructor [198] +[41] 0.0 0.00 0.00 4 eo_class_name_get [41] + 0.00 0.00 4/14 _eo_class_pointer_get [166] +----------------------------------------------- + 0.00 0.00 1/4 eo_base_class_get [36] + 0.00 0.00 1/4 eo2_base_class_get [67] + 0.00 0.00 1/4 eo2_simple_class_get [68] + 0.00 0.00 1/4 simple_class_get [53] +[42] 0.0 0.00 0.00 4 eo_class_new [42] + 0.00 0.00 28/38 eina_list_data_get [29] + 0.00 0.00 12/12 eina_list_count [31] + 0.00 0.00 6/8 eina_list_next [33] + 0.00 0.00 6/8 eina_mempool_alignof [34] + 0.00 0.00 6/60 _dich_func_set [163] + 0.00 0.00 4/14 _eo_class_pointer_get [166] + 0.00 0.00 4/8 _eo_class_list_remove_duplicates [168] + 0.00 0.00 4/4 _eo_class_mro_init [178] + 0.00 0.00 4/4 _eo_class_base_op_init [175] + 0.00 0.00 4/4 eina_lock_take [39] + 0.00 0.00 4/4 eina_lock_release [38] + 0.00 0.00 4/7 _eo_class_id_get [169] + 0.00 0.00 4/4 _eo_class_constructor [176] + 0.00 0.00 2/2 _eo_class_check_op_descs [184] + 0.00 0.00 2/2 _dich_copy_all [181] +----------------------------------------------- + 0.00 0.00 1/4 eo2_add_internal_start [66] + 0.00 0.00 1/4 eo_add_internal [18] + 0.00 0.00 2/4 eo_del [16] +[43] 0.0 0.00 0.00 4 eo_parent_set [43] + 0.00 0.00 4/800027 _eo_obj_pointer_get [158] +----------------------------------------------- + 0.00 0.00 4/4 run_batch [3] +[44] 0.0 0.00 0.00 4 report [44] +----------------------------------------------- + 0.00 0.00 3/3 eo_base_class_get [36] +[45] 0.0 0.00 0.00 3 eina_lock_release [45] +----------------------------------------------- + 0.00 0.00 3/3 eo2_base_class_get [67] +[46] 0.0 0.00 0.00 3 eina_lock_release [46] +----------------------------------------------- + 0.00 0.00 3/3 eo2_simple_class_get [68] +[47] 0.0 0.00 0.00 3 eina_lock_release [47] +----------------------------------------------- + 0.00 0.00 3/3 simple_class_get [53] +[48] 0.0 0.00 0.00 3 eina_lock_release [48] +----------------------------------------------- + 0.00 0.00 3/3 eo_base_class_get [36] +[49] 0.0 0.00 0.00 3 eina_lock_take [49] +----------------------------------------------- + 0.00 0.00 3/3 eo2_base_class_get [67] +[50] 0.0 0.00 0.00 3 eina_lock_take [50] +----------------------------------------------- + 0.00 0.00 3/3 eo2_simple_class_get [68] +[51] 0.0 0.00 0.00 3 eina_lock_take [51] +----------------------------------------------- + 0.00 0.00 3/3 simple_class_get [53] +[52] 0.0 0.00 0.00 3 eina_lock_take [52] +----------------------------------------------- + 0.00 0.00 1/3 _constructor <cycle 2> [196] + 0.00 0.00 1/3 _destructor <cycle 2> [200] + 0.00 0.00 1/3 do_batch_test [1] +[53] 0.0 0.00 0.00 3 simple_class_get [53] + 0.00 0.00 3/3 eina_lock_take [52] + 0.00 0.00 3/3 eina_lock_release [48] + 0.00 0.00 1/1 eina_lock_new [64] + 0.00 0.00 1/5 eo_base_class_get [36] + 0.00 0.00 1/4 eo_class_new [42] + 0.00 0.00 1/1 eina_lock_free [59] +----------------------------------------------- + 0.00 0.00 1/2 _class_constructor [191] + 0.00 0.00 1/2 _class_constructor [193] +[54] 0.0 0.00 0.00 2 eo_class_funcs_set [54] + 0.00 0.00 26/26 _eo_op_id_desc_get [165] + 0.00 0.00 26/60 _dich_func_set [163] + 0.00 0.00 2/14 _eo_class_pointer_get [166] +----------------------------------------------- + 0.00 0.00 1/1 eo_shutdown [70] +[55] 0.0 0.00 0.00 1 eina_lock_free [55] +----------------------------------------------- + 0.00 0.00 1/1 eo_base_class_get [36] +[56] 0.0 0.00 0.00 1 eina_lock_free [56] +----------------------------------------------- + 0.00 0.00 1/1 eo2_base_class_get [67] +[57] 0.0 0.00 0.00 1 eina_lock_free [57] +----------------------------------------------- + 0.00 0.00 1/1 eo2_simple_class_get [68] +[58] 0.0 0.00 0.00 1 eina_lock_free [58] +----------------------------------------------- + 0.00 0.00 1/1 simple_class_get [53] +[59] 0.0 0.00 0.00 1 eina_lock_free [59] +----------------------------------------------- + 0.00 0.00 1/1 eo_init [69] +[60] 0.0 0.00 0.00 1 eina_lock_new [60] +----------------------------------------------- + 0.00 0.00 1/1 eo_base_class_get [36] +[61] 0.0 0.00 0.00 1 eina_lock_new [61] +----------------------------------------------- + 0.00 0.00 1/1 eo2_base_class_get [67] +[62] 0.0 0.00 0.00 1 eina_lock_new [62] +----------------------------------------------- + 0.00 0.00 1/1 eo2_simple_class_get [68] +[63] 0.0 0.00 0.00 1 eina_lock_new [63] +----------------------------------------------- + 0.00 0.00 1/1 simple_class_get [53] +[64] 0.0 0.00 0.00 1 eina_lock_new [64] +----------------------------------------------- + 0.00 0.00 1/1 do_batch_test [1] +[65] 0.0 0.00 0.00 1 eo2_add_internal_end [65] +----------------------------------------------- + 0.00 0.00 1/1 do_batch_test [1] +[66] 0.0 0.00 0.00 1 eo2_add_internal_start [66] + 0.00 0.00 1/14 _eo_class_pointer_get [166] + 0.00 0.00 1/2 _eo_id_allocate [186] + 0.00 0.00 1/4 eo_parent_set [43] + 0.00 0.00 1/4 _eo_condtor_reset [180] +----------------------------------------------- + 0.00 0.00 1/1 eo2_simple_class_get [68] +[67] 0.0 0.00 0.00 1 eo2_base_class_get [67] + 0.00 0.00 3/3 eina_lock_take [50] + 0.00 0.00 3/3 eina_lock_release [46] + 0.00 0.00 1/1 eina_lock_new [62] + 0.00 0.00 1/4 eo_class_new [42] + 0.00 0.00 1/1 eina_lock_free [57] +----------------------------------------------- + 0.00 0.00 1/1 do_batch_test [1] +[68] 0.0 0.00 0.00 1 eo2_simple_class_get [68] + 0.00 0.00 3/3 eina_lock_take [51] + 0.00 0.00 3/3 eina_lock_release [47] + 0.00 0.00 1/1 eina_lock_new [63] + 0.00 0.00 1/1 eo2_base_class_get [67] + 0.00 0.00 1/4 eo_class_new [42] + 0.00 0.00 1/1 eina_lock_free [58] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[69] 0.0 0.00 0.00 1 eo_init [69] + 0.00 0.00 2/8 eina_mempool_alignof [34] + 0.00 0.00 1/1 eina_lock_new [60] +----------------------------------------------- + 0.00 0.00 1/1 main [2] +[70] 0.0 0.00 0.00 1 eo_shutdown [70] + 0.00 0.00 4/4 eo_class_free [40] + 0.00 0.00 1/1 _eo_free_ids_tables [205] + 0.00 0.00 1/1 eina_lock_free [55] +----------------------------------------------- + 0.00 0.00 1599987/1599987 eo2_inc [5] +[156] 0.0 0.00 0.00 1599987 _inc [156] +----------------------------------------------- + 0.00 0.00 1599987/1599987 _eo_op_internal <cycle 2> [9] +[157] 0.0 0.00 0.00 1599987 _inc [157] +----------------------------------------------- + 0.00 0.00 2/800027 eo_do_super_internal <cycle 2> [24] + 0.00 0.00 2/800027 eo_unref [17] + 0.00 0.00 4/800027 eo_parent_set [43] + 0.00 0.00 4/800027 _eo_condtor_done [179] + 0.00 0.00 400007/800027 eo_do_internal <cycle 1> [28] + 0.00 0.00 400008/800027 eo2_do_start [27] +[158] 0.0 0.00 0.00 800027 _eo_obj_pointer_get [158] +----------------------------------------------- + 400008 _eo_dov_internal <cycle 1> [7] + 400010 _eo2_do_end <cycle 1> [161] + 0.00 0.00 1/800016 eo_add_internal [18] + 0.00 0.00 2/800016 eo_unref [17] +[159] 0.0 0.00 0.00 800021 _eo_unref <cycle 1> [159] + 0.00 0.00 2/2 _eo_free [185] + 2 _eo_del_internal <cycle 1> [23] +----------------------------------------------- + 0.00 0.00 1/800019 eo_add_internal [18] + 0.00 0.00 400008/800019 _eo_dov_internal <cycle 1> [7] + 0.00 0.00 400010/800019 eo2_do_start [27] +[160] 0.0 0.00 0.00 800019 _eo_ref [160] +----------------------------------------------- + 400010 eo2_do_end <cycle 1> [26] +[161] 0.0 0.00 0.00 400010 _eo2_do_end <cycle 1> [161] + 400010 _eo_unref <cycle 1> [159] +----------------------------------------------- + 0.00 0.00 3/63 _dich_copy_all [181] + 0.00 0.00 60/63 _dich_func_set [163] +[162] 0.0 0.00 0.00 63 _dich_chain_alloc [162] +----------------------------------------------- + 0.00 0.00 6/60 eo_class_new [42] + 0.00 0.00 26/60 eo_class_funcs_set [54] + 0.00 0.00 28/60 _eo2_class_funcs_set [182] +[163] 0.0 0.00 0.00 60 _dich_func_set [163] + 0.00 0.00 60/63 _dich_chain_alloc [162] +----------------------------------------------- + 0.00 0.00 26/26 _eo_op_id_desc_get [165] +[164] 0.0 0.00 0.00 26 _eo_op_class_get [164] +----------------------------------------------- + 0.00 0.00 26/26 eo_class_funcs_set [54] +[165] 0.0 0.00 0.00 26 _eo_op_id_desc_get [165] + 0.00 0.00 26/26 _eo_op_class_get [164] +----------------------------------------------- + 0.00 0.00 1/14 eo2_add_internal_start [66] + 0.00 0.00 1/14 eo_add_internal [18] + 0.00 0.00 2/14 eo_do_super_internal <cycle 2> [24] + 0.00 0.00 2/14 eo_class_funcs_set [54] + 0.00 0.00 4/14 eo_class_name_get [41] + 0.00 0.00 4/14 eo_class_new [42] +[166] 0.0 0.00 0.00 14 _eo_class_pointer_get [166] +----------------------------------------------- + 0.00 0.00 1/8 _eo2_class_funcs_set [182] + 0.00 0.00 7/8 eo2_api_op_id_get [35] +[167] 0.0 0.00 0.00 8 _eo2_api_desc_get [167] +----------------------------------------------- + 0.00 0.00 4/8 _eo_class_mro_init [178] + 0.00 0.00 4/8 eo_class_new [42] +[168] 0.0 0.00 0.00 8 _eo_class_list_remove_duplicates [168] + 0.00 0.00 8/8 eina_list_last [32] + 0.00 0.00 4/4 eina_list_prev [37] +----------------------------------------------- + 0.00 0.00 3/7 _eo_class_constructor [176] + 0.00 0.00 4/7 eo_class_new [42] +[169] 0.0 0.00 0.00 7 _eo_class_id_get [169] +----------------------------------------------- + 0.00 0.00 7/7 eo2_get [13] +[170] 0.0 0.00 0.00 7 _get [170] +----------------------------------------------- + 0.00 0.00 7/7 _eo_op_internal <cycle 2> [9] +[171] 0.0 0.00 0.00 7 _get [171] +----------------------------------------------- + 0.00 0.00 5/5 eo2_set [14] +[172] 0.0 0.00 0.00 5 _set [172] +----------------------------------------------- + 0.00 0.00 5/5 _eo_op_internal <cycle 2> [9] +[173] 0.0 0.00 0.00 5 _set [173] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_free [40] +[174] 0.0 0.00 0.00 4 _dich_func_clean_all [174] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_new [42] +[175] 0.0 0.00 0.00 4 _eo_class_base_op_init [175] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_new [42] +[176] 0.0 0.00 0.00 4 _eo_class_constructor [176] + 0.00 0.00 3/7 _eo_class_id_get [169] + 0.00 0.00 2/2 _eo2_class_funcs_set [182] + 0.00 0.00 1/1 _class_constructor [192] + 0.00 0.00 1/1 _class_constructor [193] + 0.00 0.00 1/1 _class_constructor [191] +----------------------------------------------- + 2 _eo_class_mro_add [177] + 0.00 0.00 4/4 _eo_class_mro_init [178] +[177] 0.0 0.00 0.00 4+2 _eo_class_mro_add [177] + 2 _eo_class_mro_add [177] +----------------------------------------------- + 0.00 0.00 4/4 eo_class_new [42] +[178] 0.0 0.00 0.00 4 _eo_class_mro_init [178] + 0.00 0.00 8/38 eina_list_data_get [29] + 0.00 0.00 4/4 _eo_class_mro_add [177] + 0.00 0.00 4/8 _eo_class_list_remove_duplicates [168] +----------------------------------------------- + 0.00 0.00 1/4 _constructor [194] + 0.00 0.00 1/4 _destructor [197] + 0.00 0.00 1/4 _constructor [195] + 0.00 0.00 1/4 _destructor [198] +[179] 0.0 0.00 0.00 4 _eo_condtor_done [179] + 0.00 0.00 4/800027 _eo_obj_pointer_get [158] +----------------------------------------------- + 0.00 0.00 1/4 eo2_add_internal_start [66] + 0.00 0.00 1/4 eo_add_internal [18] + 0.00 0.00 2/4 _eo_del_internal <cycle 1> [23] +[180] 0.0 0.00 0.00 4 _eo_condtor_reset [180] +----------------------------------------------- + 0.00 0.00 2/2 eo_class_new [42] +[181] 0.0 0.00 0.00 2 _dich_copy_all [181] + 0.00 0.00 3/63 _dich_chain_alloc [162] +----------------------------------------------- + 0.00 0.00 2/2 _eo_class_constructor [176] +[182] 0.0 0.00 0.00 2 _eo2_class_funcs_set [182] + 0.00 0.00 28/60 _dich_func_set [163] + 0.00 0.00 1/8 _eo2_api_desc_get [167] +----------------------------------------------- + 0.00 0.00 2/2 eo2_do_start [27] +[183] 0.0 0.00 0.00 2 _eo2_kls_itr_next [183] +----------------------------------------------- + 0.00 0.00 2/2 eo_class_new [42] +[184] 0.0 0.00 0.00 2 _eo_class_check_op_descs [184] +----------------------------------------------- + 0.00 0.00 2/2 _eo_unref <cycle 1> [159] +[185] 0.0 0.00 0.00 2 _eo_free [185] + 0.00 0.00 2/2 _eo_id_release [190] +----------------------------------------------- + 0.00 0.00 1/2 eo2_add_internal_start [66] + 0.00 0.00 1/2 eo_add_internal [18] +[186] 0.0 0.00 0.00 2 _eo_id_allocate [186] + 0.00 0.00 1/1 _get_available_entry [216] + 0.00 0.00 1/1 _search_tables [217] +----------------------------------------------- + 0.00 0.00 2/2 _eo_id_mem_calloc [188] +[187] 0.0 0.00 0.00 2 _eo_id_mem_alloc [187] +----------------------------------------------- + 0.00 0.00 2/2 _search_tables [217] +[188] 0.0 0.00 0.00 2 _eo_id_mem_calloc [188] + 0.00 0.00 2/2 _eo_id_mem_alloc [187] +----------------------------------------------- + 0.00 0.00 2/2 _eo_free_ids_tables [205] +[189] 0.0 0.00 0.00 2 _eo_id_mem_free [189] +----------------------------------------------- + 0.00 0.00 2/2 _eo_free [185] +[190] 0.0 0.00 0.00 2 _eo_id_release [190] +----------------------------------------------- + 0.00 0.00 1/1 _eo_class_constructor [176] +[191] 0.0 0.00 0.00 1 _class_constructor [191] + 0.00 0.00 1/2 eo_class_funcs_set [54] +----------------------------------------------- + 0.00 0.00 1/1 _eo_class_constructor [176] +[192] 0.0 0.00 0.00 1 _class_constructor [192] +----------------------------------------------- + 0.00 0.00 1/1 _eo_class_constructor [176] +[193] 0.0 0.00 0.00 1 _class_constructor [193] + 0.00 0.00 1/2 eo_class_funcs_set [54] +----------------------------------------------- + 0.00 0.00 1/1 _eo_op_internal <cycle 2> [9] +[194] 0.0 0.00 0.00 1 _constructor [194] + 0.00 0.00 1/4 eo_class_name_get [41] + 0.00 0.00 1/5 eo_base_class_get [36] + 0.00 0.00 1/4 _eo_condtor_done [179] +----------------------------------------------- + 0.00 0.00 1/1 eo2_constructor [21] +[195] 0.0 0.00 0.00 1 _constructor [195] + 0.00 0.00 1/5 eo_base_class_get [36] + 0.00 0.00 1/4 eo_class_name_get [41] + 0.00 0.00 1/4 _eo_condtor_done [179] +----------------------------------------------- + 1 _eo_op_internal <cycle 2> [9] +[196] 0.0 0.00 0.00 1 _constructor <cycle 2> [196] + 0.00 0.00 1/3 simple_class_get [53] + 1 eo_do_super_internal <cycle 2> [24] +----------------------------------------------- + 0.00 0.00 1/1 _eo_op_internal <cycle 2> [9] +[197] 0.0 0.00 0.00 1 _destructor [197] + 0.00 0.00 1/4 eo_class_name_get [41] + 0.00 0.00 1/5 eo_base_class_get [36] + 0.00 0.00 1/1 _eo_generic_data_del_all [206] + 0.00 0.00 1/1 _wref_destruct [218] + 0.00 0.00 1/1 _eo_callback_remove_all [201] + 0.00 0.00 1/4 _eo_condtor_done [179] +----------------------------------------------- + 0.00 0.00 1/1 eo2_destructor <cycle 1> [20] +[198] 0.0 0.00 0.00 1 _destructor [198] + 0.00 0.00 1/5 eo_base_class_get [36] + 0.00 0.00 1/4 eo_class_name_get [41] + 0.00 0.00 1/1 _eo_generic_data_del_all [207] + 0.00 0.00 1/1 _eo_callback_remove_all [202] + 0.00 0.00 1/1 _wref_destruct [219] + 0.00 0.00 1/4 _eo_condtor_done [179] +----------------------------------------------- + 1 eo2_destructor <cycle 1> [20] +[199] 0.0 0.00 0.00 1 _destructor <cycle 1> [199] + 0.00 0.00 1/400010 eo2_do_start [27] + 1 eo2_destructor <cycle 1> [20] + 1 eo2_do_end <cycle 1> [26] +----------------------------------------------- + 1 _eo_op_internal <cycle 2> [9] +[200] 0.0 0.00 0.00 1 _destructor <cycle 2> [200] + 0.00 0.00 1/3 simple_class_get [53] + 1 eo_do_super_internal <cycle 2> [24] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [197] +[201] 0.0 0.00 0.00 1 _eo_callback_remove_all [201] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [198] +[202] 0.0 0.00 0.00 1 _eo_callback_remove_all [202] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [214] +[203] 0.0 0.00 0.00 1 _eo_callbacks_clear [203] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [215] +[204] 0.0 0.00 0.00 1 _eo_callbacks_clear [204] +----------------------------------------------- + 0.00 0.00 1/1 eo_shutdown [70] +[205] 0.0 0.00 0.00 1 _eo_free_ids_tables [205] + 0.00 0.00 2/2 _eo_id_mem_free [189] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [197] +[206] 0.0 0.00 0.00 1 _eo_generic_data_del_all [206] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [198] +[207] 0.0 0.00 0.00 1 _eo_generic_data_del_all [207] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [214] +[208] 0.0 0.00 0.00 1 _eo_obj_pointer_get [208] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [215] +[209] 0.0 0.00 0.00 1 _eo_obj_pointer_get [209] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [214] +[210] 0.0 0.00 0.00 1 _eo_ref [210] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [215] +[211] 0.0 0.00 0.00 1 _eo_ref [211] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [214] +[212] 0.0 0.00 0.00 1 _eo_unref [212] +----------------------------------------------- + 0.00 0.00 1/1 _ev_cb_call [215] +[213] 0.0 0.00 0.00 1 _eo_unref [213] +----------------------------------------------- + 0.00 0.00 1/1 _eo_op_internal <cycle 2> [9] +[214] 0.0 0.00 0.00 1 _ev_cb_call [214] + 0.00 0.00 1/1 _eo_obj_pointer_get [208] + 0.00 0.00 1/1 _eo_ref [210] + 0.00 0.00 1/1 _eo_unref [212] + 0.00 0.00 1/1 _eo_callbacks_clear [203] +----------------------------------------------- + 0.00 0.00 1/1 eo2_event_callback_call [22] +[215] 0.0 0.00 0.00 1 _ev_cb_call [215] + 0.00 0.00 1/1 _eo_obj_pointer_get [209] + 0.00 0.00 1/1 _eo_ref [211] + 0.00 0.00 1/1 _eo_callbacks_clear [204] + 0.00 0.00 1/1 _eo_unref [213] +----------------------------------------------- + 0.00 0.00 1/1 _eo_id_allocate [186] +[216] 0.0 0.00 0.00 1 _get_available_entry [216] +----------------------------------------------- + 0.00 0.00 1/1 _eo_id_allocate [186] +[217] 0.0 0.00 0.00 1 _search_tables [217] + 0.00 0.00 2/2 _eo_id_mem_calloc [188] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [197] +[218] 0.0 0.00 0.00 1 _wref_destruct [218] +----------------------------------------------- + 0.00 0.00 1/1 _destructor [198] +[219] 0.0 0.00 0.00 1 _wref_destruct [219] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `<spontaneous>' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + + +Index by function name + + [191] _class_constructor (eo_base_class.c) [190] _eo_id_release (eo_ptr_indirection.x) [45] eina_lock_release (eina_inline_lock_posix.x) + [192] _class_constructor (eo2_base_class.c) [11] _eo_kls_itr_func_get (eo.c) [46] eina_lock_release (eina_inline_lock_posix.x) + [193] _class_constructor (eo_simple.c) [25] _eo_kls_itr_next (eo.c) [47] eina_lock_release (eina_inline_lock_posix.x) + [194] _constructor (eo_base_class.c) [158] _eo_obj_pointer_get (eo_ptr_indirection.x) [48] eina_lock_release (eina_inline_lock_posix.x) + [195] _constructor (eo2_base_class.c) [208] _eo_obj_pointer_get (eo_ptr_indirection.x) [39] eina_lock_take (eina_inline_lock_posix.x) + [19] _constructor (eo2_simple.c) [209] _eo_obj_pointer_get (eo_ptr_indirection.x) [49] eina_lock_take (eina_inline_lock_posix.x) + [196] _constructor (eo_simple.c) [164] _eo_op_class_get (eo.c) [50] eina_lock_take (eina_inline_lock_posix.x) + [197] _destructor (eo_base_class.c) [165] _eo_op_id_desc_get (eo.c) [51] eina_lock_take (eina_inline_lock_posix.x) + [198] _destructor (eo2_base_class.c) [9] _eo_op_internal (eo.c) [52] eina_lock_take (eina_inline_lock_posix.x) + [199] _destructor (eo2_simple.c) [160] _eo_ref (eo_private.h) [34] eina_mempool_alignof (eina_inline_mempool.x) + [200] _destructor (eo_simple.c) [210] _eo_ref (eo_private.h) [65] eo2_add_internal_end + [162] _dich_chain_alloc (eo.c) [211] _eo_ref (eo_private.h) [66] eo2_add_internal_start + [181] _dich_copy_all (eo.c) [159] _eo_unref (eo_private.h) [35] eo2_api_op_id_get + [174] _dich_func_clean_all (eo.c) [212] _eo_unref (eo_private.h) [67] eo2_base_class_get + [10] _dich_func_get (eo.c) [213] _eo_unref (eo_private.h) [4] eo2_call_resolve_internal + [163] _dich_func_set (eo.c) [214] _ev_cb_call (eo_base_class.c) [21] eo2_constructor + [167] _eo2_api_desc_get (eo.c) [215] _ev_cb_call (eo2_base_class.c) [20] eo2_destructor + [182] _eo2_class_funcs_set [170] _get (eo2_simple.c) [26] eo2_do_end + [161] _eo2_do_end (eo.c) [171] _get (eo_simple.c) [27] eo2_do_start + [183] _eo2_kls_itr_next (eo.c) [216] _get_available_entry (eo_ptr_indirection.x) [22] eo2_event_callback_call + [201] _eo_callback_remove_all (eo_base_class.c) [156] _inc (eo2_simple.c) [13] eo2_get + [202] _eo_callback_remove_all (eo2_base_class.c) [157] _inc (eo_simple.c) [5] eo2_inc + [203] _eo_callbacks_clear (eo_base_class.c) [217] _search_tables (eo_ptr_indirection.x) [14] eo2_set + [204] _eo_callbacks_clear (eo2_base_class.c) [172] _set (eo2_simple.c) [68] eo2_simple_class_get + [175] _eo_class_base_op_init (eo.c) [173] _set (eo_simple.c) [15] eo2_simple_constructor + [184] _eo_class_check_op_descs (eo.c) [218] _wref_destruct (eo_base_class.c) [18] eo_add_internal + [176] _eo_class_constructor (eo.c) [219] _wref_destruct (eo2_base_class.c) [36] eo_base_class_get + [169] _eo_class_id_get (eo.c) [30] check (eo2-bench.c) [40] eo_class_free (eo.c) + [168] _eo_class_list_remove_duplicates (eo.c) [1] do_batch_test (eo2-bench.c) [54] eo_class_funcs_set + [177] _eo_class_mro_add (eo.c) [31] eina_list_count (eina_inline_list.x) [41] eo_class_name_get + [178] _eo_class_mro_init (eo.c) [29] eina_list_data_get (eina_inline_list.x) [42] eo_class_new + [166] _eo_class_pointer_get (eo.c) [32] eina_list_last (eina_inline_list.x) [16] eo_del + [179] _eo_condtor_done [33] eina_list_next (eina_inline_list.x) [28] eo_do_internal + [180] _eo_condtor_reset (eo_private.h) [37] eina_list_prev (eina_inline_list.x) [24] eo_do_super_internal + [12] _eo_data_scope_get (eo.c) [55] eina_lock_free (eina_inline_lock_posix.x) [69] eo_init + [23] _eo_del_internal (eo_private.h) [56] eina_lock_free (eina_inline_lock_posix.x) [43] eo_parent_set + [7] _eo_dov_internal (eo.c) [57] eina_lock_free (eina_inline_lock_posix.x) [70] eo_shutdown + [185] _eo_free (eo_private.h) [58] eina_lock_free (eina_inline_lock_posix.x) [17] eo_unref + [205] _eo_free_ids_tables (eo_ptr_indirection.x) [59] eina_lock_free (eina_inline_lock_posix.x) [44] report (eo2-bench.c) + [206] _eo_generic_data_del_all (eo_base_class.c) [60] eina_lock_new (eina_inline_lock_posix.x) [3] run_batch (eo2-bench.c) + [207] _eo_generic_data_del_all (eo2_base_class.c) [61] eina_lock_new (eina_inline_lock_posix.x) [53] simple_class_get + [186] _eo_id_allocate (eo_ptr_indirection.x) [62] eina_lock_new (eina_inline_lock_posix.x) [6] <cycle 1> + [187] _eo_id_mem_alloc (eo_ptr_indirection.x) [63] eina_lock_new (eina_inline_lock_posix.x) [8] <cycle 2> + [188] _eo_id_mem_calloc (eo_ptr_indirection.x) [64] eina_lock_new (eina_inline_lock_posix.x) + [189] _eo_id_mem_free (eo_ptr_indirection.x) [38] eina_lock_release (eina_inline_lock_posix.x) diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 930b3a2048..740e29485e 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -95,18 +95,19 @@ _dich_func_get(const _Eo_Class *klass, Eo_Op op) } static inline void -_dich_func_set(_Eo_Class *klass, Eo_Op op, eo_op_func_type func) +_dich_func_set(_Eo *obj, Eo_Op op, eo_op_func_type func) { + _Eo_Class *klass = obj->klass_data; size_t idx1 = DICH_CHAIN1(op); Dich_Chain1 *chain1 = &klass->chain[idx1]; _dich_chain_alloc(chain1); - if (chain1->funcs[DICH_CHAIN_LAST(op)].src == klass) + if (chain1->funcs[DICH_CHAIN_LAST(op)].src == (Eo *) obj->obj_id) { ERR("Already set function for op 0x%x. Overriding with func %p", op,func); } chain1->funcs[DICH_CHAIN_LAST(op)].func = func; - chain1->funcs[DICH_CHAIN_LAST(op)].src = klass; + chain1->funcs[DICH_CHAIN_LAST(op)].src = (Eo *) obj->obj_id; } static inline void @@ -130,7 +131,13 @@ static inline _Eo_Class * _eo_class_pointer_get(const Eo_Class *klass_id) { #ifdef HAVE_EO_ID - return ID_CLASS_GET((Eo_Class_Id)klass_id); + EO_OBJ_POINTER_RETURN_VAL(klass_id, obj, NULL); + if (!obj->is_a_klass) + { + EERR("ref_obj (%p->%p) does not reference a class (%p).", klass_id, obj); + return NULL; + } + return obj->klass_data; #else return (_Eo_Class *)klass_id; #endif @@ -459,12 +466,13 @@ eo2_api_funcs_cmp(const void *p1, const void *p2) } EAPI void -_eo2_class_funcs_set(_Eo_Class *klass) +_eo2_class_funcs_set(_Eo *obj) { int op_id; const Eo2_Op_Description *api_desc; Eo2_Op_Description *op_desc; Eo2_Op_Description *op_descs; + _Eo_Class *klass = obj->klass_data; op_descs = klass->desc->ops.descs2; @@ -505,7 +513,7 @@ _eo2_class_funcs_set(_Eo_Class *klass) } DBG(" %4d %p %p %s", op_desc->op, op_desc->api_func, op_desc->func, op_desc->doc); - _dich_func_set(klass, op_desc->op, op_desc->func); + _dich_func_set(obj, op_desc->op, op_desc->func); } } @@ -726,23 +734,23 @@ _eo_class_mro_init(const Eo_Class_Description *desc, const _Eo_Class *parent, Ei } static void -_eo_class_constructor(_Eo_Class *klass) +_eo_class_constructor(_Eo *oj) { - if (klass->constructed) + if (obj->condtor_done) return; - klass->constructed = EINA_TRUE; + obj->condtor_done = EINA_TRUE; - _eo2_class_funcs_set(klass); + _eo2_class_funcs_set(obj); - if (klass->desc->class_constructor) - klass->desc->class_constructor(_eo_class_id_get(klass)); + if (obj->klass_data->desc->class_constructor) + klass->desc->class_constructor(obj); } static void eo_class_free(_Eo_Class *klass) { - if (klass->constructed) + if (klass->condtor_done) { if (klass->desc->class_destructor) klass->desc->class_destructor(_eo_class_id_get(klass)); @@ -760,20 +768,16 @@ _eo_class_isa_func(Eo *obj_id EINA_UNUSED, void *class_data EINA_UNUSED) /* Do nonthing. */ } -EAPI const Eo_Class * +EAPI const Eo * eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...) { + _Eo *obj; _Eo_Class *klass; va_list p_list; size_t extn_sz, mro_sz, mixins_sz; Eina_List *extn_list, *mro, *mixins; _Eo_Class *parent = _eo_class_pointer_get(parent_id); - if (parent && !EINA_MAGIC_CHECK(parent, EO_CLASS_EINA_MAGIC)) - { - EINA_MAGIC_FAIL(parent, EO_CLASS_EINA_MAGIC); - return NULL; - } EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc->name, NULL); @@ -892,8 +896,8 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...) DBG("Finished building Mixins list for class '%s'", desc->name); } - klass = calloc(1, _eo_class_sz + extn_sz + mro_sz + mixins_sz); - EINA_MAGIC_SET(klass, EO_CLASS_EINA_MAGIC); + obj = calloc(1, _eo_sz + _eo_class_sz + extn_sz + mro_sz + mixins_sz); + klass = obj->klass_data = (const Eo *) ((char *) obj + _eo_sz); klass->parent = parent; klass->desc = desc; klass->extensions = (const _Eo_Class **) ((char *) klass + _eo_class_sz); @@ -1004,27 +1008,17 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...) eina_lock_take(&_eo_class_creation_lock); - /* klass->class_id = _eo_id_allocate(klass); */ - klass->class_id = ++_eo_classes_last_id; - - { - /* FIXME: Handle errors. */ - size_t arrsize = _eo_classes_last_id * sizeof(*_eo_classes); - _Eo_Class **tmp; - tmp = realloc(_eo_classes, arrsize); - - /* If it's the first allocation, memset. */ - if (!_eo_classes) - memset(tmp, 0, arrsize); +#ifndef HAVE_EO_ID + EINA_MAGIC_SET(obj, EO_EINA_MAGIC); +#endif + Eo_Id obj_id = _eo_id_allocate(obj); + obj->obj_id = obj_id; - _eo_classes = tmp; - _eo_classes[klass->class_id - 1] = klass; - } eina_lock_release(&_eo_class_creation_lock); - _eo_class_constructor(klass); + _eo_class_constructor(obj); - return _eo_class_id_get(klass); + return (Eo *)obj_id; } EAPI Eina_Bool diff --git a/src/lib/eo/eo_private.h b/src/lib/eo/eo_private.h index d347bc0061..8442479d21 100644 --- a/src/lib/eo/eo_private.h +++ b/src/lib/eo/eo_private.h @@ -69,52 +69,12 @@ typedef uintptr_t Eo_Id; typedef struct _Eo_Class _Eo_Class; typedef struct _Eo_Internal _Eo; -/* Retrieves the pointer to the object from the id */ -static inline _Eo *_eo_obj_pointer_get(const Eo_Id obj_id); - -/* Allocates an entry for the given object */ -static inline Eo_Id _eo_id_allocate(const _Eo *obj); - -/* Releases an entry by the object id */ -static inline void _eo_id_release(const Eo_Id obj_id); - -/* Free all the entries and the tables */ -static inline void _eo_free_ids_tables(void); - -void _eo_condtor_done(Eo *obj); - -struct _Eo_Internal { -#ifndef HAVE_EO_ID - EINA_MAGIC -#endif - Eo *parent; - Eina_List *children; - const _Eo_Class *klass; -#ifdef EO_DEBUG - Eina_Inlist *xrefs; - Eina_Inlist *data_xrefs; -#endif - - Eina_List *composite_objects; - - Eo_Id obj_id; - - int refcount; - int datarefcount; - - Eina_Bool condtor_done:1; - - Eina_Bool composite:1; - Eina_Bool del:1; - Eina_Bool manual_free:1; -}; - typedef struct _Dich_Chain1 Dich_Chain1; typedef struct { eo_op_func_type func; - const _Eo_Class *src; + const Eo *src; } op_type_funcs; struct _Dich_Chain1 @@ -124,35 +84,75 @@ struct _Dich_Chain1 typedef struct { - const _Eo_Class *klass; + const Eo *klass; size_t offset; } Eo_Extension_Data_Offset; struct _Eo_Class { - EINA_MAGIC - Eo_Id class_id; - const _Eo_Class *parent; + const Eo *parent_klass; const Eo_Class_Description *desc; Dich_Chain1 *chain; /**< The size is chain size */ - const _Eo_Class **extensions; + const Eo **extensions; Eo_Extension_Data_Offset *extn_data_off; - const _Eo_Class **mro; + const Eo **mro; unsigned int obj_size; /**< size of an object of this class */ unsigned int chain_size; unsigned int base_id; unsigned int data_offset; /* < Offset of the data within object data. */ - Eina_Bool constructed : 1; - /* [extensions*] + NULL */ - /* [mro*] + NULL */ + /* [extensions_id] + NULL */ + /* [mro_id] + NULL */ /* [extensions data offset] + NULL */ }; +struct _Eo_Internal { +#ifndef HAVE_EO_ID + EINA_MAGIC +#endif + Eo_Id obj_id; + Eo *parent; + Eina_List *children; + const Eo *klass; +#ifdef EO_DEBUG + Eina_Inlist *xrefs; + Eina_Inlist *data_xrefs; +#endif + + Eina_List *composite_objects; + + int refcount; + int datarefcount; + + Eina_Bool condtor_done:1; + + Eina_Bool composite:1; + Eina_Bool del:1; + Eina_Bool manual_free:1; + Eina_Bool is_a_klass:1; + + _Eo_Class *klass_data; + /* struct _Eo_Class if is a klass */ +}; + +/* Retrieves the pointer to the object from the id */ +static inline _Eo *_eo_obj_pointer_get(const Eo_Id obj_id); + +/* Allocates an entry for the given object */ +static inline Eo_Id _eo_id_allocate(const _Eo *obj); + +/* Releases an entry by the object id */ +static inline void _eo_id_release(const Eo_Id obj_id); + +/* Free all the entries and the tables */ +static inline void _eo_free_ids_tables(void); + +void _eo_condtor_done(Eo *obj); + static inline void _eo_condtor_reset(_Eo *obj) { @@ -166,7 +166,8 @@ _eo_del_internal(const char *file, int line, _Eo *obj) /* We need that for the event callbacks that may ref/unref. */ obj->refcount++; - const _Eo_Class *klass = obj->klass; + // FIXME: eo2 + /* EO_CLASS_POINTER_RETURN(obj, klass); */ eo2_do((Eo *)obj->obj_id, eo2_event_callback_call(EO_EV_DEL, NULL);); @@ -180,14 +181,14 @@ _eo_del_internal(const char *file, int line, _Eo *obj) if (EINA_UNLIKELY(do_err)) { - ERR("in %s:%d: Object of class '%s' - One of the object destructors have failed.", - file, line, klass->desc->name); + ERR("in %s:%d: Object of class 's' - One of the object destructors have failed.", + file, line);//, klass->desc->name); } if (!obj->condtor_done) { - ERR("in %s:%d: Object of class '%s' - Not all of the object destructors have been executed.", - file, line, klass->desc->name); + ERR("in %s:%d: Object of class 's' - Not all of the object destructors have been executed.", + file, line);//, klass->desc->name); } /*FIXME: add eo_class_unref(klass) ? - just to clear the caches. */ diff --git a/src/lib/eo/eo_ptr_indirection.h b/src/lib/eo/eo_ptr_indirection.h index cb890e7ffa..9a275f2149 100644 --- a/src/lib/eo/eo_ptr_indirection.h +++ b/src/lib/eo/eo_ptr_indirection.h @@ -22,6 +22,24 @@ if (!obj) return; \ } while (0) +/* #define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \ */ +/* _Eo *klass; \ */ +/* do { \ */ +/* _Eo *obj = _eo_klass_pointer_get((Eo_Id)klass_id); \ */ +/* if (!obj) return ret; \ */ +/* if (!obj->is_a_klass) { ERR("%p is not a class") return ret; }\ */ +/* klass = obj->klass_data; \ */ +/* } while (0) */ + +/* #define EO_CLASS_POINTER_RETURN(klass_id, klass) \ */ +/* _Eo *klass; \ */ +/* do { \ */ +/* _Eo *obj = _eo_klass_pointer_get((Eo_Id)klass_id); \ */ +/* if (!obj) return; \ */ +/* if (!obj->is_a_klass) { ERR("%p is not a class") return; }\ */ +/* klass = obj->klass_data; \ */ +/* } while (0) */ + #else #define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \ @@ -38,6 +56,24 @@ EO_MAGIC_RETURN(obj, EO_EINA_MAGIC); \ } while (0) +/* #define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \ */ +/* _Eo *klass; \ */ +/* do { \ */ +/* _Eo *obj = _eo_obj_pointer_get((Eo_Id)obj_id); \ */ +/* EO_MAGIC_RETURN_VAL(obj, EO_EINA_MAGIC, ret); \ */ +/* if (!obj->is_a_klass) { ERR("%p is not a class") return ret; }\ */ +/* klass = obj->klass_data; \ */ +/* } while (0) */ + +/* #define EO_CLASS_POINTER_RETURN(klass_id, klass) \ */ +/* _Eo *klass; \ */ +/* do { \ */ +/* _Eo *obj = _eo_obj_pointer_get((Eo_Id)obj_id); \ */ +/* EO_MAGIC_RETURN(obj, EO_EINA_MAGIC); \ */ +/* if (!obj->is_a_klass) { ERR("%p is not a class") return; }\ */ +/* klass = obj->klass_data; \ */ +/* } while (0) */ + #endif #ifdef EFL_DEBUG |