summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2013-09-06 00:28:29 +0200
committerJérémy Zurcher <jeremy@asynk.ch>2013-09-06 00:28:29 +0200
commite600f5ae94eff3d54c009a57659baf2250330d82 (patch)
tree2da38d93eb87abe3ddb95d2f01eee7426a82267a
parentd981910222970eb2b70b79853690abc818b92060 (diff)
downloadefl-devs/jeyzu/eo2_only.tar.gz
wip-worktree-statedevs/jeyzu/eo2_only
-rw-r--r--eo2test/eo2_composite.c54
-rw-r--r--eo2test/eo2_composite.h9
-rw-r--r--eo2test/now26
-rw-r--r--eo2test/prof1004
-rw-r--r--src/lib/eo/eo.c70
-rw-r--r--src/lib/eo/eo_private.h111
-rw-r--r--src/lib/eo/eo_ptr_indirection.h36
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