SkMultiPictureDocument & SkMultiPictureDocumentReader

also, a new DM::Src.

motivation: To be used to test the printing pipeline in Chromium.

BUG=skia:5370

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2023593002

Review-Url: https://codereview.chromium.org/2023593002
diff --git a/dm/DM.cpp b/dm/DM.cpp
index 56c3b66..c4e7d15 100644
--- a/dm/DM.cpp
+++ b/dm/DM.cpp
@@ -72,6 +72,8 @@
 DEFINE_int32(shard,  0, "Which shard do I run?");
 DEFINE_bool(simpleCodec, false, "Only decode images to native scale");
 
+DEFINE_string(mskps, "", "Directory to read mskps from, or a single mskp file.");
+
 using namespace DM;
 using sk_gpu_test::GrContextFactory;
 using sk_gpu_test::GLTestContext;
@@ -702,6 +704,19 @@
         }
     }
 
+    for (int i = 0; i < FLAGS_mskps.count(); i++) {
+        const char* path = FLAGS_mskps[i];
+        if (sk_isdir(path)) {
+            SkOSFile::Iter it(path, "mskp");
+            for (SkString file; it.next(&file);) {
+                push_src("mskp", "",
+                         new MSKPSrc(SkOSPath::Join(path, file.c_str())));
+            }
+        } else {
+            push_src("mskp", "", new MSKPSrc(path));
+        }
+    }
+
     SkTArray<SkString> images;
     if (!CollectImages(FLAGS_images, &images)) {
         return false;