evas render: Gurantee the cache validation of source objects. 19/167019/2
authorjiin.moon <jiin.moon@samsung.com>
Mon, 15 Jan 2018 05:19:21 +0000 (14:19 +0900)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Mon, 5 Feb 2018 05:13:20 +0000 (05:13 +0000)
  This workaround code forcely make few object's state is up to date.
  In a rare case, some source objects won't be updated properly.
  It seems a rendering context bug or a side effect by a potential context corruption of the smart ob~

  commit from e640383904295e6a1665d7c1ef8a44d2c7a1b223

Change-Id: I0a82a41d1331c98491fb35e9ceb3239bf39f546d

src/lib/evas/canvas/evas_render.c

index c33c162..52d6890 100644 (file)
@@ -2305,6 +2305,26 @@ end:
    return clean_them;
 }
 
+/* TIZEN ONLY(2016/12/09): Gurantee the cache data of proxy source object validation.
+   Don't know in detail but in a rare case, it happens that few object's state is
+   not up to date... */
+static void
+evas_render_gurantee_recalc(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
+{
+   if (obj->cur->clipper) evas_object_clip_recalc(obj);
+   evas_object_change(eo_obj, obj);
+
+   if (obj->is_smart)
+     {
+        Evas_Object_Protected_Data *obj2;
+
+        EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), obj2)
+          {
+             evas_render_gurantee_recalc(obj2->object, obj2);
+          }
+     }
+}
+
 /*
  * Render the source object when a proxy is set.
  * Used to force a draw if necessary, else just makes sure it's available.
@@ -2330,6 +2350,10 @@ evas_render_proxy_subrender(Evas *eo_e, void *output, Evas_Object *eo_source, Ev
    eina_evlog("+proxy_subrender", eo_proxy, 0.0, NULL);
    source = efl_data_scope_get(eo_source, EFL_CANVAS_OBJECT_CLASS);
 
+   // FIXME: This is wrong. Object cache should simply not be trusted for
+   // proxy subrender. Forcing recalc will not fix anything.
+   evas_render_gurantee_recalc(source->object, source);
+
    w = source->cur->geometry.w;
    h = source->cur->geometry.h;