Alternative fix for stale MIP maps on texture export/import.

This change assumes imported textures in SkImages have dirty mip levels
and disables regenerating the MIP levels on export (added in
https://skia.googlesource.com/skia/+/930f939c48af1be6005af12bb6f709ca5da9d118).

This is being done temporarily because it is a simpler change to cherry
pick to earlier branches than
https://skia.googlesource.com/skia/+/930f939c48af1be6005af12bb6f709ca5da9d118

No-Tree-Checks: true
No-Try: true
No-Presubmit: true
Bug: chromium:850617
Change-Id: I7c90da782a0ed9014acd6a54ffdee1a0b34fa00c
Reviewed-On: https://skia-review.googlesource.com/136788
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-By: Greg Daniel <egdaniel@google.com>
Reviewed-on: https://skia-review.googlesource.com/137007
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrDrawingManager.cpp b/src/gpu/GrDrawingManager.cpp
index 2b8c262..2156c3c 100644
--- a/src/gpu/GrDrawingManager.cpp
+++ b/src/gpu/GrDrawingManager.cpp
@@ -382,12 +382,16 @@
     if (auto* rt = surface->asRenderTarget()) {
         gpu->resolveRenderTarget(rt);
     }
+#if 0
+    // This is temporarily is disabled. See comment in SkImage_Gpu.cpp,
+    // new_wrapped_texture_common().
     if (auto* tex = surface->asTexture()) {
         if (tex->texturePriv().mipMapped() == GrMipMapped::kYes &&
             tex->texturePriv().mipMapsAreDirty()) {
             gpu->regenerateMipMapLevels(tex);
         }
     }
+#endif
     return result;
 }
 
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index b13abe1..670b41f 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -316,7 +316,17 @@
     if (!proxy) {
         return nullptr;
     }
-
+#if 1
+    // Temporary fix for crbug.com/850617 that can be cleanly merged back to older branches. Assume
+    // any MIP levels on the incoming texture are dirty. The proper fix is to make them clean on
+    // export. See #if 0'ed out code in GrDrawingManager::prepareSurfaceForExternalIO().
+    SkASSERT(proxy->priv().isInstantiated());
+    if (auto* tex = proxy->priv().peekTexture()) {
+        if (tex->texturePriv().mipMapped() == GrMipMapped::kYes) {
+            proxy->priv().peekTexture()->texturePriv().markMipMapsDirty();
+        }
+    }
+#endif
     return sk_make_sp<SkImage_Gpu>(sk_ref_sp(ctx), kNeedNewImageUniqueID, at, std::move(proxy),
                                    std::move(colorSpace), SkBudgeted::kNo);
 }
diff --git a/tests/GrMipMappedTest.cpp b/tests/GrMipMappedTest.cpp
index 5c30363..e7c9863 100644
--- a/tests/GrMipMappedTest.cpp
+++ b/tests/GrMipMappedTest.cpp
@@ -87,7 +87,13 @@
                 if (isRT) {
                     REPORTER_ASSERT(reporter, texture->texturePriv().mipMapsAreDirty());
                 } else {
+#if 1
+                    // This is temporarily checks that the new image DOES have dirty MIP levels. See
+                    // comment in SkImage_Gpu.cpp, new_wrapped_texture_common().
+                    REPORTER_ASSERT(reporter, texture->texturePriv().mipMapsAreDirty());
+#else
                     REPORTER_ASSERT(reporter, !texture->texturePriv().mipMapsAreDirty());
+#endif
                 }
             } else {
                 REPORTER_ASSERT(reporter, GrMipMapped::kNo == texture->texturePriv().mipMapped());