Handle getMemoryBase returning NULL in WriteTask.
authorbungeman <bungeman@google.com>
Thu, 2 Oct 2014 20:39:00 +0000 (13:39 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 2 Oct 2014 20:39:00 +0000 (13:39 -0700)
DM::WriteTask::fData was changed from a data to a stream in
"SkData to SkStreamAsset to avoid unneeded copying"
https://skia.googlesource.com/skia/+/a4c6094177ebde18c706cbcfbd2013d0a088e0ee
However, DM::WriteTask::draw was not updated to handle this,
resulting in segfaults when trying to write out PDF files.

Review URL: https://codereview.chromium.org/627473002

dm/DMWriteTask.cpp

index 08feb98..7d0df94 100644 (file)
@@ -64,11 +64,9 @@ void WriteTask::makeDirOrFail(SkString dir) {
     }
 }
 
-static SkString get_md5(const void* ptr, size_t len) {
-    SkMD5 hasher;
-    hasher.write(ptr, len);
+static SkString get_md5_string(SkMD5* hasher) {
     SkMD5::Digest digest;
-    hasher.finish(digest);
+    hasher->finish(digest);
 
     SkString md5;
     for (int i = 0; i < 16; i++) {
@@ -77,6 +75,18 @@ static SkString get_md5(const void* ptr, size_t len) {
     return md5;
 }
 
+static SkString get_md5(const void* ptr, size_t len) {
+    SkMD5 hasher;
+    hasher.write(ptr, len);
+    return get_md5_string(&hasher);
+}
+
+static SkString get_md5(SkStreamAsset* stream) {
+    SkMD5 hasher;
+    hasher.writeStream(stream, stream->getLength());
+    return get_md5_string(&hasher);
+}
+
 struct JsonData {
     SkString name;            // E.g. "ninepatch-stretch", "desk-gws_skp"
     SkString config;          //      "gpu", "8888"
@@ -91,7 +101,7 @@ void WriteTask::draw() {
     SkString md5;
     {
         SkAutoLockPixels lock(fBitmap);
-        md5 = fData ? get_md5(fData->getMemoryBase(), fData->getLength())
+        md5 = fData ? get_md5(fData)
                     : get_md5(fBitmap.getPixels(), fBitmap.getSize());
     }