[M130 Migration][NUI][Rendering] Support ecore_evas sw backend 56/320056/5
authorv-saha <v.saha@samsung.com>
Fri, 21 Feb 2025 08:31:33 +0000 (14:01 +0530)
committerInsoon Kim <is46.kim@samsung.com>
Tue, 25 Feb 2025 23:36:46 +0000 (23:36 +0000)
To support the SW backend, modified to perform  GL related initialization
operation only in the HW backend.

It also resolves the build errors after TBM is enabled.

Reference: https://archive.tizen.org/gerrit/308815

Change-Id: I6fb6bb5d5f1b8dbe8ba1d7f25bf86bb572f08d7b
Signed-off-by: v-saha <v.saha@samsung.com>
components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h
content/browser/web_contents/web_contents_impl.cc
content/browser/web_contents/web_contents_impl.h
tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.cc
tizen_src/chromium_impl/content/browser/renderer_host/rwhv_aura_offscreen_helper_efl.h

index e0353933cd8b7f94741f10a1c04d307dd4df85db..718d6f26b9848d459b8241a72a4d358ed28444e5 100644 (file)
@@ -2733,7 +2733,7 @@ void SkiaOutputSurfaceImplOnGpu::DestroySharedImage(gpu::Mailbox mailbox) {
 }
 
 #if BUILDFLAG(IS_EFL)
-uint32_t SkiaOutputSurfaceImplOnGpu::GetTextureID() {
+size_t SkiaOutputSurfaceImplOnGpu::GetTextureID() {
   if (output_device_)
     return output_device_->GetTextureID();
   return 0;
index 7bd861097541a163ab9097e71948fdb7e433bcd5..ca3e58b24f7c079a120e5c77bceb4de835e0bb81 100644 (file)
@@ -272,7 +272,7 @@ class SkiaOutputSurfaceImplOnGpu
                                    const gfx::ColorSpace& color_space);
   void DestroySharedImage(gpu::Mailbox mailbox);
 #if BUILDFLAG(IS_EFL)
-  uint32_t GetTextureID();
+  size_t GetTextureID();
 #endif
   void SetSharedImagePurgeable(const gpu::Mailbox& mailbox, bool purgeable);
 
index 03f41c13fa1d7aea7b629ab891f5253e89184db3..4be7a2aa76fd61c29c1eb49e8a142a9694ce8722 100644 (file)
@@ -11500,13 +11500,20 @@ void WebContentsImpl::CreateEflMainLayout() {
   elm_layout_file_set(efl_main_layout_, main_edj.AsUTF8Unsafe().c_str(),
                       "main_layout");
 
-  GLSharedContextEfl::Initialize(root_window);
-
 #if BUILDFLAG(IS_TIZEN) && !BUILDFLAG(IS_TIZEN_TV)
   BrowserGpuChannelHostFactory::Start();
 #endif
 
   auto* ee = ecore_evas_ecore_evas_get(evas_object_evas_get(efl_main_layout_));
+  const char* sw_engine = "wayland_shm";
+  if (!strncmp(sw_engine, ecore_evas_engine_name_get(ee), strlen(sw_engine))) {
+    LOG(INFO) << "ecore_evas engine Name : " << ecore_evas_engine_name_get(ee);
+    use_hw_backend_ = false;
+  }
+  if (use_hw_backend_) {
+    GLSharedContextEfl::Initialize(root_window);
+  }
+
   ui::EflScreen::UpdateDisplayInfo(ee);
 }
 
index 5f20fa89470c9cc05f0061b5b03a90c5fd11cd8b..21266fee2d8aea07a32f1928b7ffe0ee44dc3a53 100644 (file)
@@ -251,6 +251,7 @@ class CONTENT_EXPORT WebContentsImpl
   Evas_Object* GetEflMainLayout() const { return efl_main_layout_; }
   void set_ewk_view(void* ewk_view) { ewk_view_ = ewk_view; }
   void* ewk_view() const { return ewk_view_; }
+  bool use_hw_backend() const { return use_hw_backend_; }
 
   void SetWebviewDelegate(WebViewDelegate* delegate) {
     webview_delegate_.reset(delegate);
@@ -2626,6 +2627,7 @@ class CONTENT_EXPORT WebContentsImpl
   bool spatial_navigation_enabled_ = false;
 
   std::unique_ptr<content::WebViewDelegate> webview_delegate_;
+  bool use_hw_backend_ = true;
 #endif
 
 #if defined(TIZEN_VIDEO_HOLE)
index af43b8803bf2f6f30d687b97b41e28c1e3023a79..8a432a8c5543e1c3d771b6973cec8391766e88ee 100644 (file)
@@ -198,12 +198,19 @@ RWHVAuraOffscreenHelperEfl::~RWHVAuraOffscreenHelperEfl() {
 }
 
 void RWHVAuraOffscreenHelperEfl::Initialize() {
-  efl_main_layout_ =
-      static_cast<WebContentsImpl*>(GetWebContents())->GetEflMainLayout();
+  WebContentsImpl* wc = static_cast<WebContentsImpl*>(GetWebContents());
+  efl_main_layout_ = wc->GetEflMainLayout();
+  use_hw_backend_ = wc->use_hw_backend();
   evas_ = evas_object_evas_get(efl_main_layout_);
 
-  InitEvasGL();
-  InitializeProgram();
+  if (use_hw_backend_) {
+    InitEvasGL();
+    InitializeProgram();
+  } else {
+    LOG(INFO) << "use sw backend.";
+    CreateNativeSurface();
+  }
+
   evas_object_event_callback_add(efl_main_layout_, EVAS_CALLBACK_RESIZE,
                                  OnParentViewResize, this);
   evas_object_show(content_image_);
@@ -248,10 +255,18 @@ void RWHVAuraOffscreenHelperEfl::OnParentViewResize(void* data,
 }
 
 bool RWHVAuraOffscreenHelperEfl::ClearCurrent() {
+  if (!use_hw_backend_) {
+    return true;
+  }
+
   return evas_gl_make_current(evas_gl_, 0, 0);
 }
 
 bool RWHVAuraOffscreenHelperEfl::MakeCurrent() {
+  if (!use_hw_backend_) {
+    return true;
+  }
+
   return evas_gl_make_current(evas_gl_, evas_gl_surface_, evas_gl_context_);
 }
 
@@ -516,6 +531,9 @@ gfx::Size RWHVAuraOffscreenHelperEfl::CreateNativeSurface() {
   evas_object_geometry_set(content_image_, x, y, width, height);
   evas_object_geometry_set(content_image_elm_host_, x, y, width, height);
 
+  if (!use_hw_backend_) {
+    return gfx::Size(width, height);
+  }
   if (evas_gl_surface_) {
     evas_object_image_native_surface_set(content_image_, NULL);
     evas_gl_surface_destroy(evas_gl_, evas_gl_surface_);
@@ -524,8 +542,9 @@ gfx::Size RWHVAuraOffscreenHelperEfl::CreateNativeSurface() {
 
   evas_gl_surface_ =
       evas_gl_surface_create(evas_gl_, evas_gl_config_, width, height);
-  if (!evas_gl_surface_)
+  if (!evas_gl_surface_) {
     LOG(FATAL) << "Failed to create evas gl surface";
+  }
 
   Evas_Native_Surface nativeSurface;
   if (evas_gl_native_surface_get(evas_gl_, evas_gl_surface_, &nativeSurface)) {
index 554c39aee123e5e502194b45a00979af5e3604eb..4a6c6f861b36610a31d652feb9cc44d2c5cd69f9 100644 (file)
@@ -168,6 +168,8 @@ class CONTENT_EXPORT RWHVAuraOffscreenHelperEfl
   // we only care about the last one if they piled up - we can only display
   // one anyway.
   SnapshotTask magnifier_snapshot_request_;
+
+  bool use_hw_backend_ = true;
 };
 
 }  // namespace content