add pipecanvas

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

Review-Url: https://codereview.chromium.org/2201323003
diff --git a/dm/DMSrcSink.h b/dm/DMSrcSink.h
index 0e11633..dfc4955 100644
--- a/dm/DMSrcSink.h
+++ b/dm/DMSrcSink.h
@@ -333,6 +333,15 @@
     SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
 };
 
+class PipeSink : public Sink {
+public:
+    PipeSink();
+    
+    Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+    const char* fileExtension() const override { return "skpipe"; }
+    SinkFlags flags() const override { return SinkFlags{ SinkFlags::kVector, SinkFlags::kDirect }; }
+};
+
 class RasterSink : public Sink {
 public:
     explicit RasterSink(SkColorType, sk_sp<SkColorSpace> = nullptr);
@@ -408,6 +417,12 @@
     Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
 };
 
+class ViaPipe : public Via {
+public:
+    explicit ViaPipe(Sink* sink) : Via(sink) {}
+    Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override;
+};
+
 class ViaDefer : public Via {
 public:
     explicit ViaDefer(Sink* sink) : Via(sink) {}