From fca9e06684ab469072de9431c313e8bba68267e6 Mon Sep 17 00:00:00 2001 From: xu Date: Fri, 2 Dec 2022 11:15:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dcache=E4=BC=9A=E4=B8=A2?= =?UTF-8?q?=E5=A4=B1uniqueid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: xu --- .../image_provider/adapter/flutter_image_provider.cpp | 10 ++++++---- .../components_ng/render/adapter/skia_canvas_image.h | 10 +++++++++- frameworks/core/image/flutter_image_cache.h | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/frameworks/core/components_ng/image_provider/adapter/flutter_image_provider.cpp b/frameworks/core/components_ng/image_provider/adapter/flutter_image_provider.cpp index f5352a4d4b0..0654a401fdf 100644 --- a/frameworks/core/components_ng/image_provider/adapter/flutter_image_provider.cpp +++ b/frameworks/core/components_ng/image_provider/adapter/flutter_image_provider.cpp @@ -167,6 +167,9 @@ bool ImageProvider::QueryCanvasImageFromCache( #else auto flutterCanvasImage = cacheImage->imagePtr; auto canvasImage = CanvasImage::Create(&flutterCanvasImage); + auto skiaCanvasImage = DynamicCast(canvasImage); + CHECK_NULL_RETURN(skiaCanvasImage, false); + skiaCanvasImage->SetUniqueID(cacheImage->uniqueId); #endif LOGD("[ImageCache][CanvasImage] succeed find canvas image from cache: %{public}s", key.c_str()); if (canvasImage) { @@ -271,8 +274,6 @@ void ImageProvider::UploadImageToGPUForRender(const RefPtr& canvasI std::function)>&& callback, const RefPtr& renderTaskHolder, const std::string& key, const SizeF& resizeTarget, const RefPtr& data, bool syncLoad) { - callback(canvasImage); - return; CHECK_NULL_VOID(renderTaskHolder); auto flutterRenderTaskHolder = DynamicCast(renderTaskHolder); CHECK_NULL_VOID(flutterRenderTaskHolder); @@ -367,8 +368,9 @@ void ImageProvider::CacheCanvasImage(const RefPtr& canvasImage, con auto skiaCanvasImage = AceType::DynamicCast(canvasImage); CHECK_NULL_VOID_NOLOG(skiaCanvasImage); LOGD("[ImageCache][CanvasImage] succeed caching image: %{public}s", key.c_str()); - pipelineCtx->GetImageCache()->CacheImage( - key, std::make_shared(skiaCanvasImage->GetFlutterCanvasImage())); + auto cached = std::make_shared(skiaCanvasImage->GetFlutterCanvasImage()); + cached->uniqueId = skiaCanvasImage->GetUniqueID(); + pipelineCtx->GetImageCache()->CacheImage(key, cached); #endif } diff --git a/frameworks/core/components_ng/render/adapter/skia_canvas_image.h b/frameworks/core/components_ng/render/adapter/skia_canvas_image.h index a58f06fdb91..fd1704cadbf 100644 --- a/frameworks/core/components_ng/render/adapter/skia_canvas_image.h +++ b/frameworks/core/components_ng/render/adapter/skia_canvas_image.h @@ -87,11 +87,19 @@ public: virtual uint32_t GetUniqueID() const { #ifndef NG_BUILD + if (image_ && image_->image()) { + return image_->image()->uniqueID(); + } return uniqueId_; #endif return 0; } - + virtual void SetUniqueID(uint32_t id) + { +#ifndef NG_BUILD + uniqueId_ = id; +#endif + } #ifndef NG_BUILD virtual fml::RefPtr GetFlutterCanvasImage() const { diff --git a/frameworks/core/image/flutter_image_cache.h b/frameworks/core/image/flutter_image_cache.h index 4ce6485de1e..808af23c8f3 100644 --- a/frameworks/core/image/flutter_image_cache.h +++ b/frameworks/core/image/flutter_image_cache.h @@ -36,6 +36,7 @@ struct CachedImage { explicit CachedImage(const fml::RefPtr& image) : imagePtr(image) {} fml::RefPtr imagePtr; #endif + uint32_t uniqueId = 0; }; struct SkiaCachedImageData : public CachedImageData { -- Gitee