edje: Avoid string duplication when possible.
authorWoochanlee <wc0917.lee@samsung.com>
Thu, 16 Jul 2020 10:37:10 +0000 (11:37 +0100)
committerJongmin Lee <jm105.lee@samsung.com>
Thu, 16 Jul 2020 22:24:00 +0000 (07:24 +0900)
Summary:
Most use case the part name dosen't contain the recursive name
so we don't have to go through expensive eina_string_split operation.

Test Plan:
edje-suite (34/37 edje-suite                              OK       0.67 s)
elementary-test
app launching on enlightenment

Reviewers: raster, smohanty, Hermet

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12055

src/lib/edje/edje_util.c

index c1bbaf6..d9961d6 100644 (file)
@@ -5838,17 +5838,23 @@ _edje_real_part_text_text_source_description_get(Edje_Real_Part *ep, Edje_Real_P
 Edje_Real_Part *
 _edje_real_part_recursive_get(Edje **ed, const char *part)
 {
-   Edje_Real_Part *rp;
-   char **path;
+   if (strchr(part, EDJE_PART_PATH_SEPARATOR))
+     {
+        Edje_Real_Part *rp;
+        char **path;
 
-   path = eina_str_split(part, EDJE_PART_PATH_SEPARATOR_STRING, 0);
-   if (!path) return NULL;
+        path = eina_str_split(part, EDJE_PART_PATH_SEPARATOR_STRING, 0);
+        if (!path) return NULL;
 
-   rp = _edje_real_part_recursive_get_helper(ed, path);
+        rp = _edje_real_part_recursive_get_helper(ed, path);
+
+        free(*path);
+        free(path);
+
+        return rp;
+     }
 
-   free(*path);
-   free(path);
-   return rp;
+   return _edje_real_part_get(*ed, part);
 }
 
 Evas_Object *