diff options
Diffstat (limited to 'modules/skjson/src/SkJSONBench.cpp')
-rw-r--r-- | modules/skjson/src/SkJSONBench.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/modules/skjson/src/SkJSONBench.cpp b/modules/skjson/src/SkJSONBench.cpp index b9c3664306..4be3b972ab 100644 --- a/modules/skjson/src/SkJSONBench.cpp +++ b/modules/skjson/src/SkJSONBench.cpp @@ -25,21 +25,27 @@ protected: bool isSuitableFor(Backend backend) override { return backend == kNonRendering_Backend; } void onPerCanvasPreDraw(SkCanvas*) override { - fData = SkData::MakeFromFileName(kBenchFile); - if (!fData) { + 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 { SkDebugf("!! Could not open bench file: %s\n", kBenchFile); } } void onPerCanvasPostDraw(SkCanvas*) override { - fData = nullptr; + fCStringData = nullptr; } void onDraw(int loops, SkCanvas*) override { - if (!fData) return; + if (!fCStringData) return; for (int i = 0; i < loops; i++) { - skjson::DOM dom(static_cast<const char*>(fData->data()), fData->size()); + skjson::DOM dom(static_cast<const char*>(fCStringData->data())); if (dom.root().is<skjson::NullValue>()) { SkDebugf("!! Parsing failed.\n"); return; @@ -48,7 +54,7 @@ protected: } private: - sk_sp<SkData> fData; + sk_sp<SkData> fCStringData; using INHERITED = Benchmark; }; |