diff --git a/OAT.xml b/OAT.xml
index 9c26bd51bb9fc31d2093fd64f0cb7ff3d8092bed..c7dad724bc8cd23497b6146ce50fd508d4cdb693 100644
--- a/OAT.xml
+++ b/OAT.xml
@@ -87,9 +87,84 @@ Note:If the text contains special characters, please escape them according to th
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/engine/flutter/flow/layers/mask_layer.cc b/engine/flutter/flow/layers/mask_layer.cc
index 837c08c4073e95fbfe345ebade2bc31c2444e3cc..a35b4072c757d4686282bee9aa904e58cb8d22d6 100644
--- a/engine/flutter/flow/layers/mask_layer.cc
+++ b/engine/flutter/flow/layers/mask_layer.cc
@@ -35,16 +35,19 @@ void MaskLayer::Paint(PaintContext& context) const {
mask_filter.setColorFilter(filter);
skCanvas->saveLayer(maskBounds, &mask_filter);
if (isSvgMask_) {
- SkAutoCanvasRestore maskSave(skCanvas, true);
- skCanvas->translate(maskBounds.fLeft + svgX_, maskBounds.fTop + svgY_);
- skCanvas->scale(scaleX_, scaleY_);
- svgDom_->render(skCanvas);
+ SkAutoCanvasRestore maskSave(skCanvas, true);
+ skCanvas->translate(maskBounds.fLeft + svgX_, maskBounds.fTop + svgY_);
+ skCanvas->scale(scaleX_, scaleY_);
+ svgDom_->render(skCanvas);
} else if (isGradientMask_) {
- skCanvas->drawRect(maskBounds, maskPaint_);
+ SkAutoCanvasRestore maskSave(skCanvas, true);
+ skCanvas->translate(maskBounds.fLeft, maskBounds.fTop);
+ SkRect skRect = SkRect::MakeIWH(maskBounds.fRight - maskBounds.fLeft, maskBounds.fBottom - maskBounds.fTop);
+ skCanvas->drawRect(skRect, maskPaint_);
} else if (isPathMask_) {
- SkAutoCanvasRestore maskSave(skCanvas, true);
- skCanvas->translate(maskBounds.fLeft, maskBounds.fTop);
- skCanvas->drawPath(maskPath_, maskPaint_);
+ SkAutoCanvasRestore maskSave(skCanvas, true);
+ skCanvas->translate(maskBounds.fLeft, maskBounds.fTop);
+ skCanvas->drawPath(maskPath_, maskPaint_);
}
// back to mask layer
diff --git a/engine/flutter/flow/ohos_layers/mask_layer.cpp b/engine/flutter/flow/ohos_layers/mask_layer.cpp
index 60ee26257c111b515ae5428f003aad647735cfd7..83a91176976021e11a00a3db3a5e4344022e991d 100644
--- a/engine/flutter/flow/ohos_layers/mask_layer.cpp
+++ b/engine/flutter/flow/ohos_layers/mask_layer.cpp
@@ -41,7 +41,10 @@ void MaskLayer::Paint(const PaintContext& paintContext) const
skCanvas_->scale(scaleX_, scaleY_);
svgDom_->render(skCanvas_);
} else if (isGradientMask_) {
- skCanvas_->drawRect(maskBounds, maskPaint_);
+ SkAutoCanvasRestore maskSave(paintContext.skCanvas, true);
+ skCanvas_->translate(maskBounds.fLeft, maskBounds.fTop);
+ SkRect skRect = SkRect::MakeIWH(maskBounds.fRight - maskBounds.fLeft, maskBounds.fBottom - maskBounds.fTop);
+ skCanvas_->drawRect(skRect, maskPaint_);
} else if (isPathMask_) {
SkAutoCanvasRestore maskSave(paintContext.skCanvas, true);
skCanvas_->translate(maskBounds.fLeft, maskBounds.fTop);
diff --git a/engine/flutter/shell/platform/ohos/ohos_surface_software.cc b/engine/flutter/shell/platform/ohos/ohos_surface_software.cc
index 67ae871a726274ff560c2f099f0b573ca8e0a1f0..694eb0ea4ec8c3d7b150b3abc3725cdf06b00f8f 100644
--- a/engine/flutter/shell/platform/ohos/ohos_surface_software.cc
+++ b/engine/flutter/shell/platform/ohos/ohos_surface_software.cc
@@ -173,7 +173,7 @@ void OhosSurfaceSoftware::SurfaceDrawBuffer(
std::unique_ptr canvas = SkCanvas::MakeRasterDirect(
native_image_info, surfaceBuffer->GetVirAddr(),
- surfaceBuffer->GetSize() / requestConfig.height);
+ surfaceBuffer->GetBufferHandle()->stride);
if (canvas) {
SkBitmap bitmap;