renderer_client = e_plane_renderer_client_get(ec);
EINA_SAFETY_ON_NULL_RETURN_VAL(renderer_client, NULL);
+ if (!e_plane_renderer_surface_queue_clear(renderer))
+ ERR("fail to e_plane_renderer_surface_queue_clear");
+
if (e_comp_object_hwc_update_exists(ec->frame))
{
e_comp_object_hwc_update_set(ec->frame, EINA_FALSE);
if (plane_trace_debug)
ELOGF("E_PLANE", "Plane:%p Display Client", ec->pixmap, ec, plane);
- if (!e_plane_renderer_surface_queue_clear(renderer))
- ERR("fail to e_plane_renderer_surface_queue_clear");
-
/* acquire the surface from the client_queue */
tsurface = e_plane_renderer_client_surface_recieve(renderer_client);
if (!tsurface)
{
if (displaying_tsurface)
{
- e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
-
if (plane->ec)
{
+ e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
_e_plane_surface_on_client_reserved_release(plane, displaying_tsurface);
_e_plane_surface_send_dequeuable_surfaces(plane);
}
else
{
e_plane_renderer_sent_surface_recevie(plane->renderer, displaying_tsurface);
+ e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
}
}
}
/* release */
if (displaying_tsurface)
{
- e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
-
if (plane->ec)
{
+ e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
_e_plane_surface_on_client_reserved_release(plane, displaying_tsurface);
_e_plane_surface_send_dequeuable_surfaces(plane);
}
else
{
e_plane_renderer_sent_surface_recevie(plane->renderer, displaying_tsurface);
+ e_plane_renderer_surface_queue_release(plane->renderer, displaying_tsurface);
}
}
}
if (renderer->state == E_PLANE_RENDERER_STATE_CANDIDATE)
{
- EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
- {
- if (!tsurface) continue;
-
- renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
- }
+ renderer_client->exported_surfaces = eina_list_free(renderer_client->exported_surfaces);
}
else
{
- EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
+ if (eina_list_count(renderer_client->exported_surfaces) < 3)
+ {
+ renderer_client->exported_surfaces = eina_list_free(renderer_client->exported_surfaces);
+ }
+ else
{
- if (!tsurface) continue;
+ EINA_LIST_FOREACH_SAFE(renderer_client->exported_surfaces, l_s, ll_s, tsurface)
+ {
+ if (!tsurface) continue;
- renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
+ renderer_client->exported_surfaces = eina_list_remove_list(renderer_client->exported_surfaces, l_s);
- if (plane->pending_commit) continue;
+ if (plane->pending_commit) continue;
- if (tsurface == renderer->previous_tsurface)
- _e_plane_renderer_exported_surface_release(renderer, tsurface);
+ if (tsurface == renderer->previous_tsurface)
+ _e_plane_renderer_exported_surface_release(renderer, tsurface);
+ }
}
}
}
renderer->state = E_PLANE_RENDERER_STATE_NONE;
renderer->ec = NULL;
+ renderer->mode_change_age = 0;
renderer_client->state = E_PLANE_RENDERER_CLIENT_STATE_NONE;
renderer_client->renderer = NULL;
if (renderer->state != E_PLANE_RENDERER_STATE_NONE) return;
+ if (renderer->mode_change_age < 2)
+ renderer->mode_change_age++;
+
+ if (_e_plane_renderer_surface_find_exported_surface(renderer, tsurface))
+ renderer->exported_surfaces = eina_list_remove(renderer->exported_surfaces, tsurface);
+
+ if (renderer->mode_change_age < 2) return;
+
EINA_LIST_FOREACH_SAFE(renderer->exported_surfaces, l_s, ll_s, tmp_tsurface)
{
if (!tmp_tsurface) continue;