make an image from a mutable bitmap

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2199813002

Review-Url: https://codereview.chromium.org/2199813002
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index a8ef21d..df82c3f 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -94,7 +94,7 @@
     bool isOpaque() const override;
     bool onAsLegacyBitmap(SkBitmap*, LegacyBitmapMode) const override;
 
-    SkImage_Raster(const SkBitmap& bm)
+    SkImage_Raster(const SkBitmap& bm, bool bitmapMayBeMutable = false)
         : INHERITED(bm.width(), bm.height(),
                     is_not_subset(bm) ? bm.getGenerationID()
                                       : (uint32_t)kNeedNewImageUniqueID)
@@ -105,7 +105,7 @@
             // like a lazy decode or imagegenerator. PreLocked means it is flat pixels already.
             fBitmap.lockPixels();
         }
-        SkASSERT(fBitmap.isImmutable());
+        SkASSERT(bitmapMayBeMutable || fBitmap.isImmutable());
     }
 
     bool onIsLazyGenerated() const override {
@@ -264,7 +264,9 @@
     }
 
     sk_sp<SkImage> image;
-    if (kYes_ForceCopyMode == forceCopy || !bm.isImmutable()) {
+    if (kYes_ForceCopyMode == forceCopy ||
+        (!bm.isImmutable() && kNever_ForceCopyMode != forceCopy))
+    {
         SkBitmap tmp(bm);
         tmp.lockPixels();
         SkPixmap pmap;
@@ -272,7 +274,7 @@
             image = SkImage::MakeRasterCopy(pmap);
         }
     } else {
-        image = sk_make_sp<SkImage_Raster>(bm);
+        image = sk_make_sp<SkImage_Raster>(bm, kNever_ForceCopyMode == forceCopy);
     }
     return image;
 }