12d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "DMPipeTask.h" 22d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "DMUtil.h" 32d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "DMWriteTask.h" 42d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 52d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "SamplePipeControllers.h" 62d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "SkCommandLineFlags.h" 72d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org#include "SkGPipe.h" 82d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 9d6bab0238655dbab24dfe92bd0b16b464310a8c7rmistry@google.comDEFINE_bool(pipe, true, "If true, check several pipe variants against the reference bitmap."); 102d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 112d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.orgnamespace DM { 122d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 1390b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.orgstatic uint32_t get_flags(PipeTask::Mode mode) { 142d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org uint32_t flags = 0; 1590b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (mode != PipeTask::kInProcess_Mode) { 162d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org flags |= SkGPipeWriter::kCrossProcess_Flag; 1790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org } 1890b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org if (mode == PipeTask::kSharedAddress_Mode) { 1990b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org flags |= SkGPipeWriter::kSharedAddressSpace_Flag; 202d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 212d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return flags; 222d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org} 232d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 242d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.orgstatic const char* get_name(const uint32_t flags) { 252d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org if (flags & SkGPipeWriter::kCrossProcess_Flag && 262d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org flags & SkGPipeWriter::kSharedAddressSpace_Flag) { 2790b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org return "shared_address_space_pipe"; 282d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } else if (flags & SkGPipeWriter::kCrossProcess_Flag) { 292d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return "cross_process_pipe"; 302d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } else { 312d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return "pipe"; 322d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 332d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org} 342d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 352d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.orgPipeTask::PipeTask(const Task& parent, 362d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org skiagm::GM* gm, 372d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org SkBitmap reference, 3890b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org Mode mode) 39ef57b7e65330d5f794a513630517907500f1c1d0commit-bot@chromium.org : CpuTask(parent) 4090b5a2a653b312ff9bcd7102412da2dbeb52368ccommit-bot@chromium.org , fFlags(get_flags(mode)) 412d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org , fName(UnderJoin(parent.name().c_str(), get_name(fFlags))) 422d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org , fGM(gm) 432d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org , fReference(reference) 442d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org {} 452d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 462d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.orgvoid PipeTask::draw() { 472d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org SkBitmap bitmap; 48266420722e18dcc8b6d4a7379a42b8591ccd2b6dcommit-bot@chromium.org AllocatePixels(fReference, &bitmap); 492d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 502d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org SkCanvas canvas(bitmap); 512d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org PipeController pipeController(&canvas, &SkImageDecoder::DecodeMemory); 522d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org SkGPipeWriter writer; 532d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 542d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org SkCanvas* pipeCanvas = writer.startRecording(&pipeController, 552d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org fFlags, 562d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org bitmap.width(), 572d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org bitmap.height()); 582d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org pipeCanvas->concat(fGM->getInitialTransform()); 592d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org fGM->draw(pipeCanvas); 602d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org writer.endRecording(); 612d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 622d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org if (!BitmapsEqual(bitmap, fReference)) { 632d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org this->fail(); 642d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org this->spawnChild(SkNEW_ARGS(WriteTask, (*this, bitmap))); 652d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 662d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org} 672d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 682d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.orgbool PipeTask::shouldSkip() const { 692d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org if (!FLAGS_pipe) { 702d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return true; 712d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 722d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org if (fGM->getFlags() & skiagm::GM::kSkipPipe_Flag) { 732d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return true; 742d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 752d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org if (fFlags == SkGPipeWriter::kCrossProcess_Flag && 762d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org fGM->getFlags() & skiagm::GM::kSkipPipeCrossProcess_Flag) { 772d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return true; 782d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org } 792d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org return false; 802d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org} 812d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org 822d3a7897e55a76a4dc9f27ae865d1d230163f584commit-bot@chromium.org} // namespace DM 83