| #include "DMWriteTask.h" |
| |
| #include "DMUtil.h" |
| #include "SkCommandLineFlags.h" |
| #include "SkImageEncoder.h" |
| |
| #include <string.h> |
| |
| DEFINE_string2(writePath, w, "", "If set, write GMs here as .pngs."); |
| |
| namespace DM { |
| |
| WriteTask::WriteTask(const Task& parent, SkBitmap bitmap) |
| : Task(parent) |
| , fBitmap(bitmap) { |
| // Split parent's name <gmName>_<config> into gmName and config. |
| const char* parentName = parent.name().c_str(); |
| const char* fromLastUnderscore = strrchr(parentName, '_'); |
| const ptrdiff_t gmNameLength = fromLastUnderscore - parentName; |
| |
| fConfig.set(fromLastUnderscore+1); |
| fGmName.set(parentName, gmNameLength); |
| } |
| |
| void WriteTask::draw() { |
| const char* root = FLAGS_writePath[0]; |
| const SkString dir = SkOSPath::SkPathJoin(root, fConfig.c_str()); |
| if (!sk_mkdir(root) || |
| !sk_mkdir(dir.c_str()) || |
| !SkImageEncoder::EncodeFile(Png(SkOSPath::SkPathJoin(dir.c_str(), fGmName.c_str())).c_str(), |
| fBitmap, |
| SkImageEncoder::kPNG_Type, |
| 100/*quality*/)) |
| { |
| this->fail(); |
| } |
| } |
| |
| SkString WriteTask::name() const { |
| return SkStringPrintf("writing %s/%s.png", fConfig.c_str(), fGmName.c_str()); |
| } |
| |
| bool WriteTask::shouldSkip() const { |
| return FLAGS_writePath.isEmpty(); |
| } |
| |
| } // namespace DM |