Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3038)

Unified Diff: dm/DMWriteTask.cpp

Issue 108963002: DM: Add support for reading a directory of images with --expectations (-r). (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: comments etc Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « dm/DMWriteTask.h ('k') | gyp/dm.gyp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dm/DMWriteTask.cpp
diff --git a/dm/DMWriteTask.cpp b/dm/DMWriteTask.cpp
index c86381f78af12485fcd1bf4d1dcbc4cc08acb119..11b9fd3470738acaa865f0c2685d7c377cc87213 100644
--- a/dm/DMWriteTask.cpp
+++ b/dm/DMWriteTask.cpp
@@ -2,6 +2,7 @@
#include "DMUtil.h"
#include "SkCommandLineFlags.h"
+#include "SkImageDecoder.h"
#include "SkImageEncoder.h"
#include "SkString.h"
@@ -9,18 +10,25 @@ DEFINE_string2(writePath, w, "", "If set, write GMs here as .pngs.");
namespace DM {
-WriteTask::WriteTask(const Task& parent, SkBitmap bitmap) : Task(parent), fBitmap(bitmap) {
- const int suffixes = parent.depth() + 1;
- const char* name = parent.name().c_str();
+// Splits off the last N suffixes of name (splitting on _) and appends them to out.
+// Returns the total number of characters consumed.
+static int split_suffixes(int N, const char* name, SkTArray<SkString>* out) {
SkTArray<SkString> split;
SkStrSplit(name, "_", &split);
- int totalSuffixLength = 0;
- for (int i = 0; i < suffixes; i++) {
+ int consumed = 0;
+ for (int i = 0; i < N; i++) {
// We're splitting off suffixes from the back to front.
- fSuffixes.push_back(split[split.count()-i-1]);
- totalSuffixLength += fSuffixes.back().size() + 1;
+ out->push_back(split[split.count()-i-1]);
+ consumed += out->back().size() + 1; // Add one for the _.
}
- fGmName.set(name, strlen(name)-totalSuffixLength);
+ return consumed;
+}
+
+WriteTask::WriteTask(const Task& parent, SkBitmap bitmap) : Task(parent), fBitmap(bitmap) {
+ const int suffixes = parent.depth() + 1;
+ const SkString& name = parent.name();
+ const int totalSuffixLength = split_suffixes(suffixes, name.c_str(), &fSuffixes);
+ fGmName.set(name.c_str(), name.size()-totalSuffixLength);
}
void WriteTask::makeDirOrFail(SkString dir) {
@@ -36,7 +44,9 @@ void WriteTask::draw() {
dir = SkOSPath::SkPathJoin(dir.c_str(), fSuffixes[i].c_str());
this->makeDirOrFail(dir);
}
- if (!SkImageEncoder::EncodeFile(Png(SkOSPath::SkPathJoin(dir.c_str(), fGmName.c_str())).c_str(),
+ SkString path = SkOSPath::SkPathJoin(dir.c_str(), fGmName.c_str());
+ path.append(".png");
+ if (!SkImageEncoder::EncodeFile(path.c_str(),
fBitmap,
SkImageEncoder::kPNG_Type,
100/*quality*/)) {
@@ -57,4 +67,44 @@ bool WriteTask::shouldSkip() const {
return FLAGS_writePath.isEmpty();
}
+static SkString path_to_expected_image(const char* root, const Task& task) {
+ SkString filename = task.name();
+
+ // We know that all names passed in here belong to top-level Tasks, which have a single suffix
+ // (8888, 565, gpu, etc.) indicating what subdirectory to look in.
+ SkTArray<SkString> suffixes;
+ const int suffixLength = split_suffixes(1, filename.c_str(), &suffixes);
+ SkASSERT(1 == suffixes.count());
+
+ // We'll look in root/suffix for images.
+ const SkString dir = SkOSPath::SkPathJoin(root, suffixes[0].c_str());
+
+ // Remove the suffix and tack on a .png.
+ filename.remove(filename.size() - suffixLength, suffixLength);
+ filename.append(".png");
+
+ //SkDebugf("dir %s, filename %s\n", dir.c_str(), filename.c_str());
+
+ return SkOSPath::SkPathJoin(dir.c_str(), filename.c_str());
+}
+
+bool WriteTask::Expectations::check(const Task& task, SkBitmap bitmap) const {
+ const SkString path = path_to_expected_image(fRoot, task);
+
+ SkBitmap expected;
+ if (SkImageDecoder::DecodeFile(path.c_str(), &expected)) {
+ if (expected.config() != bitmap.config()) {
+ SkBitmap converted;
+ SkAssertResult(expected.copyTo(&converted, bitmap.config()));
+ expected.swap(converted);
+ }
+ SkASSERT(expected.config() == bitmap.config());
+ return BitmapsEqual(expected, bitmap);
+ }
+
+ // Couldn't read the file, etc.
+ SkDebugf("Problem decoding %s to SkBitmap.\n", path.c_str());
+ return false;
+}
+
} // namespace DM
« no previous file with comments | « dm/DMWriteTask.h ('k') | gyp/dm.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698