explicitly bump legacy genID on gpu surface

Previous attempt to "test" getTextureHandle was giving false-positive because we had an active image-snapshot, which was incidentally also triggering a new genID.

I think this CL will also enable this change: https://codereview.chromium.org/1222243002/

BUG=skia:
TBR=bsalomon@google.com
NOTREECHECKS=True

Review URL: https://codereview.chromium.org/1208993008
diff --git a/src/image/SkSurface_Gpu.cpp b/src/image/SkSurface_Gpu.cpp
index 70866d3..3a306ad 100644
--- a/src/image/SkSurface_Gpu.cpp
+++ b/src/image/SkSurface_Gpu.cpp
@@ -35,6 +35,8 @@
         case kDiscardWrite_TextureHandleAccess:
             // for now we don't special-case on Discard, but we may in the future.
             this->notifyContentWillChange(kRetain_ContentChangeMode);
+            // legacy: need to dirty the bitmap's genID in our device (curse it)
+            fDevice->fLegacyBitmap.notifyPixelsChanged();
             break;
     }
     rt->prepareForExternalIO();
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 43ce203..d78498f 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -260,34 +260,49 @@
     return device->accessBitmap(false).getGenerationID();
 }
 
+/*
+ *  Test legacy behavor of bumping the surface's device's bitmap's genID when we access its
+ *  texture handle for writing.
+ *
+ *  Note: this needs to be tested separately from checking newImageSnapshot, as calling that
+ *  can also incidentally bump the genID (when a new backing surface is created).
+ */
+static void test_texture_handle_genID(skiatest::Reporter* reporter, SkSurface* surf) {
+    const uint32_t gen0 = get_legacy_gen_id(surf);
+    surf->getTextureHandle(SkSurface::kFlushRead_TextureHandleAccess);
+    const uint32_t gen1 = get_legacy_gen_id(surf);
+    REPORTER_ASSERT(reporter, gen0 == gen1);
+
+    surf->getTextureHandle(SkSurface::kFlushWrite_TextureHandleAccess);
+    const uint32_t gen2 = get_legacy_gen_id(surf);
+    REPORTER_ASSERT(reporter, gen0 != gen2);
+
+    surf->getTextureHandle(SkSurface::kDiscardWrite_TextureHandleAccess);
+    const uint32_t gen3 = get_legacy_gen_id(surf);
+    REPORTER_ASSERT(reporter, gen0 != gen3);
+    REPORTER_ASSERT(reporter, gen2 != gen3);
+}
+
 static void test_texture_handle(skiatest::Reporter* reporter, SkSurface* surf) {
     SkAutoTUnref<SkImage> image0(surf->newImageSnapshot());
-    const uint32_t genID0 = get_legacy_gen_id(surf);
     GrBackendObject obj = surf->getTextureHandle(SkSurface::kFlushRead_TextureHandleAccess);
     REPORTER_ASSERT(reporter, obj != 0);
     SkAutoTUnref<SkImage> image1(surf->newImageSnapshot());
-    const uint32_t genID1 = get_legacy_gen_id(surf);
     // just read access should not affect the snapshot
     REPORTER_ASSERT(reporter, image0->uniqueID() == image1->uniqueID());
-    REPORTER_ASSERT(reporter, genID0 == genID1);
 
     obj = surf->getTextureHandle(SkSurface::kFlushWrite_TextureHandleAccess);
     REPORTER_ASSERT(reporter, obj != 0);
     SkAutoTUnref<SkImage> image2(surf->newImageSnapshot());
-    const uint32_t genID2 = get_legacy_gen_id(surf);
     // expect a new image, since we claimed we would write
     REPORTER_ASSERT(reporter, image0->uniqueID() != image2->uniqueID());
-    REPORTER_ASSERT(reporter, genID0 != genID2);
 
     obj = surf->getTextureHandle(SkSurface::kDiscardWrite_TextureHandleAccess);
     REPORTER_ASSERT(reporter, obj != 0);
     SkAutoTUnref<SkImage> image3(surf->newImageSnapshot());
-    const uint32_t genID3 = get_legacy_gen_id(surf);
     // expect a new(er) image, since we claimed we would write
     REPORTER_ASSERT(reporter, image0->uniqueID() != image3->uniqueID());
     REPORTER_ASSERT(reporter, image2->uniqueID() != image3->uniqueID());
-    REPORTER_ASSERT(reporter, genID0 != genID3);
-    REPORTER_ASSERT(reporter, genID2 != genID3);
 }
 
 static SkImage* create_image(skiatest::Reporter* reporter,
@@ -317,6 +332,7 @@
                 SkSurface::NewRenderTarget(context, SkSurface::kNo_Budgeted, info, 0));
             surf->getCanvas()->clear(color);
             // test our backing texture while were here...
+            test_texture_handle_genID(reporter, surf);
             test_texture_handle(reporter, surf);
             // redraw so our returned image looks as expected.
             surf->getCanvas()->clear(color);