Home | History | Annotate | Download | only in dm
      1 #include "DMRecordTask.h"
      2 #include "DMUtil.h"
      3 #include "DMWriteTask.h"
      4 #include "SkCommandLineFlags.h"
      5 #include "SkRecord.h"
      6 #include "SkRecordDraw.h"
      7 #include "SkRecordOpts.h"
      8 #include "SkRecorder.h"
      9 
     10 DEFINE_bool(skr, true, "If true, run SKR tests.");
     11 
     12 namespace DM {
     13 
     14 RecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference, Mode mode)
     15     : CpuTask(parent)
     16     , fOptimize(mode == kOptimize_Mode)
     17     , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt"))
     18     , fGM(gm)
     19     , fReference(reference)
     20     {}
     21 
     22 RecordTask::RecordTask(const Task& parent, SkPicture* pic, SkBitmap reference, Mode mode)
     23     : CpuTask(parent)
     24     , fOptimize(mode == kOptimize_Mode)
     25     , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt"))
     26     , fPicture(SkRef(pic))
     27     , fReference(reference)
     28     {}
     29 
     30 void RecordTask::draw() {
     31     // Record into an SkRecord.
     32     SkRecord record;
     33     SkRecorder recorder(&record, fReference.width(), fReference.height());
     34 
     35     if (fGM.get()) {
     36         recorder.concat(fGM->getInitialTransform());
     37         fGM->draw(&recorder);
     38     } else {
     39         fPicture->draw(&recorder);
     40     }
     41 
     42 
     43     if (fOptimize) {
     44         SkRecordOptimize(&record);
     45     }
     46 
     47     // Draw the SkRecord back into a bitmap.
     48     SkBitmap bitmap;
     49     AllocatePixels(fReference, &bitmap);
     50     SkCanvas target(bitmap);
     51     SkRecordDraw(record, &target);
     52 
     53     if (!BitmapsEqual(bitmap, fReference)) {
     54         this->fail();
     55         this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap)));
     56     }
     57 }
     58 
     59 bool RecordTask::shouldSkip() const {
     60     return !FLAGS_skr;
     61 }
     62 
     63 }  // namespace DM
     64