Return image address in image info so it can be shown in dropdown.

Note that I don't dereference this pointer, I'm just showing it to the user as it is currently
the only common identifier between the command list and the resource tab.

A longer term fix would be to show the resourse tab's indices in the command list. this is tougher
because it involves replacing UrlDataManager without breaking skiaserve.

Change-Id: Iaa0d60831e96128f19b6358e82b2e89f80444927
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/258800
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Nathaniel Nifong <nifong@google.com>
diff --git a/experimental/wasm-skp-debugger/debugger_bindings.cpp b/experimental/wasm-skp-debugger/debugger_bindings.cpp
index 2ccce3c..0928fa6 100644
--- a/experimental/wasm-skp-debugger/debugger_bindings.cpp
+++ b/experimental/wasm-skp-debugger/debugger_bindings.cpp
@@ -39,14 +39,18 @@
   int height;
   SkColorType colorType;
   SkAlphaType alphaType;
+  // Shown in the textual description of the image, and used as a common identifier between
+  // the resources tab and the command list.
+  // TODO(nifong) make the command list use the resource tab's ids instead of UrlDataManager
+  uintptr_t imageAddress;
 };
 
 SkImageInfo toSkImageInfo(const SimpleImageInfo& sii) {
   return SkImageInfo::Make(sii.width, sii.height, sii.colorType, sii.alphaType);
 }
 
-SimpleImageInfo toSimpleImageInfo(const SkImageInfo& ii) {
-  return (SimpleImageInfo){ii.width(), ii.height(), ii.colorType(), ii.alphaType()};
+SimpleImageInfo toSimpleImageInfo(const SkImageInfo& ii, const SkImage* addr) {
+  return (SimpleImageInfo){ii.width(), ii.height(), ii.colorType(), ii.alphaType(), (uintptr_t)addr};
 }
 
 class SkpDebugPlayer {
@@ -184,7 +188,7 @@
 
     // Get the image info of one of the resource images.
     SimpleImageInfo getImageInfo(int index) {
-      return toSimpleImageInfo(fImages[index]->imageInfo());
+      return toSimpleImageInfo(fImages[index]->imageInfo(), fImages[index].get());
     }
 
   private:
@@ -375,7 +379,8 @@
     .field("width",     &SimpleImageInfo::width)
     .field("height",    &SimpleImageInfo::height)
     .field("colorType", &SimpleImageInfo::colorType)
-    .field("alphaType", &SimpleImageInfo::alphaType);
+    .field("alphaType", &SimpleImageInfo::alphaType)
+    .field("imageAddress", &SimpleImageInfo::imageAddress);
   constant("TRANSPARENT", (JSColor) SK_ColorTRANSPARENT);
   function("_getRasterDirectSurface", optional_override([](const SimpleImageInfo ii,
                                                            uintptr_t /* uint8_t*  */ pPtr,
diff --git a/tools/debugger/DrawCommand.cpp b/tools/debugger/DrawCommand.cpp
index 44c4288..43366a3 100644
--- a/tools/debugger/DrawCommand.cpp
+++ b/tools/debugger/DrawCommand.cpp
@@ -88,6 +88,7 @@
 #define DEBUGCANVAS_ATTRIBUTE_COLORFILTER "colorfilter"
 #define DEBUGCANVAS_ATTRIBUTE_IMAGEFILTER "imagefilter"
 #define DEBUGCANVAS_ATTRIBUTE_IMAGE "image"
+#define DEBUGCANVAS_ATTRIBUTE_IMAGE_ADDRESS "imageAddress"
 #define DEBUGCANVAS_ATTRIBUTE_BITMAP "bitmap"
 #define DEBUGCANVAS_ATTRIBUTE_SRC "src"
 #define DEBUGCANVAS_ATTRIBUTE_DST "dst"
@@ -1318,6 +1319,9 @@
     flatten(*fImage, writer, urlDataManager);
     writer.endObject();  // image
 
+    writer.appendName(DEBUGCANVAS_ATTRIBUTE_IMAGE_ADDRESS);
+    writer.appendU64((uint64_t)fImage.get());
+
     writer.appendName(DEBUGCANVAS_ATTRIBUTE_COORDS);
     MakeJsonPoint(writer, fLeft, fTop);
     if (fPaint.isValid()) {
@@ -1374,6 +1378,9 @@
     flatten(*fImage, writer, urlDataManager);
     writer.endObject();  // image
 
+    writer.appendName(DEBUGCANVAS_ATTRIBUTE_IMAGE_ADDRESS);
+    writer.appendU64((uint64_t)fImage.get());
+
     writer.appendName(DEBUGCANVAS_ATTRIBUTE_LATTICE);
     MakeJsonLattice(writer, fLattice);
     writer.appendName(DEBUGCANVAS_ATTRIBUTE_DST);
@@ -1420,6 +1427,9 @@
     flatten(*fImage, writer, urlDataManager);
     writer.endObject();  // image
 
+    writer.appendName(DEBUGCANVAS_ATTRIBUTE_IMAGE_ADDRESS);
+    writer.appendU64((uint64_t)fImage.get());
+
     if (fSrc.isValid()) {
         writer.appendName(DEBUGCANVAS_ATTRIBUTE_SRC);
         MakeJsonRect(writer, *fSrc);
@@ -1468,6 +1478,9 @@
     flatten(*fImage, writer, urlDataManager);
     writer.endObject();  // image
 
+    writer.appendName(DEBUGCANVAS_ATTRIBUTE_IMAGE_ADDRESS);
+    writer.appendU64((uint64_t)fImage.get());
+
     writer.appendName(DEBUGCANVAS_ATTRIBUTE_CENTER);
     MakeJsonIRect(writer, fCenter);
     writer.appendName(DEBUGCANVAS_ATTRIBUTE_DST);