jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=999dbd9764426890c0e11841358f9219082b89b2

commit 999dbd9764426890c0e11841358f9219082b89b2
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Fri Jul 21 15:24:08 2017 +0900

    eo debug name: Use strbuf instead of slstr
    
    This should be a little bit more efficient, even if more "risky"
    in terms of leaks. The final API still looks exactly the same.
---
 src/lib/edje/edje_object.eo              |  2 +-
 src/lib/edje/edje_smart.c                | 15 +++++++--------
 src/lib/elementary/efl_ui_win.c          | 11 +++++------
 src/lib/elementary/efl_ui_win.eo         |  2 +-
 src/lib/elementary/elm_widget.c          | 11 ++++++-----
 src/lib/elementary/elm_widget.eo         |  2 +-
 src/lib/eo/efl_object.eo                 | 21 +++++++++++++++-----
 src/lib/eo/eina_types.eot                |  1 +
 src/lib/eo/eo.c                          | 33 ++++++++++++++++----------------
 src/lib/eo/eo_base_class.c               |  6 +++---
 src/lib/evas/canvas/efl_canvas_group.eo  |  2 +-
 src/lib/evas/canvas/efl_canvas_object.eo |  2 +-
 src/lib/evas/canvas/evas_main.c          |  8 ++++----
 src/lib/evas/canvas/evas_name.c          | 16 ++++++++--------
 src/lib/evas/canvas/evas_object_smart.c  | 11 +++++------
 15 files changed, 76 insertions(+), 67 deletions(-)

diff --git a/src/lib/edje/edje_object.eo b/src/lib/edje/edje_object.eo
index c294d43f66..be6d2e2a00 100644
--- a/src/lib/edje/edje_object.eo
+++ b/src/lib/edje/edje_object.eo
@@ -1176,7 +1176,7 @@ class Edje.Object (Efl.Canvas.Group.Clipped, Efl.File, 
Efl.Container, Efl.Part,
       Efl.Gfx.size { set; }
       Efl.Object.constructor;
       Efl.Object.destructor;
-      Efl.Object.debug_name_override { get; }
+      Efl.Object.debug_name_override;
       Efl.Canvas.Object.no_render { set; }
       Efl.Canvas.Object.paragraph_direction { set; }
       Efl.Canvas.Group.group_calculate;
diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c
index 4f105ff595..070efff883 100644
--- a/src/lib/edje/edje_smart.c
+++ b/src/lib/edje/edje_smart.c
@@ -60,15 +60,14 @@ _edje_object_efl_object_destructor(Eo *obj, Edje 
*class_data)
    efl_data_unref(obj, class_data->base);
 }
 
-EOLIAN static const char *
-_edje_object_efl_object_debug_name_override_get(Eo *obj, Edje *ed)
+EOLIAN static Eina_Strbuf *
+_edje_object_efl_object_debug_name_override(Eo *obj, Edje *ed, Eina_Strbuf *sb)
 {
-   const char *base;
-
-   base = efl_debug_name_get(efl_super(obj, MY_CLASS));
-   return eina_slstr_printf("%s:file='%s':group='%s'", base,
-                            ed->file ? eina_file_filename_get(ed->file->f) : 
NULL,
-                            ed->group);
+   sb = efl_debug_name_override(efl_super(obj, MY_CLASS), sb);
+   eina_strbuf_append_printf(sb, ":file='%s':group='%s'",
+                             ed->file ? eina_file_filename_get(ed->file->f) : 
NULL,
+                             ed->group);
+   return sb;
 }
 
 EOLIAN static void
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 7456cb87d4..e9ecc3c145 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -6608,13 +6608,12 @@ _efl_ui_win_class_constructor(Efl_Class *klass)
      }
 }
 
-EOLIAN static const char *
-_efl_ui_win_efl_object_debug_name_override_get(Eo *obj, Efl_Ui_Win_Data *pd)
+EOLIAN static Eina_Strbuf *
+_efl_ui_win_efl_object_debug_name_override(Eo *obj, Efl_Ui_Win_Data *pd, 
Eina_Strbuf *sb)
 {
-   const char *base;
-
-   base = efl_debug_name_get(efl_super(obj, MY_CLASS));
-   return eina_slstr_printf("%s:'%s':'%s'", base, pd->name, pd->title);
+   sb = efl_debug_name_override(efl_super(obj, MY_CLASS), sb);
+   eina_strbuf_append_printf(sb, ":'%s':'%s'", pd->name, pd->title);
+   return sb;
 }
 
 EOLIAN static Eo*
diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo
index 21b8d86c5a..91863a848d 100644
--- a/src/lib/elementary/efl_ui_win.eo
+++ b/src/lib/elementary/efl_ui_win.eo
@@ -930,7 +930,7 @@ class Efl.Ui.Win (Elm.Widget, Efl.Canvas, 
Elm.Interface.Atspi.Window,
       Efl.Object.constructor;
       Efl.Object.destructor;
       Efl.Object.finalize;
-      Efl.Object.debug_name_override { get; }
+      Efl.Object.debug_name_override;
       Efl.Gfx.visible { set; }
       Efl.Gfx.position { set; }
       Efl.Gfx.size { set; }
diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c
index 7e5380de9c..0c84c5792d 100644
--- a/src/lib/elementary/elm_widget.c
+++ b/src/lib/elementary/elm_widget.c
@@ -6234,14 +6234,15 @@ _elm_widget_efl_object_destructor(Eo *obj, 
Elm_Widget_Smart_Data *sd)
    sd->on_destroy = EINA_FALSE;
 }
 
-EOLIAN static const char *
-_elm_widget_efl_object_debug_name_override_get(Eo *obj, Elm_Widget_Smart_Data 
*sd EINA_UNUSED)
+EOLIAN static Eina_Strbuf *
+_elm_widget_efl_object_debug_name_override(Eo *obj, Elm_Widget_Smart_Data *sd 
EINA_UNUSED, Eina_Strbuf *sb)
 {
-   const char *base, *focus = "";
+   const char *focus = "";
 
    if (elm_obj_widget_focus_get(obj)) focus = ":focused";
-   base = efl_debug_name_get(efl_super(obj, MY_CLASS));
-   return eina_slstr_printf("%s%s", base, focus);
+   sb = efl_debug_name_override(efl_super(obj, MY_CLASS), sb);
+   eina_strbuf_append_printf(sb, "%s", focus);
+   return sb;
 }
 
 EOLIAN static Eina_Bool
diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo
index 9dfda78bc5..78b77cf605 100644
--- a/src/lib/elementary/elm_widget.eo
+++ b/src/lib/elementary/elm_widget.eo
@@ -787,7 +787,7 @@ abstract Elm.Widget (Efl.Canvas.Group, 
Elm.Interface.Atspi_Accessible,
       Efl.Object.finalize;
       Efl.Object.destructor;
       Efl.Object.provider_find;
-      Efl.Object.debug_name_override { get; }
+      Efl.Object.debug_name_override;
       Efl.Gfx.color { set; }
       Efl.Gfx.visible { set; }
       Efl.Gfx.position { set; }
diff --git a/src/lib/eo/efl_object.eo b/src/lib/eo/efl_object.eo
index 31861a61c9..f31606f293 100644
--- a/src/lib/eo/efl_object.eo
+++ b/src/lib/eo/efl_object.eo
@@ -81,15 +81,26 @@ abstract Efl.Object ()
            comment: string @nullable; [[The comment]]
          }
       }
-      @property debug_name_override {
-         [[ A read-only name for this object used for debugging.
+      debug_name_override {
+         [[ Build a read-only name for this object used for debugging.
+
+            Multiple calls using efl_super() can be chained in order to build
+            the entire debug name, from parent to child classes. In C the usual
+            way to build the string is as follows:
+
+            sb = efl_debug_name_override(efl_super(obj, MY_CLASS), sb);
+            eina_strbuf_append_printf(sb, "new_information");
+            return sb;
+
+            The receiving function should always either free the strbuf or
+            returning it back to the caller, as ownership is transferred.
 
             @since 1.21
          ]]
-         get {}
-         values {
-            name: string; [[A name including class name and object name.]]
+         params {
+            @in sb: own(ptr(Eina.Strbuf)); [[A string buffer, must not be 
$null.]]
          }
+         return: own(ptr(Eina.Strbuf)); [[Should not be $null, may be $sb.]]
       }
       @property event_global_freeze_count @class {
          get {
diff --git a/src/lib/eo/eina_types.eot b/src/lib/eo/eina_types.eot
index dce0e65884..40fbbf2df8 100644
--- a/src/lib/eo/eina_types.eot
+++ b/src/lib/eo/eina_types.eot
@@ -47,6 +47,7 @@ enum @extern Eina.Xattr.Flags {
 type @extern Eina.Error: int; [[Eina error type]]
 
 struct @extern @free(eina_binbuf_free) Eina.Binbuf; [[Eina binbuf data 
structure]]
+struct @extern @free(eina_strbuf_free) Eina.Strbuf; [[Eina strbuf data 
structure]]
 
 struct @extern Eina.Slice {
     [[A linear, read-only, memory segment]]
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c
index 72db1dd0a9..a567a00d44 100644
--- a/src/lib/eo/eo.c
+++ b/src/lib/eo/eo.c
@@ -2480,7 +2480,8 @@ EAPI const char *
 efl_debug_name_get(const Eo *obj_id)
 {
    const char *override = "";
-   const char *name, *clsname, *ret;
+   const char *name, *clsname;
+   Eina_Strbuf *sb;
 
    if (!obj_id) return "(null)";
 
@@ -2507,34 +2508,32 @@ efl_debug_name_get(const Eo *obj_id)
    EO_OBJ_POINTER(obj_id, obj);
    if (!obj) return eina_slstr_printf("Invalid_Object_ID@%p", obj_id);
 
+   sb = eina_strbuf_new();
+   name = efl_name_get(obj_id);
+   clsname = obj->klass->desc->name;
+   if (_obj_is_override(obj)) override = "(override)";
+
+   if (name)
+     eina_strbuf_append_printf(sb, "%s%s@%p[%d]:'%s'", clsname, override, 
obj_id, (int) obj->refcount, name);
+   else
+     eina_strbuf_append_printf(sb, "%s%s@%p[%d]", clsname, override, obj_id, 
(int) obj->refcount);
+
    if (!obj->cur_klass)
      {
-        ret = efl_debug_name_override_get(obj_id);
-        if (ret) goto end;
+        sb = efl_debug_name_override((Eo *) obj_id, sb);
      }
    else
      {
         if (obj->super)
-          ret = efl_debug_name_override_get(efl_super(obj_id, (Efl_Class *) 
obj->cur_klass->header.id));
+          sb = efl_debug_name_override(efl_super(obj_id, (Efl_Class *) 
obj->cur_klass->header.id), sb);
         else
-          ret = efl_debug_name_override_get(efl_cast(obj_id, (Efl_Class *) 
obj->cur_klass->header.id));
+          sb = efl_debug_name_override(efl_cast(obj_id, (Efl_Class *) 
obj->cur_klass->header.id), sb);
         obj->super = EINA_FALSE;
         obj->cur_klass = NULL;
-        if (ret) goto end;
      }
 
-   name = efl_name_get(obj_id);
-   clsname = obj->klass->desc->name;
-   if (_obj_is_override(obj)) override = "(override)";
-
-   if (name)
-     ret = eina_slstr_printf("%s%s@%p[%d]:'%s'", clsname, override, obj_id, 
(int) obj->refcount, name);
-   else
-     ret = eina_slstr_printf("%s%s@%p[%d]", clsname, override, obj_id, (int) 
obj->refcount);
-
-end:
    EO_OBJ_DONE(obj_id);
-   return ret;
+   return eina_slstr_strbuf_new(sb);
 }
 
 EAPI int
diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c
index ceea2261bb..5b3801abb2 100644
--- a/src/lib/eo/eo_base_class.c
+++ b/src/lib/eo/eo_base_class.c
@@ -572,10 +572,10 @@ _efl_object_comment_get(Eo *obj EINA_UNUSED, 
Efl_Object_Data *pd)
    return pd->ext->comment;
 }
 
-EOLIAN static const char *
-_efl_object_debug_name_override_get(Eo *obj_id EINA_UNUSED, Efl_Object_Data 
*pd EINA_UNUSED)
+EOLIAN static Eina_Strbuf *
+_efl_object_debug_name_override(Eo *obj_id EINA_UNUSED, Efl_Object_Data *pd 
EINA_UNUSED, Eina_Strbuf *sb)
 {
-   return NULL;
+   return sb;
 }
 
 EOLIAN static void
diff --git a/src/lib/evas/canvas/efl_canvas_group.eo 
b/src/lib/evas/canvas/efl_canvas_group.eo
index 3235dadd97..cad0ff5bc3 100644
--- a/src/lib/evas/canvas/efl_canvas_group.eo
+++ b/src/lib/evas/canvas/efl_canvas_group.eo
@@ -102,7 +102,7 @@ class Efl.Canvas.Group (Efl.Canvas.Object)
       class.destructor;
       Efl.Object.constructor;
       Efl.Object.destructor;
-      Efl.Object.debug_name_override { get; }
+      Efl.Object.debug_name_override;
       Efl.Canvas.Object.no_render { set; }
       Efl.Canvas.Object.paragraph_direction { get; set; }
    }
diff --git a/src/lib/evas/canvas/efl_canvas_object.eo 
b/src/lib/evas/canvas/efl_canvas_object.eo
index bf06f31f8c..cf92e6f2c7 100644
--- a/src/lib/evas/canvas/efl_canvas_object.eo
+++ b/src/lib/evas/canvas/efl_canvas_object.eo
@@ -662,7 +662,7 @@ abstract Efl.Canvas.Object (Efl.Object, Efl.Gfx, 
Efl.Gfx.Stack, Efl.Animator,
       Efl.Object.destructor;
       Efl.Object.finalize;
       Efl.Object.provider_find;
-      Efl.Object.debug_name_override { get; }
+      Efl.Object.debug_name_override;
       Efl.Gfx.visible { get; set; }
       Efl.Gfx.color { get; set; }
       Efl.Gfx.color_part { get; set; }
diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c
index 000f52e08b..114e12fdd5 100644
--- a/src/lib/evas/canvas/evas_main.c
+++ b/src/lib/evas/canvas/evas_main.c
@@ -330,8 +330,8 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, 
Evas_Public_Data *e)
 
         EINA_LIST_FREE(unrefs, eo_obj)
           {
-             ERR("Killing Zombie Object [%s@%p]. Refs: %i:%i",
-                 efl_class_name_get(eo_obj), eo_obj, efl_ref_get(eo_obj), 
___efl_ref2_get(eo_obj));
+             ERR("Killing Zombie Object [%s]. Refs: %i:%i",
+                 efl_debug_name_get(eo_obj), efl_ref_get(eo_obj), 
___efl_ref2_get(eo_obj));
              ___efl_ref2_reset(eo_obj);
              while (efl_ref_get(eo_obj) > 1) efl_unref(eo_obj);
              while (efl_ref_get(eo_obj) < 1) efl_ref(eo_obj);
@@ -343,12 +343,12 @@ _evas_canvas_efl_object_destructor(Eo *eo_e, 
Evas_Public_Data *e)
                EINA_INLIST_FOREACH(lay->objects, o)
                  if (o && (o->object == eo_obj))
                    {
-                      ERR("Zombie Object [%s@%p] could not be removed "
+                      ERR("Zombie Object [%s] could not be removed "
                           "from the list of objects. Maybe this object "
                           "was deleted but the call to efl_destructor() "
                           "was not propagated to all the parent classes? "
                           "Forcibly removing it. This may leak! Refs: %i:%i",
-                          efl_class_name_get(eo_obj), eo_obj, 
efl_ref_get(eo_obj), ___efl_ref2_get(eo_obj));
+                          efl_debug_name_get(eo_obj), efl_ref_get(eo_obj), 
___efl_ref2_get(eo_obj));
                       lay->objects = (Evas_Object_Protected_Data *)
                             eina_inlist_remove(EINA_INLIST_GET(lay->objects), 
EINA_INLIST_GET(o));
                       goto next_zombie;
diff --git a/src/lib/evas/canvas/evas_name.c b/src/lib/evas/canvas/evas_name.c
index a048bff0f5..8f26e5c2c5 100644
--- a/src/lib/evas/canvas/evas_name.c
+++ b/src/lib/evas/canvas/evas_name.c
@@ -67,22 +67,22 @@ evas_object_name_child_find(const Evas_Object *eo_obj, 
const char *name, int rec
 }
 
 /* new in EO */
-EOLIAN const char *
-_efl_canvas_object_efl_object_debug_name_override_get(Eo *eo_obj, 
Evas_Object_Protected_Data *obj)
+EOLIAN Eina_Strbuf *
+_efl_canvas_object_efl_object_debug_name_override(Eo *eo_obj, 
Evas_Object_Protected_Data *obj, Eina_Strbuf *sb)
 {
    const char *norend = obj->no_render ? ":no_render" : "";
    const char *clip = obj->clip.clipees ? ":clipper" : "";
-   const char *base;
 
-   base = efl_debug_name_get(efl_super(eo_obj, EFL_CANVAS_OBJECT_CLASS));
+   sb = efl_debug_name_override(efl_super(eo_obj, EFL_CANVAS_OBJECT_CLASS), 
sb);
    if (obj->cur->visible)
      {
-        return eina_slstr_printf("%s%s%s:(%d,%d %dx%d)", base, norend, clip,
-                                 obj->cur->geometry.x, obj->cur->geometry.y,
-                                 obj->cur->geometry.w, obj->cur->geometry.h);
+        eina_strbuf_append_printf(sb, "%s%s:(%d,%d %dx%d)", norend, clip,
+                                  obj->cur->geometry.x, obj->cur->geometry.y,
+                                  obj->cur->geometry.w, obj->cur->geometry.h);
      }
    else
      {
-        return eina_slstr_printf("%s:hidden%s%s", base, norend, clip);
+        eina_strbuf_append_printf(sb, ":hidden%s%s", norend, clip);
      }
+   return sb;
 }
diff --git a/src/lib/evas/canvas/evas_object_smart.c 
b/src/lib/evas/canvas/evas_object_smart.c
index 9a6e725e3b..55dc84d497 100644
--- a/src/lib/evas/canvas/evas_object_smart.c
+++ b/src/lib/evas/canvas/evas_object_smart.c
@@ -647,13 +647,12 @@ _efl_canvas_group_efl_object_destructor(Eo *eo_obj, 
Evas_Smart_Data *o)
      }
 }
 
-EOLIAN static const char *
-_efl_canvas_group_efl_object_debug_name_override_get(Eo *eo_obj, 
Evas_Smart_Data *o)
+EOLIAN static Eina_Strbuf *
+_efl_canvas_group_efl_object_debug_name_override(Eo *eo_obj, Evas_Smart_Data 
*o, Eina_Strbuf *sb)
 {
-   const char *base;
-
-   base = efl_debug_name_get(efl_super(eo_obj, MY_CLASS));
-   return eina_slstr_printf("%s:children=%d", base, 
eina_inlist_count(o->contained));
+   sb = efl_debug_name_override(efl_super(eo_obj, MY_CLASS), sb);
+   eina_strbuf_append_printf(sb, ":children=%d", 
eina_inlist_count(o->contained));
+   return sb;
 }
 
 static inline void

-- 


Reply via email to