add .svg sources to fm

Change-Id: Ic364059cb277773a5d5f8011be2b68b757e889f2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/204280
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/tools/fm/fm.cpp b/tools/fm/fm.cpp
index 884f60b..af53936 100644
--- a/tools/fm/fm.cpp
+++ b/tools/fm/fm.cpp
@@ -19,6 +19,7 @@
 #include "SkPDFDocument.h"
 #include "SkPicture.h"
 #include "SkPictureRecorder.h"
+#include "SkSVGDOM.h"
 #include "ToolUtils.h"
 #include "gm.h"
 #include <chrono>
@@ -153,6 +154,17 @@
     };
 }
 
+static Source svg_source(SkString name, sk_sp<SkSVGDOM> svg) {
+    return {
+        name,
+        svg->containerSize().isEmpty() ? SkISize{1000,1000}
+                                       : svg->containerSize().toCeil(),
+        [svg](SkCanvas* canvas) { svg->render(canvas); },
+        [](GrContextOptions*) {},
+    };
+}
+
+
 static sk_sp<SkImage> draw_with_cpu(std::function<void(SkCanvas*)> draw,
                                     SkImageInfo info) {
     if (sk_sp<SkSurface> surface = SkSurface::MakeRaster(info)) {
@@ -323,6 +335,10 @@
             if (std::shared_ptr<SkCodec> codec = SkCodec::MakeFromData(blob)) {
                 sources.push_back(codec_source(name, codec));
             }
+            SkMemoryStream stream{blob};
+            if (sk_sp<SkSVGDOM> svg = SkSVGDOM::MakeFromStream(stream)) {
+                sources.push_back(svg_source(name, svg));
+            }
         }
     }
     if (sources.empty()) {