Reland [skjson] Size-constrained input API

Pass an explicit input size instead of requiring a C string.

Thanks to mtklein's clever trick, this has no measurable perf impact.

TBR=
Change-Id: Ic8cb1dc75f4d0814e5b2c80038d1b8d3a7b072ab
Reviewed-on: https://skia-review.googlesource.com/134946
Reviewed-by: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Florin Malita <fmalita@chromium.org>
diff --git a/modules/skjson/src/SkJSONBench.cpp b/modules/skjson/src/SkJSONBench.cpp
index 4be3b97..b9c3664 100644
--- a/modules/skjson/src/SkJSONBench.cpp
+++ b/modules/skjson/src/SkJSONBench.cpp
@@ -25,27 +25,21 @@
     bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; }
 
     void onPerCanvasPreDraw(SkCanvas*) override {
-        if (auto stream = SkStream::MakeFromFile(kBenchFile)) {
-            SkASSERT(stream->hasLength());
-            fCStringData = SkData::MakeUninitialized(stream->getLength() + 1);
-            auto* data8 = reinterpret_cast<uint8_t*>(fCStringData->writable_data());
-            SkAssertResult(stream->read(data8, stream->getLength()) == stream->getLength());
-            data8[stream->getLength()] = '\0';
-
-        } else {
+        fData = SkData::MakeFromFileName(kBenchFile);
+        if (!fData) {
             SkDebugf("!! Could not open bench file: %s\n", kBenchFile);
         }
     }
 
     void onPerCanvasPostDraw(SkCanvas*) override {
-        fCStringData = nullptr;
+        fData = nullptr;
     }
 
     void onDraw(int loops, SkCanvas*) override {
-        if (!fCStringData) return;
+        if (!fData) return;
 
         for (int i = 0; i < loops; i++) {
-            skjson::DOM dom(static_cast<const char*>(fCStringData->data()));
+            skjson::DOM dom(static_cast<const char*>(fData->data()), fData->size());
             if (dom.root().is<skjson::NullValue>()) {
                 SkDebugf("!! Parsing failed.\n");
                 return;
@@ -54,7 +48,7 @@
     }
 
 private:
-    sk_sp<SkData> fCStringData;
+    sk_sp<SkData> fData;
 
     using INHERITED = Benchmark;
 };