#include "DMWriteTask.h" #include "DMUtil.h" #include "SkCommandLineFlags.h" #include "SkImageEncoder.h" #include 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 _ 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