1e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "DMRecordTask.h" 2e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "DMUtil.h" 3e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "DMWriteTask.h" 4e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org#include "SkCommandLineFlags.h" 593043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org#include "SkRecord.h" 693043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org#include "SkRecordDraw.h" 793043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org#include "SkRecordOpts.h" 893043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org#include "SkRecorder.h" 9e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 105aacfe9ffcf1849727dca6761b4a221bd4315f26commit-bot@chromium.orgDEFINE_bool(skr, true, "If true, run SKR tests."); 11e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 12e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.orgnamespace DM { 13e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 1490b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.orgRecordTask::RecordTask(const Task& parent, skiagm::GM* gm, SkBitmap reference, Mode mode) 15e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org : CpuTask(parent) 1690b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fOptimize(mode == kOptimize_Mode) 1790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt")) 18e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org , fGM(gm) 19e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org , fReference(reference) 2090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org {} 2190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 2290b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.orgRecordTask::RecordTask(const Task& parent, SkPicture* pic, SkBitmap reference, Mode mode) 2390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org : CpuTask(parent) 2490b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fOptimize(mode == kOptimize_Mode) 2590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fName(UnderJoin(parent.name().c_str(), fOptimize ? "skr" : "skr-noopt")) 2690b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fPicture(SkRef(pic)) 2790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fReference(reference) 28e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org {} 29e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 30e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.orgvoid RecordTask::draw() { 3190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org // Record into an SkRecord. 3293043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org SkRecord record; 33a095041f5148dd1e71f38d0546335ed94199104bcommit-bot@chromium.org SkRecorder recorder(&record, fReference.width(), fReference.height()); 3490b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 3590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (fGM.get()) { 3690b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org recorder.concat(fGM->getInitialTransform()); 3790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org fGM->draw(&recorder); 3890b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } else { 3990b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org fPicture->draw(&recorder); 4090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 4190b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org 4293043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org 4393043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org if (fOptimize) { 4493043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org SkRecordOptimize(&record); 4593043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org } 46e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 47e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org // Draw the SkRecord back into a bitmap. 48e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org SkBitmap bitmap; 49266420722e18dcc8b6d4a7379a42b8591ccd2b6dcommit-bot@chromium.org AllocatePixels(fReference, &bitmap); 50e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org SkCanvas target(bitmap); 5193043bc252929d38a38096bba12f4612a8626c9bcommit-bot@chromium.org SkRecordDraw(record, &target); 52e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 53e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org if (!BitmapsEqual(bitmap, fReference)) { 54e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org this->fail(); 55e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); 56e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org } 57e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org} 58e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 59e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.orgbool RecordTask::shouldSkip() const { 60e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org return !FLAGS_skr; 61e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org} 62e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org 63e3ff558a4baf4cb924e7513a81c8073ddae385fccommit-bot@chromium.org} // namespace DM 64