| OLD | NEW |
| 1 #include "DMWriteTask.h" | 1 #include "DMWriteTask.h" |
| 2 | 2 |
| 3 #include "DMUtil.h" | 3 #include "DMUtil.h" |
| 4 #include "SkColorPriv.h" | 4 #include "SkColorPriv.h" |
| 5 #include "SkCommonFlags.h" | 5 #include "SkCommonFlags.h" |
| 6 #include "SkData.h" | 6 #include "SkData.h" |
| 7 #include "SkImageEncoder.h" | 7 #include "SkImageEncoder.h" |
| 8 #include "SkMD5.h" | 8 #include "SkMD5.h" |
| 9 #include "SkMallocPixelRef.h" | 9 #include "SkMallocPixelRef.h" |
| 10 #include "SkOSFile.h" | 10 #include "SkOSFile.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 return consumed; | 29 return consumed; |
| 30 } | 30 } |
| 31 | 31 |
| 32 inline static SkString find_base_name(const Task& parent, SkTArray<SkString>* su
ffixList) { | 32 inline static SkString find_base_name(const Task& parent, SkTArray<SkString>* su
ffixList) { |
| 33 const int suffixes = parent.depth() + 1; | 33 const int suffixes = parent.depth() + 1; |
| 34 const SkString& name = parent.name(); | 34 const SkString& name = parent.name(); |
| 35 const int totalSuffixLength = split_suffixes(suffixes, name.c_str(), suffixL
ist); | 35 const int totalSuffixLength = split_suffixes(suffixes, name.c_str(), suffixL
ist); |
| 36 return SkString(name.c_str(), name.size() - totalSuffixLength); | 36 return SkString(name.c_str(), name.size() - totalSuffixLength); |
| 37 } | 37 } |
| 38 | 38 |
| 39 struct JsonData { | 39 WriteTask::WriteTask(const Task& parent, const char* sourceType, SkBitmap bitmap
) |
| 40 SkString name; | |
| 41 SkString md5; // In ASCII, so 32 bytes long. | |
| 42 }; | |
| 43 SkTArray<JsonData> gJsonData; | |
| 44 SK_DECLARE_STATIC_MUTEX(gJsonDataLock); | |
| 45 | |
| 46 WriteTask::WriteTask(const Task& parent, SkBitmap bitmap) | |
| 47 : CpuTask(parent) | 40 : CpuTask(parent) |
| 48 , fFullName(parent.name()) | |
| 49 , fBaseName(find_base_name(parent, &fSuffixes)) | 41 , fBaseName(find_base_name(parent, &fSuffixes)) |
| 42 , fSourceType(sourceType) |
| 50 , fBitmap(bitmap) | 43 , fBitmap(bitmap) |
| 51 , fData(NULL) | 44 , fData(NULL) |
| 52 , fExtension(".png") { | 45 , fExtension(".png") { |
| 53 } | 46 } |
| 54 | 47 |
| 55 WriteTask::WriteTask(const Task& parent, SkStreamAsset *data, const char* ext) | 48 WriteTask::WriteTask(const Task& parent, |
| 49 const char* sourceType, |
| 50 SkStreamAsset *data, |
| 51 const char* ext) |
| 56 : CpuTask(parent) | 52 : CpuTask(parent) |
| 57 , fFullName(parent.name()) | |
| 58 , fBaseName(find_base_name(parent, &fSuffixes)) | 53 , fBaseName(find_base_name(parent, &fSuffixes)) |
| 54 , fSourceType(sourceType) |
| 59 , fData(data) | 55 , fData(data) |
| 60 , fExtension(ext) { | 56 , fExtension(ext) { |
| 61 SkASSERT(fData.get()); | 57 SkASSERT(fData.get()); |
| 62 SkASSERT(fData->unique()); | 58 SkASSERT(fData->unique()); |
| 63 } | 59 } |
| 64 | 60 |
| 65 void WriteTask::makeDirOrFail(SkString dir) { | 61 void WriteTask::makeDirOrFail(SkString dir) { |
| 66 if (!sk_mkdir(dir.c_str())) { | 62 if (!sk_mkdir(dir.c_str())) { |
| 67 this->fail(); | 63 this->fail(); |
| 68 } | 64 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 83 SkMD5::Digest digest; | 79 SkMD5::Digest digest; |
| 84 hasher.finish(digest); | 80 hasher.finish(digest); |
| 85 | 81 |
| 86 SkString md5; | 82 SkString md5; |
| 87 for (int i = 0; i < 16; i++) { | 83 for (int i = 0; i < 16; i++) { |
| 88 md5.appendf("%02x", digest.data[i]); | 84 md5.appendf("%02x", digest.data[i]); |
| 89 } | 85 } |
| 90 return md5; | 86 return md5; |
| 91 } | 87 } |
| 92 | 88 |
| 89 struct JsonData { |
| 90 SkString name; // E.g. "ninepatch-stretch", "desk-gws_skp" |
| 91 SkString config; // "gpu", "8888" |
| 92 SkString sourceType; // "GM", "SKP" |
| 93 SkString md5; // In ASCII, so 32 bytes long. |
| 94 }; |
| 95 SkTArray<JsonData> gJsonData; |
| 96 SK_DECLARE_STATIC_MUTEX(gJsonDataLock); |
| 97 |
| 93 void WriteTask::draw() { | 98 void WriteTask::draw() { |
| 94 if (!fData.get()) { | 99 if (!fData.get()) { |
| 95 fData.reset(encode_to_png(fBitmap)); | 100 fData.reset(encode_to_png(fBitmap)); |
| 96 if (!fData.get()) { | 101 if (!fData.get()) { |
| 97 this->fail("Can't encode to PNG."); | 102 this->fail("Can't encode to PNG."); |
| 98 } | 103 } |
| 99 } | 104 } |
| 100 | 105 |
| 101 JsonData entry = { fFullName, get_md5(fData) }; | 106 JsonData entry = { fBaseName, fSuffixes[0], fSourceType, get_md5(fData) }; |
| 102 { | 107 { |
| 103 SkAutoMutexAcquire lock(&gJsonDataLock); | 108 SkAutoMutexAcquire lock(&gJsonDataLock); |
| 104 gJsonData.push_back(entry); | 109 gJsonData.push_back(entry); |
| 105 } | 110 } |
| 106 | 111 |
| 107 SkString dir(FLAGS_writePath[0]); | 112 SkString dir(FLAGS_writePath[0]); |
| 108 #if SK_BUILD_FOR_IOS | 113 #if SK_BUILD_FOR_IOS |
| 109 if (dir.equals("@")) { | 114 if (dir.equals("@")) { |
| 110 dir.set(FLAGS_resourcePath[0]); | 115 dir.set(FLAGS_resourcePath[0]); |
| 111 } | 116 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 | 162 |
| 158 bool WriteTask::shouldSkip() const { | 163 bool WriteTask::shouldSkip() const { |
| 159 return FLAGS_writePath.isEmpty(); | 164 return FLAGS_writePath.isEmpty(); |
| 160 } | 165 } |
| 161 | 166 |
| 162 void WriteTask::DumpJson() { | 167 void WriteTask::DumpJson() { |
| 163 if (FLAGS_writePath.isEmpty()) { | 168 if (FLAGS_writePath.isEmpty()) { |
| 164 return; | 169 return; |
| 165 } | 170 } |
| 166 | 171 |
| 167 // FIXME: This JSON format is a complete MVP strawman. | |
| 168 Json::Value root; | 172 Json::Value root; |
| 173 |
| 174 for (int i = 1; i < FLAGS_properties.count(); i += 2) { |
| 175 root[FLAGS_properties[i-1]] = FLAGS_properties[i]; |
| 176 } |
| 177 for (int i = 1; i < FLAGS_key.count(); i += 2) { |
| 178 root["key"][FLAGS_key[i-1]] = FLAGS_key[i]; |
| 179 } |
| 180 |
| 169 { | 181 { |
| 170 SkAutoMutexAcquire lock(&gJsonDataLock); | 182 SkAutoMutexAcquire lock(&gJsonDataLock); |
| 171 for (int i = 0; i < gJsonData.count(); i++) { | 183 for (int i = 0; i < gJsonData.count(); i++) { |
| 172 root[gJsonData[i].name.c_str()] = gJsonData[i].md5.c_str(); | 184 Json::Value result; |
| 185 result["key"]["name"] = gJsonData[i].name.c_str(); |
| 186 result["key"]["config"] = gJsonData[i].config.c_str(); |
| 187 result["options"]["source_type"] = gJsonData[i].sourceType.c_str(); |
| 188 result["md5"] = gJsonData[i].md5.c_str(); |
| 189 |
| 190 root["results"].append(result); |
| 173 } | 191 } |
| 174 } | 192 } |
| 175 | 193 |
| 176 SkString path = SkOSPath::Join(FLAGS_writePath[0], "dm.json"); | 194 SkString path = SkOSPath::Join(FLAGS_writePath[0], "dm.json"); |
| 177 SkFILEWStream stream(path.c_str()); | 195 SkFILEWStream stream(path.c_str()); |
| 178 stream.writeText(Json::StyledWriter().write(root).c_str()); | 196 stream.writeText(Json::StyledWriter().write(root).c_str()); |
| 179 stream.flush(); | 197 stream.flush(); |
| 180 } | 198 } |
| 181 | 199 |
| 182 } // namespace DM | 200 } // namespace DM |
| OLD | NEW |