images with offset bitmap don't share genid

BUG=skia:5096
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1813793002

Review URL: https://codereview.chromium.org/1813793002
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 83daab7..892183a 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -20,6 +20,14 @@
 #include "SkGrPriv.h"
 #endif
 
+// fixes https://bug.skia.org/5096
+static bool is_not_subset(const SkBitmap& bm) {
+    SkASSERT(bm.pixelRef());
+    SkISize dim = bm.pixelRef()->info().dimensions();
+    SkASSERT(dim != bm.dimensions() || bm.pixelRefOrigin().isZero());
+    return dim == bm.dimensions();
+}
+
 class SkImage_Raster : public SkImage_Base {
 public:
     static bool ValidArgs(const Info& info, size_t rowBytes, bool hasColorTable,
@@ -82,7 +90,9 @@
     bool onAsLegacyBitmap(SkBitmap*, LegacyBitmapMode) const override;
 
     SkImage_Raster(const SkBitmap& bm)
-        : INHERITED(bm.width(), bm.height(), bm.getGenerationID())
+        : INHERITED(bm.width(), bm.height(),
+                    is_not_subset(bm) ? bm.getGenerationID()
+                                      : (uint32_t)kNeedNewImageUniqueID)
         , fBitmap(bm)
     {
         if (bm.pixelRef()->isPreLocked()) {