e_comp_rsm: add buffer_mode on release 80/136280/1
authorSangjin Lee <lsj119@samsung.com>
Sat, 24 Jun 2017 00:05:03 +0000 (09:05 +0900)
committerSangjin Lee <lsj119@samsung.com>
Thu, 29 Jun 2017 02:27:37 +0000 (11:27 +0900)
this patch allows select the buffer flush mode for remote_surface
- free_on_release : the buffer will be freed when every release event. so remote_surface
have only one buffer.
- free_on_hide : If the provider was hide, it has only one buffer.

Change-Id: I4af9175a38062db6d604692585bf23d918dcc6ae

src/bin/e_comp_wl_rsm.c
src/bin/e_config.c
src/bin/e_config.h

index d1ab5a3c10cd56df749cbbc1d0a5f83e141df576..116618a08619fce7bdaada8c19661bed1a47b8e7 100644 (file)
@@ -91,6 +91,7 @@ struct _E_Comp_Wl_Remote_Provider
    Eina_Bool visible;
    int vis_ref;
    uint32_t input_event_filter;
+   int buffer_mode;
 };
 
 /* normal UI client */
@@ -443,6 +444,9 @@ _remote_provider_visible_set(E_Comp_Wl_Remote_Provider *provider, Eina_Bool set)
              tizen_remote_surface_provider_send_visibility
                 (provider->resource,
                  TIZEN_REMOTE_SURFACE_PROVIDER_VISIBILITY_TYPE_INVISIBLE);
+
+             if (provider->buffer_mode)
+               e_pixmap_buffer_clear(provider->common.ec->pixmap, EINA_TRUE);
           }
      }
 
@@ -1972,7 +1976,28 @@ _remote_surface_cb_release(struct wl_client *client, struct wl_resource *resourc
    EINA_SAFETY_ON_NULL_RETURN(remote_buffer);
 
    if (remote_surface->version >= 2)
-     e_comp_wl_buffer_reference(&remote_buffer->ref, NULL);
+     {
+        E_Comp_Wl_Buffer *buf = NULL;
+
+        if (remote_buffer->ref.buffer &&
+            remote_buffer->ref.buffer->resource)
+           buf = remote_buffer->ref.buffer;
+
+        e_comp_wl_buffer_reference(&remote_buffer->ref, NULL);
+
+        /*Send release event to provider*/
+        if (remote_surface->provider->buffer_mode &&
+            buf && buf->busy == 0)
+          {
+             if (remote_surface->provider->buffer_mode == 1 ||
+                 (remote_surface->provider->buffer_mode == 2 &&
+                  remote_surface->provider->vis_ref == 0))
+               {
+                  E_Client *ec = remote_surface->provider->common.ec;
+                  e_pixmap_buffer_clear(ec->pixmap, EINA_TRUE);
+               }
+          }
+     }
 }
 
 static void
@@ -2125,6 +2150,9 @@ _remote_manager_cb_provider_create(struct wl_client *client, struct wl_resource
    /* send resource id */
    res_id = e_pixmap_res_id_get(ec->pixmap);
    tizen_remote_surface_provider_send_resource_id(resource, res_id);
+
+   /* set buffer mode */
+   provider->buffer_mode = e_config->rsm_buffer_release_mode;
 }
 
 static void
index db8860492597cfa672857e3e015988fd32ebee37..c77364b91760f7e82b81d4ebfd7dedcc50f16774 100644 (file)
@@ -281,6 +281,7 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, indicator_plug_name, STR);
    E_CONFIG_VAL(D, T, launchscreen_without_timer, UCHAR);
    E_CONFIG_VAL(D, T, log_type, INT);
+   E_CONFIG_VAL(D, T, rsm_buffer_release_mode, INT);
 }
 
 /* externally accessible functions */
@@ -479,6 +480,7 @@ e_config_load(void)
    E_CONFIG_LIMIT(e_config->save_win_buffer, 0, 1);
    E_CONFIG_LIMIT(e_config->launchscreen_without_timer, 0, 1);
    E_CONFIG_LIMIT(e_config->log_type, 0, 255);
+   E_CONFIG_LIMIT(e_config->rsm_buffer_release_mode, 0, 2);
 }
 
 E_API int
index 39cde5f47dcf4c3a656b1ac8763e48a5f5988369..52ec5e8713cd91c5b485782e04bc1a204e1c4813 100644 (file)
@@ -178,6 +178,7 @@ struct _E_Config
    const char *indicator_plug_name;
    Eina_Bool launchscreen_without_timer;
    int log_type;
+   int rsm_buffer_release_mode; /* 0:none, 1:release on free, 2:release on hide */
 };
 
 struct _E_Config_Desklock_Background