rebaseline_server: use just skpdiff, not Python Image Library

BUG=skia:2414
R=djsollen@google.com, borenet@google.com

Author: epoger@google.com

Review URL: https://codereview.chromium.org/325413003
diff --git a/tools/skpdiff/skpdiff_main.cpp b/tools/skpdiff/skpdiff_main.cpp
index b1bf917..3d1bcda 100644
--- a/tools/skpdiff/skpdiff_main.cpp
+++ b/tools/skpdiff/skpdiff_main.cpp
@@ -5,6 +5,11 @@
  * found in the LICENSE file.
  */
 
+// TODO(djsollen): Rename this whole package (perhaps to "SkMultiDiffer").
+// It's not just for "pdiff" (perceptual diffs)--it's a harness that allows
+// the execution of an arbitrary set of difference algorithms.
+// See http://skbug.com/2711 ('rename skpdiff')
+
 #if SK_SUPPORT_OPENCL
 
 #define __NO_STD_VECTOR // Uses cl::vectpr instead of std::vectpr
@@ -37,10 +42,12 @@
 DEFINE_string2(differs, d, "", "The names of the differs to use or all of them by default");
 DEFINE_string2(folders, f, "", "Compare two folders with identical subfile names: <baseline folder> <test folder>");
 DEFINE_string2(patterns, p, "", "Use two patterns to compare images: <baseline> <test>");
-DEFINE_string2(output, o, "", "Writes the output of these diffs to output: <output>");
-DEFINE_string(alphaDir, "", "Writes the alpha mask of these diffs to output: <output>");
+DEFINE_string2(output, o, "", "Writes a JSON summary of these diffs to file: <filepath>");
+DEFINE_string(alphaDir, "", "If the differ can generate an alpha mask, write it into directory: <dirpath>");
+DEFINE_string(rgbDiffDir, "", "If the differ can generate an image showing the RGB diff at each pixel, write it into directory: <dirpath>");
+DEFINE_string(whiteDiffDir, "", "If the differ can generate an image showing every changed pixel in white, write it into directory: <dirpath>");
 DEFINE_bool(jsonp, true, "Output JSON with padding");
-DEFINE_string(csv, "", "Writes the output of these diffs to a csv file");
+DEFINE_string(csv, "", "Writes the output of these diffs to a csv file: <filepath>");
 DEFINE_int32(threads, -1, "run N threads in parallel [default is derived from CPUs available]");
 
 #if SK_SUPPORT_OPENCL
@@ -193,12 +200,30 @@
             return 1;
         }
     }
+    if (!FLAGS_rgbDiffDir.isEmpty()) {
+        if (1 != FLAGS_rgbDiffDir.count()) {
+            SkDebugf("rgbDiffDir flag expects one argument: <directory>\n");
+            return 1;
+        }
+    }
+    if (!FLAGS_whiteDiffDir.isEmpty()) {
+        if (1 != FLAGS_whiteDiffDir.count()) {
+            SkDebugf("whiteDiffDir flag expects one argument: <directory>\n");
+            return 1;
+        }
+    }
 
     SkDiffContext ctx;
     ctx.setDiffers(chosenDiffers);
 
     if (!FLAGS_alphaDir.isEmpty()) {
-        ctx.setDifferenceDir(SkString(FLAGS_alphaDir[0]));
+        ctx.setAlphaMaskDir(SkString(FLAGS_alphaDir[0]));
+    }
+    if (!FLAGS_rgbDiffDir.isEmpty()) {
+        ctx.setRgbDiffDir(SkString(FLAGS_rgbDiffDir[0]));
+    }
+    if (!FLAGS_whiteDiffDir.isEmpty()) {
+        ctx.setWhiteDiffDir(SkString(FLAGS_whiteDiffDir[0]));
     }
 
     if (FLAGS_threads >= 0) {