e_comp: add the option for using the type of e_comp_wl_buffer 68/143668/1 accepted/tizen/unified/20170811.071723 submit/tizen/20170811.024541
authorSooChan Lim <sc1.lim@samsung.com>
Thu, 10 Aug 2017 23:43:02 +0000 (08:43 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 11 Aug 2017 02:20:07 +0000 (11:20 +0900)
add use_native_type_buffer option
0 : use tbm buffer type of e_comp_wl_buffer
1 : use native buffer type of e_comp_wl_buffer

Change-Id: I0f4548000c4ab57fbf72b9dbecaf0980933251be

src/bin/e_comp.c
src/bin/e_comp.h
src/bin/e_comp_cfdata.c
src/bin/e_comp_cfdata.h
src/bin/e_comp_wl.c

index 9a779499ccf024b8bc7933e89f10656a70d1c7ec..7083e0f245e86cbcbadc6a23b9de8b505fbdf9dc 100644 (file)
@@ -1521,6 +1521,7 @@ e_comp_init(void)
 #ifdef ENABLE_HWC_MULTI
    if (conf->hwc_use_multi_plane) e_comp->hwc_use_multi_plane = EINA_TRUE;
 #endif
+   if (conf->use_native_type_buffer) e_comp->use_native_type_buffer = EINA_TRUE;
 
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_ON,  _e_comp_screensaver_on,  NULL);
    E_LIST_HANDLER_APPEND(handlers, E_EVENT_SCREENSAVER_OFF, _e_comp_screensaver_off, NULL);
index 07495e88932a3f6cd40f06ad1e27b03767ea184d..87338ec1c8f10ce684caca2ac2f7b931dd1ef847 100644 (file)
@@ -148,6 +148,7 @@ struct _E_Comp
    Eina_Bool       hwc_use_detach;
    Eina_Bool       hwc_use_multi_plane;
    Eina_Bool       hwc_ignore_primary;
+   Eina_Bool       use_native_type_buffer : 1; // use native buffer type
 
    int depth;
    unsigned int    input_key_grabs;
index df98adb655f27e101906cf825bb611ebf14b8c94..50bd6ba34453176be5f7f8fb7355f3df7e2c5e2d 100644 (file)
@@ -61,6 +61,7 @@ e_comp_cfdata_edd_init(E_Config_DD **conf_edd, E_Config_DD **match_edd)
    E_CONFIG_VAL(D, T, hwc_sync_mode_change, UCHAR);
    E_CONFIG_VAL(D, T, hwc_ignore_primary, UCHAR);
    E_CONFIG_VAL(D, T, hwc_use_detach, UCHAR);
+   E_CONFIG_VAL(D, T, use_native_type_buffer, UCHAR);
    E_CONFIG_VAL(D, T, nofade, UCHAR);
    E_CONFIG_VAL(D, T, smooth_windows, UCHAR);
    E_CONFIG_VAL(D, T, first_draw_delay, DOUBLE);
@@ -130,6 +131,7 @@ e_comp_cfdata_config_new(void)
    cfg->hwc_sync_mode_change = 0;
    cfg->hwc_ignore_primary = 0;
    cfg->hwc_use_detach = 0;
+   cfg->use_native_type_buffer = 0;  // 1 if use_native(wl_buffer), 0 if use_tbm(tbm_surface)
    cfg->nofade = 0;
    cfg->smooth_windows = 0; // 1 if gl, 0 if not
    cfg->first_draw_delay = 0.15;
index 93d7d20005cb48634bd584d67f29b7a8c53a59fd..d4ce5e4f229e0a3a37e204be924970ca7f1cc2f3 100644 (file)
@@ -38,6 +38,7 @@ struct _E_Comp_Config
    unsigned char hwc_sync_mode_change; // 0: none, 1: synchronize scanout buffer when hwc mode change in reserved memory plane
    unsigned char hwc_ignore_primary; // 0: none, 1: hwc use plane has lowest zpos and support rgb to default ui layer
    unsigned char hwc_use_detach; // 0: hwc use dequeue protocol, 1: hwc use detach request when synchronize scanout buffer
+   unsigned char use_native_type_buffer; // 0: use the tbm_buffer(tbm_surface), 1: use the native_buffer(wl_buffer)
    unsigned char smooth_windows;
    unsigned char nofade;
    double        first_draw_delay;
index fc6bf43eb58cd055149e3b2e3b3051fc8712b83a..b9867e84588c064c37815e8717559515ca44b9cc 100644 (file)
@@ -5089,56 +5089,109 @@ e_comp_wl_buffer_get(struct wl_resource *resource, E_Client *ec)
    if (!(buffer = E_NEW(E_Comp_Wl_Buffer, 1))) return NULL;
 
    shmbuff = wl_shm_buffer_get(resource);
-   tbm_surf = wayland_tbm_server_get_surface(NULL, resource);
 
-   if (shmbuff)
+   /* TODO: This option is temporarily. It will be removed later. */
+   /* prefer to use native buffer(wl_buffer) */
+   if (e_comp->use_native_type_buffer)
      {
-        buffer->type = E_COMP_WL_BUFFER_TYPE_SHM;
-
-        buffer->w = wl_shm_buffer_get_width(shmbuff);
-        buffer->h = wl_shm_buffer_get_height(shmbuff);
-     }
-   else if (tbm_surf)
-     {
-        tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
-        if (!tbm_surf)
-          goto err;
-
-        if ((ec) && (ec->comp_data->video_client))
+        if (shmbuff)
           {
-             buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
-             buffer->w = buffer->h = 1;
+             buffer->type = E_COMP_WL_BUFFER_TYPE_SHM;
+
+             buffer->w = wl_shm_buffer_get_width(shmbuff);
+             buffer->h = wl_shm_buffer_get_height(shmbuff);
           }
         else
           {
-             buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
-             buffer->w = tbm_surface_get_width(tbm_surf);
-             buffer->h = tbm_surface_get_height(tbm_surf);
+             if ((ec) && (ec->comp_data->video_client))
+               {
+                  buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+                  buffer->w = buffer->h = 1;
+               }
+             else if (e_comp->gl)
+               {
+                  buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
+
+                  res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                                      resource,
+                                                                      EVAS_GL_WIDTH,
+                                                                      &buffer->w);
+                  EINA_SAFETY_ON_FALSE_GOTO(res, err);
+
+                  res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                                      resource,
+                                                                      EVAS_GL_HEIGHT,
+                                                                      &buffer->h);
+                  EINA_SAFETY_ON_FALSE_GOTO(res, err);
+               }
+             else
+               {
+                  tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
+                  if (!tbm_surf)
+                    goto err;
+
+                  buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
+                  buffer->w = tbm_surface_get_width(tbm_surf);
+                  buffer->h = tbm_surface_get_height(tbm_surf);
+                  buffer->tbm_surface = tbm_surf;
+               }
           }
-     }
-   else if (e_comp->gl)
-     {
-         buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
-
-         res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
-                                                             resource,
-                                                             EVAS_GL_WIDTH,
-                                                             &buffer->w);
-         EINA_SAFETY_ON_FALSE_GOTO(res, err);
-
-         res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
-                                                             resource,
-                                                             EVAS_GL_HEIGHT,
-                                                             &buffer->h);
-         EINA_SAFETY_ON_FALSE_GOTO(res, err);
-     }
-   else
-     {
-         goto err;
-     }
+          buffer->shm_buffer = shmbuff;
+       }
+     else
+       {
+          tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
+
+          if (shmbuff)
+            {
+               buffer->type = E_COMP_WL_BUFFER_TYPE_SHM;
+
+               buffer->w = wl_shm_buffer_get_width(shmbuff);
+               buffer->h = wl_shm_buffer_get_height(shmbuff);
+            }
+          else if (tbm_surf)
+            {
+               tbm_surf = wayland_tbm_server_get_surface(e_comp_wl->tbm.server, resource);
+               if (!tbm_surf)
+                 goto err;
+
+               if ((ec) && (ec->comp_data->video_client))
+                 {
+                    buffer->type = E_COMP_WL_BUFFER_TYPE_VIDEO;
+                    buffer->w = buffer->h = 1;
+                 }
+               else
+                 {
+                    buffer->type = E_COMP_WL_BUFFER_TYPE_TBM;
+                    buffer->w = tbm_surface_get_width(tbm_surf);
+                    buffer->h = tbm_surface_get_height(tbm_surf);
+                 }
+            }
+          else if (e_comp->gl)
+            {
+                buffer->type = E_COMP_WL_BUFFER_TYPE_NATIVE;
+
+                res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                                    resource,
+                                                                    EVAS_GL_WIDTH,
+                                                                    &buffer->w);
+                EINA_SAFETY_ON_FALSE_GOTO(res, err);
+
+                res = e_comp_wl->wl.glapi->evasglQueryWaylandBuffer(e_comp_wl->wl.gl,
+                                                                    resource,
+                                                                    EVAS_GL_HEIGHT,
+                                                                    &buffer->h);
+                EINA_SAFETY_ON_FALSE_GOTO(res, err);
+            }
+          else
+            {
+                goto err;
+            }
+
+          buffer->shm_buffer = shmbuff;
+          buffer->tbm_surface = tbm_surf;
+       }
 
-   buffer->shm_buffer = shmbuff;
-   buffer->tbm_surface = tbm_surf;
    buffer->resource = resource;
    wl_signal_init(&buffer->destroy_signal);
    buffer->destroy_listener.notify = _e_comp_wl_buffer_cb_destroy;