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 a4cfe9a7a70e462b895bff74147cb5cdc5fe5112..754441c72701ca609b52dfe7e09a0b472ba03458 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 a9316e2a7e8544c5ea5d2f28b8c708e767c702f5..123e9ef2e44287c9cf72e263ae3a3d84bc9da45d 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 421e939fe9539a1af77d8efb506a64bf132b978f..d36ece8e1493588e30633f83ffc023334c824f47 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 4ce6485de1e18a9098475b9c5eaaab6000b2c79e..808af23c8f329db5ec9e27a726c54f455a5e89e1 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 {