DM: allow SKPs to be smaller than 1000x1000

This sniffs the .skp dimensions and intersects them with our 1000x1000 viewport.

This fixes things like desk_carsvg.skp, which is only 902 pixels tall.  In 565 now,
the remaining 98 pixels draw as black, which looks funny and is confusing to triage.

No apparent affect on DM memory usage.  (We're about to map the file anyway.)

BUG=skia:

Review URL: https://codereview.chromium.org/986103002
diff --git a/dm/DMSrcSink.cpp b/dm/DMSrcSink.cpp
index 22dd567..6f6664f 100644
--- a/dm/DMSrcSink.cpp
+++ b/dm/DMSrcSink.cpp
@@ -7,6 +7,7 @@
 #include "SkMultiPictureDraw.h"
 #include "SkNullCanvas.h"
 #include "SkOSFile.h"
+#include "SkPictureData.h"
 #include "SkPictureRecorder.h"
 #include "SkRandom.h"
 #include "SkSVGCanvas.h"
@@ -189,8 +190,19 @@
 }
 
 SkISize SKPSrc::size() const {
-    // This may be unnecessarily large.
-    return kSKPViewport.roundOut().size();
+    SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str()));
+    if (!stream) {
+        return SkISize::Make(0,0);
+    }
+    SkPictInfo info;
+    if (!SkPicture::InternalOnly_StreamIsSKP(stream, &info)) {
+        return SkISize::Make(0,0);
+    }
+    SkRect viewport = kSKPViewport;
+    if (!viewport.intersect(info.fCullRect)) {
+        return SkISize::Make(0,0);
+    }
+    return viewport.roundOut().size();
 }
 
 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); }