The cache implementation is outdated since it has been handled by libds.
Change-Id: Ia29d849a0b44df870206c7bfd14e76ed6e2b8a34
if (!ec->comp_data) return NULL;
if (!ec->comp_data->sub.data) return NULL;
- return &ec->comp_data->sub.data->cached.buffer_viewport;
+ return NULL;
}
E_API void
EINA_SAFETY_ON_NULL_RETURN(ec->comp_data);
EINA_SAFETY_ON_NULL_RETURN(ec->comp_data->sub.data);
- ec->comp_data->sub.data->cached.buffer_viewport = *vp;
+ // Deprecated
}
E_API E_Client *
_e_comp_wl_surface_state_init(state, w, h);
}
-EINTERN void
-e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
-{
- _e_comp_wl_surface_state_commit(ec, state);
-}
-
EINTERN void
e_comp_wl_hook_call(E_Comp_Wl_Hook_Point hookpoint, E_Client *ec)
{
_e_comp_wl_surface_state_finish(state);
}
-EINTERN void
-e_comp_wl_surface_state_buffer_set(E_Comp_Wl_Surface_State *state, E_Comp_Wl_Buffer *buffer)
-{
- _e_comp_wl_surface_state_buffer_set(state, buffer);
-}
-
static void
buffer_transform(int width, int height, uint32_t transform, int32_t scale,
int sx, int sy, int *dx, int *dy)
EINTERN Eina_Bool e_comp_wl_commit_sync_configure(E_Client *ec);
EINTERN void e_comp_wl_surface_state_init(E_Comp_Wl_Surface_State *state, int w, int h);
-EINTERN void e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state);
EINTERN void e_comp_wl_surface_state_finish(E_Comp_Wl_Surface_State *state);
-EINTERN void e_comp_wl_surface_state_buffer_set(E_Comp_Wl_Surface_State *state, E_Comp_Wl_Buffer *buffer);
EINTERN Eina_Bool e_comp_wl_surface_viewport_get(E_Client *ec, Eina_Rectangle *buffer_viewport, Eina_Rectangle *output_viewport, unsigned int *transform);
EINTERN Eina_Bool e_comp_wl_surface_role_set(E_Client *ec, const char *role_name, struct wl_resource *error_resource, uint32_t error_code);
EINTERN const char *e_comp_wl_surface_role_get(E_Client *ec);
static E_Comp_Wl_Subsurf_Data *_e_comp_wl_subsurface_data_get(E_Client *ec);
-static void _e_comp_wl_subsurface_commit_to_cache(E_Client *ec);
-static void _e_comp_wl_subsurface_commit_from_cache(E_Client *ec);
static void _e_comp_wl_subsurface_stack_update(E_Client *ec);
static void
EINTERN void
e_comp_wl_subsurface_data_init(E_Comp_Wl_Subsurf_Data *sdata, E_Client *ec, E_Client *parent, E_Client *offscreen_parent)
{
- sdata->cached_buffer_ref.buffer = NULL;
sdata->synchronized = EINA_TRUE;
sdata->parent = parent;
sdata->remote_surface.offscreen_parent = offscreen_parent;
if (offscreen_parent)
ELOGF("SUBSURFACE", " |offscreen_parent:%p", ec, offscreen_parent);
- e_comp_wl_surface_state_init(&sdata->cached, ec->w, ec->h);
-
_e_comp_wl_client_subsurface_set(ec, sdata);
_e_comp_wl_client_subsurface_parent_set(ec, parent);
e_comp_wl_subsurface_data_finish(E_Comp_Wl_Subsurf_Data *sdata)
{
_subsurface_data_parent_unset(sdata);
- e_comp_wl_surface_state_finish(&sdata->cached);
- e_comp_wl_buffer_reference(&sdata->cached_buffer_ref, NULL);
}
EINTERN void
_subsurface_data_parent_unset(sdata);
}
-EINTERN void
-e_comp_wl_client_subsurface_commit_to_cache(E_Client *ec)
-{
- _e_comp_wl_subsurface_commit_to_cache(ec);
-}
-
-EINTERN void
-e_comp_wl_client_subsurface_commit_from_cache(E_Client *ec)
-{
- _e_comp_wl_subsurface_commit_from_cache(ec);
-}
-
static void
_e_comp_wl_subsurface_restack(E_Client *ec)
{
return EINA_TRUE;
}
-static void
-_e_comp_wl_subsurface_commit_to_cache(E_Client *ec)
-{
- E_Comp_Wl_Client_Data *cdata;
- E_Comp_Wl_Subsurf_Data *sdata;
- struct wl_resource *cb;
- Eina_List *l, *ll;
- Eina_Iterator *itr;
- Eina_Rectangle *rect;
-
- if (!(cdata = ec->comp_data)) return;
-
- sdata = _e_comp_wl_subsurface_data_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(sdata);
-
- DBG("Subsurface Commit to Cache");
-
- /* move pending damage to cached */
- EINA_LIST_FOREACH_SAFE(cdata->pending.damages, l, ll, rect)
- eina_list_move_list(&sdata->cached.damages, &cdata->pending.damages, l);
-
- EINA_LIST_FOREACH_SAFE(cdata->pending.buffer_damages, l, ll, rect)
- eina_list_move_list(&sdata->cached.buffer_damages, &cdata->pending.buffer_damages, l);
-
- if (cdata->pending.new_attach)
- {
- sdata->cached.new_attach = EINA_TRUE;
- e_comp_wl_surface_state_buffer_set(&sdata->cached,
- cdata->pending.buffer);
- e_comp_wl_buffer_reference(&sdata->cached_buffer_ref,
- cdata->pending.buffer);
- }
-
- sdata->cached.sx = cdata->pending.sx;
- sdata->cached.sy = cdata->pending.sy;
- /* sdata->cached.buffer = cdata->pending.buffer; */
-
- /* When subsurface is sync mode, the commit of subsurface can happen before
- * a parent surface is committed. In this case, we can't show a attached
- * buffer on screen.
- */
- //sdata->cached.new_attach = cdata->pending.new_attach;
-
- sdata->cached.buffer_viewport.changed |= cdata->pending.buffer_viewport.changed;
- sdata->cached.buffer_viewport.buffer = cdata->pending.buffer_viewport.buffer;
- sdata->cached.buffer_viewport.surface = cdata->pending.buffer_viewport.surface;
-
- e_comp_wl_surface_state_buffer_set(&cdata->pending, NULL);
- cdata->pending.sx = 0;
- cdata->pending.sy = 0;
- cdata->pending.new_attach = EINA_FALSE;
- cdata->pending.buffer_viewport.changed = 0;
-
- /* copy cdata->pending.opaque into sdata->cached.opaque */
- itr = eina_tiler_iterator_new(cdata->pending.opaque);
- EINA_ITERATOR_FOREACH(itr, rect)
- eina_tiler_rect_add(sdata->cached.opaque, rect);
- eina_iterator_free(itr);
-
- /* repeat for input */
- itr = eina_tiler_iterator_new(cdata->pending.input);
- EINA_ITERATOR_FOREACH(itr, rect)
- eina_tiler_rect_add(sdata->cached.input, rect);
- eina_iterator_free(itr);
-
- EINA_LIST_FOREACH_SAFE(cdata->pending.frames, l, ll, cb)
- {
- if (cb)
- eina_list_move_list(&sdata->cached.frames,
- &cdata->pending.frames,
- l);
- }
-
- sdata->cached.has_data = EINA_TRUE;
-}
-
-static void
-_e_comp_wl_subsurface_commit_from_cache(E_Client *ec)
-{
- E_Comp_Wl_Subsurf_Data *sdata;
- E_Alpha_Mask_Rect *rect;
-
- sdata = _e_comp_wl_subsurface_data_get(ec);
- EINA_SAFETY_ON_NULL_RETURN(sdata);
-
- DBG("Subsurface Commit from Cache");
-
- e_comp_wl_surface_state_commit(ec, &sdata->cached);
-
- if (!e_view_client_damage_exists(e_client_view_get(ec)))
- {
- if ((ec->comp_data->video_client) ||
- (!e_client_video_hw_composition_check(ec)))
- e_pixmap_image_clear(ec->pixmap, 1);
- }
-
- e_comp_wl_buffer_reference(&sdata->cached_buffer_ref, NULL);
-
- if (_e_comp_wl_subsurface_order_commit(ec))
- {
- E_Client *topmost = e_comp_wl_topmost_parent_get(ec);
- _e_comp_wl_subsurface_restack(topmost);
-
- rect = e_alpha_mask_rect_try_from_ec(topmost);
- if (rect)
- e_alpha_mask_rect_restack(rect);
- }
-
- sdata->cached.has_data = EINA_FALSE;
-}
-
static void
_e_comp_wl_subsurface_cb_ec_iconify(void *data EINA_UNUSED, E_Client *ec)
{
E_Surface *parent;
struct ds_subsurface *ds_subsurface;
+ struct
+ {
+ E_Presentation_Time_Container presentation_container;
+ Eina_Bool has_data;
+ } cached;
+
struct wl_listener destroy;
struct wl_listener surface_destroy;
struct wl_listener parent_surface_destroy;
EINTERN Eina_Bool
e_surface_buffer_transform_set(E_Surface *surface, enum wl_output_transform transform)
{
- E_Subsurface *sub;
E_Comp_Wl_Buffer_Viewport *vp;
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
surface->base.pending.buffer_viewport = *vp;
- sub = _e_subsurface_try_from_surface(surface);
- if (sub)
- sub->base.cached.buffer_viewport = *vp;
-
if (surface->ds_surface)
_ds_surface_buffer_transform_set(surface->ds_surface, transform);
EINTERN Eina_Bool
e_surface_viewport_source_box_set(E_Surface *surface, Eina_Rectangle *box)
{
- E_Subsurface *sub;
E_Comp_Wl_Buffer_Viewport *vp;
wl_fixed_t fx, fy, fw, fh;
surface->base.pending.buffer_viewport = *vp;
- sub = _e_subsurface_try_from_surface(surface);
- if (sub)
- sub->base.cached.buffer_viewport = *vp;
-
if (surface->ds_surface)
_ds_surface_viewport_source_box_set(surface->ds_surface, box);
EINTERN Eina_Bool
e_surface_viewport_destination_set(E_Surface *surface, int32_t width, int32_t height)
{
- E_Subsurface *sub;
E_Comp_Wl_Buffer_Viewport *vp;
EINA_SAFETY_ON_NULL_RETURN_VAL(surface, EINA_FALSE);
surface->base.pending.buffer_viewport = *vp;
- sub = _e_subsurface_try_from_surface(surface);
- if (sub)
- sub->base.cached.buffer_viewport = *vp;
-
if (surface->ds_surface)
_ds_surface_viewport_destination_set(surface->ds_surface, width, height);
struct wl_resource *resource = data;
E_Frame_Callback *frame_callback;
E_Surface *surface;
- E_Subsurface *subsurface;
frame_callback = wl_container_of(listener, frame_callback, destroy);
surface = frame_callback->surface;
if (surface->base.pending.frames)
surface->base.pending.frames = eina_list_remove(surface->base.pending.frames, resource);
- subsurface = _e_subsurface_try_from_surface(surface);
- if (subsurface && subsurface->base.cached.frames)
- subsurface->base.cached.frames = eina_list_remove(subsurface->base.cached.frames, resource);
-
wl_list_remove(&frame_callback->destroy.link);
free(frame_callback);
}
wl_signal_emit(&surface->events.precommit_to_cache, surface);
- e_presentation_time_container_feedback_discard(&subsurface->base.cached.presentation_container);
- e_presentation_time_container_feedback_merge(&subsurface->base.cached.presentation_container,
+ e_presentation_time_container_feedback_discard(&subsurface->cached.presentation_container);
+ e_presentation_time_container_feedback_merge(&subsurface->cached.presentation_container,
&surface->base.pending.presentation_container);
- subsurface->base.cached.has_data = EINA_TRUE;
+ subsurface->cached.has_data = EINA_TRUE;
e_comp_wl_hook_call(E_COMP_WL_HOOK_SUBSURFACE_COMMIT_TO_CACHE, surface->ec);
}
wl_signal_emit(&surface->events.precommit_from_cache, surface);
- if (subsurface->base.cached.has_data)
+ if (subsurface->cached.has_data)
{
e_presentation_time_container_feedback_discard(&surface->base.presentation_container);
e_presentation_time_container_feedback_merge(&surface->base.presentation_container,
- &subsurface->base.cached.presentation_container);
- subsurface->base.cached.has_data = EINA_FALSE;
+ &subsurface->cached.presentation_container);
+ subsurface->cached.has_data = EINA_FALSE;
}
// The _e_subsurface_synchronized_check() should be called, because this
static void
_e_subsurface_commit(E_Subsurface *sub)
{
- if (sub->base.cached.has_data)
- {
- e_comp_wl_client_subsurface_commit_to_cache(sub->surface->ec);
- e_comp_wl_client_subsurface_commit_from_cache(sub->surface->ec);
- }
- else
- {
- e_comp_wl_surface_commit(sub->surface->ec);
- }
+ e_comp_wl_surface_commit(sub->surface->ec);
if (_e_subsurface_synchronized_check(sub))
{
Eina_Bool set;
} position;
- E_Comp_Wl_Surface_State cached;
- E_Comp_Wl_Buffer_Ref cached_buffer_ref;
+ EINA_DEPRECATED E_Comp_Wl_Surface_State cached;
+ EINA_DEPRECATED E_Comp_Wl_Buffer_Ref cached_buffer_ref;
Eina_Bool synchronized;
Eina_Bool stand_alone;
E_API Evas_Object *e_comp_wl_sub_below_object_get(E_Client *ec);
E_API E_Comp_Wl_Subsurf_Data *e_comp_wl_sub_data_get(E_Client *ec);
-E_API E_Comp_Wl_Buffer_Viewport *e_comp_wl_sub_data_cached_buffer_viewport_get(E_Client *ec);
-E_API void e_comp_wl_sub_data_cached_buffer_viewport_set(E_Client *ec, E_Comp_Wl_Buffer_Viewport *vp);
+EINA_DEPRECATED E_API E_Comp_Wl_Buffer_Viewport *e_comp_wl_sub_data_cached_buffer_viewport_get(E_Client *ec);
+EINA_DEPRECATED E_API void e_comp_wl_sub_data_cached_buffer_viewport_set(E_Client *ec, E_Comp_Wl_Buffer_Viewport *vp);
E_API E_Client *e_comp_wl_sub_data_parent_get(E_Client *ec);
E_API Eina_Bool e_comp_wl_sub_data_position_get(E_Client *ec, int *x, int *y);
E_API void e_comp_wl_sub_data_position_set(E_Client *ec, int x, int y);