From 60411857fc33c325a3f24de3b33da6cc715ae5e6 Mon Sep 17 00:00:00 2001 From: xu Date: Fri, 16 Dec 2022 16:14:25 +0800 Subject: [PATCH] =?UTF-8?q?image=20cache=E4=BC=98=E5=8C=96?= 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 ++++++---- .../render/adapter/rosen_render_context.cpp | 1 - .../components_ng/render/adapter/skia_canvas_image.h | 9 +++++++++ frameworks/core/image/flutter_image_cache.h | 1 + 4 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 a4cfe9a7a70..754441c7270 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 @@ -163,6 +163,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) { @@ -258,8 +261,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); @@ -350,8 +351,9 @@ void ImageProvider::CacheCanvasImage(const RefPtr& canvasImage, con auto skiaCanvasImage = AceType::DynamicCast(canvasImage); CHECK_NULL_VOID(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/rosen_render_context.cpp b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp index a9316e2a7e8..123e9ef2e44 100644 --- a/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp +++ b/frameworks/core/components_ng/render/adapter/rosen_render_context.cpp @@ -281,7 +281,6 @@ void RosenRenderContext::PaintBackground() auto image = DynamicCast(bgImage_); CHECK_NULL_VOID(rsNode_ && bgLoadingCtx_ && image); auto skImage = image->GetCanvasImage(); - CHECK_NULL_VOID(skImage); auto rosenImage = std::make_shared(); rosenImage->SetImage(skImage); 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 421e939fe95..d36ece8e149 100644 --- a/frameworks/core/components_ng/render/adapter/skia_canvas_image.h +++ b/frameworks/core/components_ng/render/adapter/skia_canvas_image.h @@ -97,10 +97,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 + } void ReplaceSkImage(flutter::SkiaGPUObject newSkGpuObjSkImage); int32_t GetWidth() const override; int32_t GetHeight() const override; 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