From: Changyeon Lee Date: Mon, 2 Dec 2024 02:22:21 +0000 (+0900) Subject: e_comp: Delay rendering and displaying until first evas object is shown X-Git-Tag: accepted/tizen/9.0/unified/20241229.042743~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F45%2F317145%2F1;p=platform%2Fupstream%2Fenlightenment.git e_comp: Delay rendering and displaying until first evas object is shown if canvas_render_delay_after_boot is set, rendering and displaying are delayed until first evas object is shown. Change-Id: I34321def1edb2782c35e94e9935531baf449b6b3 --- diff --git a/src/bin/compmgr/e_comp.c b/src/bin/compmgr/e_comp.c index 8a4d2ab437..a5109dfc30 100644 --- a/src/bin/compmgr/e_comp.c +++ b/src/bin/compmgr/e_comp.c @@ -269,6 +269,23 @@ _e_comp_screensaver_off(void *data EINA_UNUSED, int type EINA_UNUSED, void *even ////////////////////////////////////////////////////////////////////////// +EINTERN void +e_comp_canvas_render_delayed_unset(E_Comp *comp) +{ + E_Comp_Config *comp_conf; + + EINA_SAFETY_ON_NULL_RETURN(comp); + + comp_conf = e_comp_config_get(); + if (!comp_conf) return; + if (!comp_conf->canvas_render_delay_after_boot) return; + if (!comp->canvas_render_delayed) return; + + ELOGF("COMP", "Begin canvas update for the first time after boot", NULL); + + comp->canvas_render_delayed = EINA_FALSE; +} + EINTERN Eina_Bool e_comp_init(void) { diff --git a/src/bin/compmgr/e_comp_intern.h b/src/bin/compmgr/e_comp_intern.h index e129876fa1..31e6c8aab1 100644 --- a/src/bin/compmgr/e_comp_intern.h +++ b/src/bin/compmgr/e_comp_intern.h @@ -65,4 +65,6 @@ EINTERN E_Client *e_comp_launchscrn_ec_find_by_pid(pid_t pid); EINTERN void e_comp_launchscrn_ec_remove(E_Client *ec); EINTERN void e_comp_launchscrn_ec_add(E_Client *ec); +EINTERN void e_comp_canvas_render_delayed_unset(E_Comp *comp); + #endif diff --git a/src/bin/compmgr/e_comp_object.c b/src/bin/compmgr/e_comp_object.c index 22ea3ad726..d65c5878c2 100644 --- a/src/bin/compmgr/e_comp_object.c +++ b/src/bin/compmgr/e_comp_object.c @@ -2010,6 +2010,8 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw, E_Comp *comp) ELOGF("COMP", "show_helper. evas_object_show!!!", ec); evas_object_show(cw->smart_obj); + e_comp_canvas_render_delayed_unset(e_comp_get()); + if (!ec->iconic) e_client_focus_defer_set(ec); @@ -2111,6 +2113,8 @@ _e_comp_intercept_show_helper(E_Comp_Object *cw, E_Comp *comp) ELOGF("COMP", "show_helper. evas_object_show!!!", ec); evas_object_show(cw->smart_obj); + e_comp_canvas_render_delayed_unset(e_comp_get()); + /* if comp object is shown in idle enterer before(E_CLIENT_HOOK_EVAL_FETCH), it is rendered in idle callback without native surface and compositor shows an empty frame if other objects aren't shown diff --git a/src/bin/server/e_compositor.c b/src/bin/server/e_compositor.c index cf6b700454..3ce250d3e9 100644 --- a/src/bin/server/e_compositor.c +++ b/src/bin/server/e_compositor.c @@ -1356,7 +1356,6 @@ static void _e_surface_commit_pre(E_Surface *surface) { E_Client *ec = surface->ec; - E_Comp_Config *comp_conf = NULL; if (!surface->base.first_commit) surface->base.first_commit = EINA_TRUE; @@ -1365,19 +1364,7 @@ _e_surface_commit_pre(E_Surface *surface) { if (surface->base.shell.surface && surface->base.pending.new_attach && !ec->internal && !e_comp_wl_subsurface_check(ec) && !ec->remote_surface.provider) - { - E_Comp *comp; - ELOGF("COMP", "Current unmapped. COMMIT. pixmap_usable:%d", ec, e_pixmap_usable_get(ec->pixmap)); - - // no canvas update before client's commit request, begin rendering after 1st commit - comp_conf = e_comp_config_get(); - comp = e_comp_get(); - if (comp_conf && comp_conf->canvas_render_delay_after_boot && comp->canvas_render_delayed) - { - ELOGF("COMP", "Begin canvas update for the first time after boot", ec); - comp->canvas_render_delayed = EINA_FALSE; - } - } + ELOGF("COMP", "Current unmapped. COMMIT. pixmap_usable:%d", ec, e_pixmap_usable_get(ec->pixmap)); } e_comp_wl_hook_call(E_COMP_WL_HOOK_CLIENT_BEFORE_SURFACE_COMMIT, ec);