summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Hacohen <tom@stosb.com>2015-10-12 16:12:36 +0100
committerTom Hacohen <tom@stosb.com>2015-10-19 10:20:53 +0100
commite837a5e4ffa0b9a3fd4a8fd16452374dbd310476 (patch)
tree1ee7b186ee687273efce3d772941f6b54965ea2c
parent2eaf33d9cf05662d504166aad1bdcd9d9ccf5491 (diff)
downloadefl-e837a5e4ffa0b9a3fd4a8fd16452374dbd310476.tar.gz
Eo: Optimise object data fetching (minor).
Pre-calculate object data offset for improved performance.
-rw-r--r--src/lib/eo/eo.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index 34713f32c9..f8ea428356 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -1305,6 +1305,11 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...)
klass->data_offset = klass->parent->data_offset +
EO_ALIGN_SIZE(klass->parent->desc->data_size);
}
+ else
+ {
+ /* Data starts after the object size. */
+ klass->data_offset = _eo_sz;
+ }
mro = eina_list_remove(mro, NULL);
mro = eina_list_prepend(mro, klass);
@@ -1359,7 +1364,7 @@ eo_class_new(const Eo_Class_Description *desc, const Eo_Class *parent_id, ...)
extn_data_itr->offset = 0;
}
- klass->obj_size = _eo_sz + extn_data_off;
+ klass->obj_size = extn_data_off;
if (getenv("EO_DEBUG"))
{
fprintf(stderr, "Eo class '%s' will take %u bytes per object.\n",
@@ -1557,7 +1562,7 @@ static inline void *
_eo_data_scope_get(const _Eo_Object *obj, const _Eo_Class *klass)
{
if (EINA_LIKELY((klass->desc->data_size > 0) && (klass->desc->type != EO_CLASS_TYPE_MIXIN)))
- return ((char *) obj) + _eo_sz + klass->data_offset;
+ return ((char *) obj) + klass->data_offset;
if (EINA_UNLIKELY(klass->desc->data_size == 0))
{
@@ -1573,7 +1578,7 @@ _eo_data_scope_get(const _Eo_Object *obj, const _Eo_Class *klass)
while (doff_itr->klass)
{
if (doff_itr->klass == klass)
- return ((char *) obj) + _eo_sz + doff_itr->offset;
+ return ((char *) obj) + doff_itr->offset;
doff_itr++;
}
}