Index: dm/DMRecordTask.cpp |
diff --git a/dm/DMRecordTask.cpp b/dm/DMRecordTask.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0109a41d8fb1b5eb4fc0d70a8f9adbb697aac047 |
--- /dev/null |
+++ b/dm/DMRecordTask.cpp |
@@ -0,0 +1,42 @@ |
+#include "DMRecordTask.h" |
+#include "DMUtil.h" |
+#include "DMWriteTask.h" |
+#include "SkCommandLineFlags.h" |
+#include "SkRecordDraw.h" |
+#include "SkRecorder.h" |
+ |
+DEFINE_bool(skr, false, "If true, run SKR tests."); |
+ |
+namespace DM { |
+ |
+RecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference) |
+ : CpuTask(parent) |
+ , fName(UnderJoin(parent.name().c_str(), "skr")) |
+ , fGM(gm) |
+ , fReference(reference) |
+ {} |
+ |
+void RecordTask::draw() { |
+ // Record the GM into an SkRecord. |
+ SkRecord record; |
+ SkRecorder canvas(&record, fReference.width(), fReference.height()); |
+ canvas.concat(fGM->getInitialTransform()); |
+ fGM->draw(&canvas); |
+ |
+ // Draw the SkRecord back into a bitmap. |
+ SkBitmap bitmap; |
+ SetupBitmap(fReference.colorType(), fGM.get(), &bitmap); |
+ SkCanvas target(bitmap); |
+ record.visit(SkRecordDraw(&target)); |
+ |
+ if (!BitmapsEqual(bitmap, fReference)) { |
+ this->fail(); |
+ this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); |
+ } |
+} |
+ |
+bool RecordTask::shouldSkip() const { |
+ return !FLAGS_skr; |
+} |
+ |
+} // namespace DM |