A render function(ecore_evas) belongs to one output(hwc).
The norender function on the e_comp_canvas only works on
the primary output.
Change-Id: I69365f91f081446203b463ea00395351c4579c54
E_API void
e_comp_canvas_norender_push(void)
{
- e_comp->norender++;
+ E_Comp_Screen *e_comp_screen;
+ E_Output *primary_output;
+
+ e_comp_screen = e_comp->e_comp_screen;
+ primary_output = e_comp_screen_primary_output_get(e_comp_screen);
- // e_plane_render is not working when e_comp->hwc is not initialized
- if ((!e_comp->hwc) &&
- (e_comp->norender == 1))
- ecore_evas_manual_render_set(e_comp->ee, EINA_TRUE);
+ e_output_norender_push(primary_output);
+ e_comp->norender++;
}
E_API void
e_comp_canvas_norender_pop(void)
{
- if (e_comp->norender <= 0)
- return;
+ E_Comp_Screen *e_comp_screen;
+ E_Output *primary_output;
- e_comp->norender--;
+ if (e_comp->norender <= 0) return;
- // e_plane_render is not working when e_comp->hwc is not initialized
- if ((!e_comp->hwc) &&
- (e_comp->norender == 0))
- ecore_evas_manual_render_set(e_comp->ee, EINA_FALSE);
+ e_comp_screen = e_comp->e_comp_screen;
+ primary_output = e_comp_screen_primary_output_get(e_comp_screen);
+
+ e_output_norender_pop(primary_output);
+ e_comp->norender--;
}
EINTERN int
e_comp_canvas_norender_get(void)
{
- return e_comp->norender;
+ E_Comp_Screen *e_comp_screen;
+ E_Output *primary_output;
+
+ e_comp_screen = e_comp->e_comp_screen;
+ primary_output = e_comp_screen_primary_output_get(e_comp_screen);
+
+ return e_output_norender_get(primary_output);
}
EINTERN void e_comp_canvas_keys_ungrab(void);
EINTERN void e_comp_canvas_feed_mouse_up(unsigned int activate_time);
-E_API void e_comp_canvas_norender_push(void);
-E_API void e_comp_canvas_norender_pop(void);
+E_API void e_comp_canvas_norender_push(void);
+E_API void e_comp_canvas_norender_pop(void);
EINTERN int e_comp_canvas_norender_get(void);
/* the following functions are used for adjusting root window coordinates
return hwc->target_buffer_queue;
}
+EINTERN void
+e_hwc_norender_push(E_Hwc *hwc)
+{
+ EINA_SAFETY_ON_FALSE_RETURN(hwc);
+
+ hwc->norender++;
+}
+
+EINTERN void
+e_hwc_norender_pop(E_Hwc *hwc)
+{
+ EINA_SAFETY_ON_FALSE_RETURN(hwc);
+
+ if (hwc->norender <= 0) return;
+
+ hwc->norender--;
+}
+
+EINTERN int
+e_hwc_norender_get(E_Hwc *hwc)
+{
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(hwc, 0);
+
+ return hwc->norender;
+}
+
static const char *
_e_hwc_prop_name_get_by_id(E_Hwc *hwc, unsigned int id)
{
Eina_List *mirror_dst_hwc;
E_Output_Ext_State ext_state;
+ int norender;
+
/* for fps */
double fps;
double old_fps;
EINTERN char *e_hwc_output_id_get(E_Hwc *hwc);
EINTERN tbm_surface_queue_h e_hwc_tbm_surface_queue_get(E_Hwc *hwc);
+EINTERN void e_hwc_norender_push(E_Hwc *hwc);
+EINTERN void e_hwc_norender_pop(E_Hwc *hwc);
+EINTERN int e_hwc_norender_get(E_Hwc *hwc);
+
EINTERN Eina_Bool e_hwc_intercept_hook_call(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc *hwc);
E_API E_Hwc_Intercept_Hook *e_hwc_intercept_hook_add(E_Hwc_Intercept_Hook_Point hookpoint, E_Hwc_Intercept_Hook_Cb func, const void *data);
return EINA_TRUE;
}
- if (e_comp_canvas_norender_get() > 0)
+ if (e_hwc_norender_get(hwc) > 0)
{
EHWSTRACE("NoRender get. Do not ecore_evas_manual_render.", NULL, hwc);
return EINA_TRUE;
if (!_e_hwc_windows_evaluate(hwc))
return EINA_TRUE;
- if (e_comp_canvas_norender_get() > 0)
+ if (e_hwc_norender_get(hwc) > 0)
{
EHWSTRACE(" Block Display... NoRender get.", NULL, hwc);
return EINA_TRUE;
return EINA_TRUE;
}
+EINTERN void
+e_output_norender_push(E_Output *output)
+{
+ EINA_SAFETY_ON_FALSE_RETURN(output);
+
+ e_hwc_norender_push(output->hwc);
+}
+
+EINTERN void
+e_output_norender_pop(E_Output *output)
+{
+ EINA_SAFETY_ON_FALSE_RETURN(output);
+
+ e_hwc_norender_pop(output->hwc);
+}
+
+EINTERN int
+e_output_norender_get(E_Output *output)
+{
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(output, 0);
+
+ return e_hwc_norender_get(output->hwc);
+}
+
static const char *
_e_output_prop_name_get_by_id(E_Output *output, unsigned int id)
{
EINTERN void e_output_external_unset(E_Output *output);
EINTERN Eina_Bool e_output_external_update(E_Output *output);
EINTERN Eina_Bool e_output_external_mode_change(E_Output *output, E_Output_Mode *mode);
+
+
+EINTERN void e_output_norender_push(E_Output *output);
+EINTERN void e_output_norender_pop(E_Output *output);
+EINTERN int e_output_norender_get(E_Output *output);
+
E_API E_Output * e_output_find(const char *id);
E_API E_Output * e_output_find_by_index(int index);
E_API const Eina_List * e_output_planes_get(E_Output *output);