add /img/n/m endpoint to skiaserve

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

Review URL: https://codereview.chromium.org/1755563003
diff --git a/tools/skiaserve/Request.cpp b/tools/skiaserve/Request.cpp
index 92e18fd..8ffcc36 100644
--- a/tools/skiaserve/Request.cpp
+++ b/tools/skiaserve/Request.cpp
@@ -93,13 +93,13 @@
     return target;
 }
 
-void Request::drawToCanvas(int n) {
+void Request::drawToCanvas(int n, int m) {
     SkCanvas* target = this->getCanvas();
-    fDebugCanvas->drawTo(target, n);
+    fDebugCanvas->drawTo(target, n, m);
 }
 
-SkData* Request::drawToPng(int n) {
-    this->drawToCanvas(n);
+SkData* Request::drawToPng(int n, int m) {
+    this->drawToCanvas(n, m);
     return writeCanvasToPng(this->getCanvas());
 }
 
diff --git a/tools/skiaserve/Request.h b/tools/skiaserve/Request.h
index 60a59a7..0b974e7 100644
--- a/tools/skiaserve/Request.h
+++ b/tools/skiaserve/Request.h
@@ -29,7 +29,8 @@
 struct Request {
     Request(SkString rootUrl); 
 
-    SkData* drawToPng(int n);
+    // draws to skia draw op N, highlighting the Mth batch(-1 means no highlight)
+    SkData* drawToPng(int n, int m = -1);
     SkCanvas* getCanvas();
     SkBitmap* getBitmapFromCanvas(SkCanvas* canvas);
     bool enableGPU(bool enable);
@@ -57,7 +58,7 @@
     
 private:
     SkData* writeCanvasToPng(SkCanvas* canvas);
-    void drawToCanvas(int n);
+    void drawToCanvas(int n, int m = -1);
     SkSurface* createCPUSurface();
     SkSurface* createGPUSurface();
     GrAuditTrail* getAuditTrail(SkCanvas*);
diff --git a/tools/skiaserve/urlhandlers/ImgHandler.cpp b/tools/skiaserve/urlhandlers/ImgHandler.cpp
index 3e390fe..a0e58bc 100644
--- a/tools/skiaserve/urlhandlers/ImgHandler.cpp
+++ b/tools/skiaserve/urlhandlers/ImgHandler.cpp
@@ -25,19 +25,22 @@
     SkTArray<SkString> commands;
     SkStrSplit(url, "/", &commands);
 
-    if (!request->hasPicture() || commands.count() > 2) {
+    if (!request->hasPicture() || commands.count() > 3) {
         return MHD_NO;
     }
 
-    int n;
+    int n, m = -1;
     // /img or /img/N
     if (commands.count() == 1) {
         n = request->fDebugCanvas->getSize() - 1;
+    } else if (commands.count() == 2) {
+        sscanf(commands[1].c_str(), "%d", &n);
     } else {
         sscanf(commands[1].c_str(), "%d", &n);
+        sscanf(commands[2].c_str(), "%d", &m);
     }
 
-    SkAutoTUnref<SkData> data(request->drawToPng(n));
+    SkAutoTUnref<SkData> data(request->drawToPng(n, m));
     return SendData(connection, data, "image/png");
 }