From d549c8a7cd09abec68123d902d43aadd6cd418f4 Mon Sep 17 00:00:00 2001 From: MuHong Byun Date: Wed, 23 Mar 2022 15:00:37 +0900 Subject: [PATCH] [webview_flutter] Apply texture api change Signed-off-by: MuHong Byun --- packages/webview_flutter/CHANGELOG.md | 4 ++++ packages/webview_flutter/README.md | 4 ++-- packages/webview_flutter/pubspec.yaml | 2 +- .../webview_flutter/tizen/src/buffer_pool.cc | 19 ++++++------------- .../webview_flutter/tizen/src/buffer_pool.h | 5 ++--- packages/webview_flutter/tizen/src/webview.cc | 16 ++-------------- packages/webview_flutter/tizen/src/webview.h | 1 - 7 files changed, 17 insertions(+), 34 deletions(-) diff --git a/packages/webview_flutter/CHANGELOG.md b/packages/webview_flutter/CHANGELOG.md index 073c2e02e..fe9712b1f 100644 --- a/packages/webview_flutter/CHANGELOG.md +++ b/packages/webview_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.1 + +* Apply texture api change. + ## 0.4.0 * Support emulator. diff --git a/packages/webview_flutter/README.md b/packages/webview_flutter/README.md index d0b1aa545..62e64a266 100644 --- a/packages/webview_flutter/README.md +++ b/packages/webview_flutter/README.md @@ -24,8 +24,8 @@ This package is not an _endorsed_ implementation of `webview_flutter`. Therefore ```yaml dependencies: - webview_flutter: ^2.3.0 - webview_flutter_tizen: ^0.3.11 + webview_flutter: ^3.0.1 + webview_flutter_tizen: ^0.4.1 ``` ## Example diff --git a/packages/webview_flutter/pubspec.yaml b/packages/webview_flutter/pubspec.yaml index d567f7c04..12252e838 100644 --- a/packages/webview_flutter/pubspec.yaml +++ b/packages/webview_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: webview_flutter_tizen description: Tizen implementation of the webview plugin homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/webview_flutter -version: 0.4.0 +version: 0.4.1 environment: sdk: ">=2.14.0 <3.0.0" diff --git a/packages/webview_flutter/tizen/src/buffer_pool.cc b/packages/webview_flutter/tizen/src/buffer_pool.cc index 198b7ddbc..4ff76f981 100644 --- a/packages/webview_flutter/tizen/src/buffer_pool.cc +++ b/packages/webview_flutter/tizen/src/buffer_pool.cc @@ -69,6 +69,11 @@ void BufferUnit::Reset(int width, int height) { gpu_buffer_->width = width_; gpu_buffer_->height = height_; gpu_buffer_->buffer = tbm_surface_; + gpu_buffer_->release_callback = [](void* release_context) { + BufferUnit* bu = (BufferUnit*)release_context; + bu->UnmarkInUse(); + }; + gpu_buffer_->release_context = this; } BufferPool::BufferPool(int width, int height, int pool_size) : last_index_(0) { @@ -80,16 +85,6 @@ BufferPool::BufferPool(int width, int height, int pool_size) : last_index_(0) { BufferPool::~BufferPool() {} -BufferUnit* BufferPool::Find(tbm_surface_h surface) { - for (int idx = 0; idx < pool_.size(); idx++) { - BufferUnit* buffer = pool_[idx].get(); - if (buffer->Surface() == surface) { - return buffer; - } - } - return nullptr; -} - BufferUnit* BufferPool::GetAvailableBuffer() { std::lock_guard lock(mutex_); for (int idx = 0; idx < pool_.size(); idx++) { @@ -126,9 +121,7 @@ BufferUnit* SingleBufferPool::GetAvailableBuffer() { return pool_[0].get(); } -BufferUnit* SingleBufferPool::Find(tbm_surface_h surface) { - return pool_[0].get(); -} +void SingleBufferPool::Release(BufferUnit* unit) {} #ifndef NDEBUG #include diff --git a/packages/webview_flutter/tizen/src/buffer_pool.h b/packages/webview_flutter/tizen/src/buffer_pool.h index 118a9c237..4a18f2ef0 100644 --- a/packages/webview_flutter/tizen/src/buffer_pool.h +++ b/packages/webview_flutter/tizen/src/buffer_pool.h @@ -42,8 +42,7 @@ class BufferPool { ~BufferPool(); virtual BufferUnit* GetAvailableBuffer(); - virtual BufferUnit* Find(tbm_surface_h surface); - void Release(BufferUnit* unit); + virtual void Release(BufferUnit* unit); void Prepare(int with, int height); protected: @@ -60,7 +59,7 @@ class SingleBufferPool : public BufferPool { ~SingleBufferPool(); virtual BufferUnit* GetAvailableBuffer(); - virtual BufferUnit* Find(tbm_surface_h surface); + virtual void Release(BufferUnit* unit); }; #endif diff --git a/packages/webview_flutter/tizen/src/webview.cc b/packages/webview_flutter/tizen/src/webview.cc index 79e9df8f2..bb884a31f 100644 --- a/packages/webview_flutter/tizen/src/webview.cc +++ b/packages/webview_flutter/tizen/src/webview.cc @@ -182,8 +182,7 @@ WebView::WebView(flutter::PluginRegistrar* registrar, int viewId, texture_variant_ = new flutter::TextureVariant(flutter::GpuBufferTexture( [this](size_t width, size_t height) -> const FlutterDesktopGpuBuffer* { return this->ObtainGpuBuffer(width, height); - }, - [this](void* buffer) -> void { this->DestructBuffer(buffer); })); + })); SetTextureId(texture_registrar_->RegisterTexture(texture_variant_)); InitWebView(); @@ -804,11 +803,10 @@ void WebView::InitWebView() { if (candidate_surface_) { tbm_pool_->Release(candidate_surface_); candidate_surface_ = nullptr; - } else { - texture_registrar_->MarkTextureFrameAvailable(GetTextureId()); } candidate_surface_ = working_surface_; working_surface_ = nullptr; + texture_registrar_->MarkTextureFrameAvailable(GetTextureId()); } }, use_sw_backend_); @@ -1022,13 +1020,3 @@ FlutterDesktopGpuBuffer* WebView::ObtainGpuBuffer(size_t width, size_t height) { candidate_surface_ = nullptr; return rendered_surface_->GpuBuffer(); } - -void WebView::DestructBuffer(void* buffer) { - if (buffer) { - std::lock_guard lock(mutex_); - BufferUnit* unit = tbm_pool_->Find((tbm_surface_h)buffer); - if (unit && unit != rendered_surface_) { - tbm_pool_->Release(unit); - } - } -} diff --git a/packages/webview_flutter/tizen/src/webview.h b/packages/webview_flutter/tizen/src/webview.h index 26a9531c5..257dd127a 100644 --- a/packages/webview_flutter/tizen/src/webview.h +++ b/packages/webview_flutter/tizen/src/webview.h @@ -54,7 +54,6 @@ class WebView : public PlatformView { void ShowPanel(); FlutterDesktopGpuBuffer* ObtainGpuBuffer(size_t width, size_t height); - void DestructBuffer(void* buffer); private: void HandleMethodCall(