Use ds_single_pixel_buffer_manager_v1 96/298296/1 accepted/tizen/unified/20230906.014645
authorSeunghun Lee <shiin.lee@samsung.com>
Fri, 1 Sep 2023 07:11:10 +0000 (16:11 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 5 Sep 2023 06:14:31 +0000 (15:14 +0900)
Instead of implementing single-pixel-buffer-manager-v1 protocol by
itself, this uses ds_single_pixel_buffer_manager_v1 [1].

[1]: https://github.sec.samsung.net/TizenWS/libds/pull/134

Change-Id: I28c2c6e7a3a009f8f21d4c4329f60bb55dddd167

src/bin/Makefile.mk
src/bin/e_comp_wl.c
src/bin/e_comp_wl.h
src/bin/e_comp_wl_buffer.c
src/bin/e_comp_wl_buffer.h
src/bin/e_includes.h
src/bin/e_pixmap.c
src/bin/e_single_pixel_buffer.c [deleted file]
src/bin/e_single_pixel_buffer.h [deleted file]

index acba64d19861cbd6b9312344b051e7dd2b39d37e..f9566d3ce849dd5029da337f19b7cd12e7206252 100644 (file)
@@ -144,7 +144,6 @@ src/bin/e_map.h \
 src/bin/e_wtz_shell.h \
 src/bin/e_device.h \
 src/bin/e_input_event.h \
-src/bin/e_single_pixel_buffer.h \
 src/bin/e_blender.h
 
 enlightenment_src = \
@@ -281,7 +280,6 @@ src/bin/e_map.c \
 src/bin/e_wtz_shell.c \
 src/bin/e_device.c \
 src/bin/e_input_event.c \
-src/bin/e_single_pixel_buffer.c \
 src/bin/e_comp_wl_buffer.c \
 src/bin/e_compositor.c \
 src/bin/e_blender.c \
index cda46f064b7ee65b36ea293c1c43ddef84dded93..18a08d23699ecd67f530876957a5c7686cd93f9a 100644 (file)
@@ -11,6 +11,7 @@
 #include <glib.h>
 
 #include <libds/log.h>
+#include <libds/single_pixel_buffer_v1.h>
 
 /* handle include for printing uint64_t */
 #define __STDC_FORMAT_MACROS
@@ -3816,7 +3817,7 @@ e_comp_wl_init(void)
    e_comp_wl_renderer_init();
    _e_comp_wl_move_resize_init();
    e_presentation_time_init();
-   e_single_pixel_buffer_manager_init();
+   ds_single_pixel_buffer_manager_v1_create(e_comp_wl->wl.disp);
    e_blender_init();
 
    if (!e_foreign_global_init(e_comp_wl->wl.disp))
@@ -3866,7 +3867,6 @@ e_comp_wl_shutdown(void)
    _e_comp_wl_gl_shutdown();
 
    e_blender_shutdown();
-   e_single_pixel_buffer_manager_shutdown();
    e_presentation_time_shutdown();
    e_comp_wl_renderer_shutdown();
    e_comp_wl_capture_shutdown();
index 72b3cc794487f03d0bccba49bea6a1a88fccda18..51c2b9b1a72f9872ce6277b0232a15abc74843f1 100644 (file)
@@ -129,7 +129,6 @@ struct _E_Comp_Wl_Buffer
    uint32_t busy;
 
    E_Explicit_Sync_Buffer_Release *buffer_release;
-   E_Single_Pixel_Buffer *single_pixel_buffer;
 };
 
 struct _E_Comp_Wl_Buffer_Ref
index 2f13888b9dc23026156c37e16ec95879c4ab2a9e..e0a0b06c0d1a6d0df79c9584d46239aa115942a2 100644 (file)
@@ -1,3 +1,5 @@
+#include <libds/single_pixel_buffer_v1.h>
+
 #include "e_comp_wl_private.h"
 
 typedef struct _E_Buffer E_Buffer;
@@ -78,6 +80,33 @@ done:
    return &buffer->base;
 }
 
+EINTERN void *
+e_comp_wl_buffer_single_pixel_buffer_data_get(E_Comp_Wl_Buffer *comp_buffer)
+{
+   E_Buffer *buffer;
+   uint32_t format;
+   size_t stride;
+   void *data;
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(comp_buffer, NULL);
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(comp_buffer->type == E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL, NULL);
+
+   buffer = _e_buffer_from_base(comp_buffer);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(buffer, NULL);
+
+   if (!ds_buffer_begin_data_ptr_access(buffer->ds_buffer,
+                                        DS_BUFFER_DATA_PTR_ACCESS_READ,
+                                        &data, &format, &stride))
+     {
+        ERR("Could not access data of buffer(%p)", buffer);
+        return NULL;
+     }
+
+   ds_buffer_end_data_ptr_access(buffer->ds_buffer);
+
+   return data;
+}
+
 static void
 _e_comp_wl_buffer_ref(E_Comp_Wl_Buffer *base)
 {
@@ -238,12 +267,13 @@ _e_comp_wl_buffer_tbm_type_get(E_Comp_Wl_Buffer *base, struct wl_resource *resou
 }
 
 static Eina_Bool
-_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct wl_resource *resource, E_Client *ec)
+_e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct ds_buffer *ds_buffer, E_Client *ec)
 {
    struct wl_shm_buffer *shmbuff;
-   E_Single_Pixel_Buffer *single_pixel_buffer;
+   struct wl_resource *resource;
    Eina_Bool res;
 
+   resource = ds_buffer_get_resource(ds_buffer);
    shmbuff = wl_shm_buffer_get(resource);
    if (shmbuff)
      {
@@ -256,14 +286,12 @@ _e_comp_wl_buffer_init(E_Comp_Wl_Buffer *base, struct wl_resource *resource, E_C
 
    if (!base->type)
      {
-        single_pixel_buffer = e_single_pixel_buffer_manager_buffer_get(resource);
-        if (single_pixel_buffer)
+        if (ds_single_pixel_buffer_v1_from_buffer(ds_buffer))
           {
              base->type = E_COMP_WL_BUFFER_TYPE_SINGLE_PIXEL;
              base->w = 1;
              base->h = 1;
              base->format = WL_SHM_FORMAT_ARGB8888;
-             base->single_pixel_buffer = single_pixel_buffer;
           }
      }
 
@@ -342,13 +370,13 @@ _e_buffer_create(struct ds_buffer *ds_buffer, E_Client *ec)
 
    buffer->ds_buffer = ds_buffer;
 
-   buffer_resource = ds_buffer_get_resource(ds_buffer);
-   if (!_e_comp_wl_buffer_init(&buffer->base, buffer_resource, ec))
+   if (!_e_comp_wl_buffer_init(&buffer->base, ds_buffer, ec))
      {
         free(buffer);
         return NULL;
      }
 
+   buffer_resource = ds_buffer_get_resource(ds_buffer);
    buffer->base.destroy_listener.notify = _e_buffer_cb_resource_destroy;
    wl_resource_add_destroy_listener(buffer_resource, &buffer->base.destroy_listener);
 
index fda47a9aa838a7e6dfc933946a9b38e8fc656f41..0c0feda63a0d73a07a8c3380c5a5a3c02a592358 100644 (file)
@@ -2,7 +2,9 @@
 #define E_COMP_WL_BUFFER_H
 
 #include <libds/types/ds_buffer.h>
+#include "e_comp_wl.h"
 
 EINTERN E_Comp_Wl_Buffer *e_comp_wl_buffer_get(struct ds_buffer *ds_buffer, E_Client *ec);
+EINTERN void *e_comp_wl_buffer_single_pixel_buffer_data_get(E_Comp_Wl_Buffer *buffer);
 
 #endif
index a1e8016ccf3cc005e4445792753025a25c2c39b4..722bd50c4ea31be2cc97717a0e5432cf1984e342 100644 (file)
@@ -88,5 +88,4 @@
 #include "e_comp_wl_tizen_hwc.h"
 #include "e_comp_wl_renderer.h"
 #include "e_map.h"
-#include "e_single_pixel_buffer.h"
 #include "e_blender.h"
index 1537230f52cc4eb2a0dd697ec0659a8d46f96b1a..6dcad28913097f1a3a37995391dab0a207b00641 100644 (file)
@@ -1,6 +1,7 @@
 #include "e.h"
 
 #include "e_comp_wl.h"
+#include "e_comp_wl_buffer.h"
 #include <wayland-tbm-server.h>
 #include <tizen-extension-server-protocol.h>
 #include <tizen-surface-server-protocol.h>
@@ -697,6 +698,7 @@ e_pixmap_image_refresh(E_Pixmap *cp)
    E_Comp_Wl_Buffer *buffer = NULL;
    struct wl_shm_buffer *shm_buffer = NULL;
    int bw, bh;
+   void *data;
 
    if (!cp)
      {
@@ -811,8 +813,12 @@ e_pixmap_image_refresh(E_Pixmap *cp)
         cp->w = 1;
         cp->h = 1;
         cp->image_argb = EINA_TRUE;
-        cp->single_pixel = buffer->single_pixel_buffer->data;
-        cp->data = &cp->single_pixel;
+        data = e_comp_wl_buffer_single_pixel_buffer_data_get(buffer);
+        if (data)
+          {
+             cp->single_pixel = *((uint32_t *)data);
+             cp->data = &cp->single_pixel;
+          }
         cp->shm_buffer = NULL;
      }
    else
diff --git a/src/bin/e_single_pixel_buffer.c b/src/bin/e_single_pixel_buffer.c
deleted file mode 100644 (file)
index cd88302..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#include "e.h"
-#include <single-pixel-buffer-v1-server-protocol.h>
-
-static E_Single_Pixel_Buffer_Manager *_single_pixel_buffer_mgr = NULL;
-
-static void
-_single_pixel_buffer_manager_destroy(struct wl_client *client, struct wl_resource *resource)
-{
-   wl_resource_destroy(resource);
-}
-
-static void
-_single_pixel_buffer_cb_resource_destroy(struct wl_resource *resource)
-{
-   E_Single_Pixel_Buffer *single_pixel_buffer;
-
-   single_pixel_buffer = wl_resource_get_user_data(resource);
-   if (!single_pixel_buffer) return;
-
-   free(single_pixel_buffer);
-}
-
-static void
-_single_pixel_buffer_destroy(struct wl_client *client, struct wl_resource *resource)
-{
-   wl_resource_destroy(resource);
-}
-
-static const struct wl_buffer_interface single_pixel_buffer_implementation = {
-   _single_pixel_buffer_destroy,
-};
-
-static void
-_single_pixel_buffer_manager_create_u32_rgba_buffer(struct wl_client *client,
-                                                    struct wl_resource *resource,
-                                                    uint32_t id,
-                                                    uint32_t r,
-                                                    uint32_t g,
-                                                    uint32_t b,
-                                                    uint32_t a)
-{
-   E_Single_Pixel_Buffer *single_pixel_buffer;
-
-   single_pixel_buffer = E_NEW(E_Single_Pixel_Buffer, 1);
-   if (!single_pixel_buffer)
-     {
-        wl_client_post_no_memory(client);
-        return;
-     }
-
-   single_pixel_buffer->buffer = wl_resource_create(client, &wl_buffer_interface, 1, id);
-   if (!single_pixel_buffer->buffer)
-     {
-        free(single_pixel_buffer);
-        wl_client_post_no_memory(client);
-        return;
-     }
-
-   wl_resource_set_implementation(single_pixel_buffer->buffer, &single_pixel_buffer_implementation,
-                                  single_pixel_buffer, _single_pixel_buffer_cb_resource_destroy);
-
-   single_pixel_buffer->r = r;
-   single_pixel_buffer->g = g;
-   single_pixel_buffer->b = b;
-   single_pixel_buffer->a = a;
-
-   single_pixel_buffer->data = (((uint32_t)((a / (double)0xffffffff) * 255)) << 24) |
-                               (((uint32_t)((r / (double)0xffffffff) * 255)) << 16) |
-                               (((uint32_t)((g / (double)0xffffffff) * 255)) << 8) |
-                               ((uint32_t)((b / (double)0xffffffff) * 255));
-
-   ELOGF("SPBUF", "Create Single Pixel Buffer:%p r(%x) g(%x) b(%x) a(%x) data(%x)",
-         NULL, single_pixel_buffer, r, g, b, a, single_pixel_buffer->data);
-}
-
-static const struct wp_single_pixel_buffer_manager_v1_interface single_pixel_buffer_manager_implementation = {
-   _single_pixel_buffer_manager_destroy,
-   _single_pixel_buffer_manager_create_u32_rgba_buffer
-};
-
-static void
-_single_pixel_buffer_manager_cb_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
-{
-   struct wl_resource *resource;
-
-   resource = wl_resource_create(client, &wp_single_pixel_buffer_manager_v1_interface, version, id);
-   if (!resource)
-     {
-        wl_client_post_no_memory(client);
-        return;
-     }
-
-   wl_resource_set_implementation(resource, &single_pixel_buffer_manager_implementation,
-                                  NULL, NULL);
-}
-
-EINTERN Eina_Bool
-e_single_pixel_buffer_manager_init(void)
-{
-   E_Single_Pixel_Buffer_Manager *single_pixel_buffer_mgr;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl, EINA_FALSE);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_wl->wl.disp, EINA_FALSE);
-
-   if (_single_pixel_buffer_mgr) return EINA_TRUE;
-
-   single_pixel_buffer_mgr = E_NEW(E_Single_Pixel_Buffer_Manager, 1);
-   EINA_SAFETY_ON_NULL_GOTO(single_pixel_buffer_mgr, fail);
-
-   single_pixel_buffer_mgr->global = wl_global_create(e_comp_wl->wl.disp,
-                                                      &wp_single_pixel_buffer_manager_v1_interface,
-                                                      1,
-                                                      NULL,
-                                                      _single_pixel_buffer_manager_cb_bind);
-   EINA_SAFETY_ON_NULL_GOTO(single_pixel_buffer_mgr->global, fail);
-
-   _single_pixel_buffer_mgr = single_pixel_buffer_mgr;
-
-   return EINA_TRUE;
-
-fail:
-   if (single_pixel_buffer_mgr)
-     free(single_pixel_buffer_mgr);
-
-   return EINA_FALSE;
-}
-
-EINTERN void
-e_single_pixel_buffer_manager_shutdown(void)
-{
-   E_Single_Pixel_Buffer_Manager *single_pixel_buffer_mgr;
-
-   single_pixel_buffer_mgr = _single_pixel_buffer_mgr;
-   if (!single_pixel_buffer_mgr) return;
-
-   wl_global_destroy(single_pixel_buffer_mgr->global);
-   free(single_pixel_buffer_mgr);
-
-   _single_pixel_buffer_mgr = NULL;
-}
-
-EINTERN E_Single_Pixel_Buffer *
-e_single_pixel_buffer_manager_buffer_get(struct wl_resource *resource)
-{
-   EINA_SAFETY_ON_NULL_RETURN_VAL(resource, NULL);
-
-       if (wl_resource_instance_of(resource, &wl_buffer_interface,
-                                   &single_pixel_buffer_implementation))
-               return wl_resource_get_user_data(resource);
-       else
-               return NULL;
-}
diff --git a/src/bin/e_single_pixel_buffer.h b/src/bin/e_single_pixel_buffer.h
deleted file mode 100644 (file)
index c204672..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifdef E_TYPEDEFS
-
-typedef struct _E_Single_Pixel_Buffer_Manager E_Single_Pixel_Buffer_Manager;
-typedef struct _E_Single_Pixel_Buffer E_Single_Pixel_Buffer;
-
-#else
-#ifndef E_SINGLE_PIXEL_BUFFER_H
-#define E_SINGLE_PIXEL_BUFFER_H
-
-struct _E_Single_Pixel_Buffer_Manager
-{
-   struct wl_global *global;
-};
-
-struct _E_Single_Pixel_Buffer
-{
-   struct wl_resource *buffer;
-
-   uint32_t r;
-   uint32_t g;
-   uint32_t b;
-   uint32_t a;
-
-   uint32_t data;
-};
-
-EINTERN Eina_Bool e_single_pixel_buffer_manager_init(void);
-EINTERN void      e_single_pixel_buffer_manager_shutdown(void);
-
-EINTERN E_Single_Pixel_Buffer *e_single_pixel_buffer_manager_buffer_get(struct wl_resource *resource);
-
-#endif // E_SINGLE_PIXEL_BUFFER_H
-#endif