1#ifndef DMRecordTask_DEFINED
2#define DMRecordTask_DEFINED
3
4#include "DMTask.h"
5#include "SkBitmap.h"
6#include "SkPicture.h"
7#include "SkString.h"
8#include "SkTemplates.h"
9#include "gm.h"
10
11// Records a GM or SKP through an SkRecord, draws it, and compares against the reference bitmap.
12
13namespace DM {
14
15class RecordTask : public CpuTask {
16
17public:
18    enum Mode {
19        kNoOptimize_Mode,
20        kOptimize_Mode,
21    };
22    RecordTask(const Task& parent, skiagm::GM*, SkBitmap reference, Mode);
23    RecordTask(const Task& parent, SkPicture*,  SkBitmap reference, Mode);
24
25    virtual void draw() SK_OVERRIDE;
26    virtual bool shouldSkip() const SK_OVERRIDE;
27    virtual SkString name() const SK_OVERRIDE { return fName; }
28
29private:
30    bool fOptimize;
31    const SkString fName;
32    SkAutoTUnref<SkPicture> fPicture;
33    SkAutoTDelete<skiagm::GM> fGM;
34    const SkBitmap fReference;
35};
36
37}  // namespace DM
38
39#endif  // DMRecordTask_DEFINED
40