1478652e918d73a4c0330e27e03eaa9564138c0f7scroggo/* 2478652e918d73a4c0330e27e03eaa9564138c0f7scroggo * Copyright 2015 Google Inc. 3478652e918d73a4c0330e27e03eaa9564138c0f7scroggo * 4478652e918d73a4c0330e27e03eaa9564138c0f7scroggo * Use of this source code is governed by a BSD-style license that can be 5478652e918d73a4c0330e27e03eaa9564138c0f7scroggo * found in the LICENSE file. 6478652e918d73a4c0330e27e03eaa9564138c0f7scroggo */ 7478652e918d73a4c0330e27e03eaa9564138c0f7scroggo 8748ca3bf2d170708f263693e8579e6722389d0efmtklein#ifndef DMSrcSink_DEFINED 9748ca3bf2d170708f263693e8579e6722389d0efmtklein#define DMSrcSink_DEFINED 10748ca3bf2d170708f263693e8579e6722389d0efmtklein 11748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "DMGpuSupport.h" 12748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkBBHFactory.h" 13748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkBBoxHierarchy.h" 14748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkBitmap.h" 15748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkCanvas.h" 16438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett#include "SkCodec.h" 17748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkData.h" 18748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkGPipe.h" 19748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "SkPicture.h" 20748ca3bf2d170708f263693e8579e6722389d0efmtklein#include "gm.h" 21748ca3bf2d170708f263693e8579e6722389d0efmtklein 22748ca3bf2d170708f263693e8579e6722389d0efmtkleinnamespace DM { 23748ca3bf2d170708f263693e8579e6722389d0efmtklein 24748ca3bf2d170708f263693e8579e6722389d0efmtklein// This is just convenience. It lets you use either return "foo" or return SkStringPrintf(...). 25748ca3bf2d170708f263693e8579e6722389d0efmtkleinstruct ImplicitString : public SkString { 26748ca3bf2d170708f263693e8579e6722389d0efmtklein template <typename T> 27748ca3bf2d170708f263693e8579e6722389d0efmtklein ImplicitString(const T& s) : SkString(s) {} 28748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 29748ca3bf2d170708f263693e8579e6722389d0efmtkleintypedef ImplicitString Name; 308d17a13a71edb0d8412e4354c428582b74587b79mtkleintypedef ImplicitString Path; 31748ca3bf2d170708f263693e8579e6722389d0efmtklein 324089ef7c982592fadeec441438c551ffb4c746bemtkleinclass Error { 334089ef7c982592fadeec441438c551ffb4c746bemtkleinpublic: 344089ef7c982592fadeec441438c551ffb4c746bemtklein Error(const SkString& s) : fMsg(s), fFatal(!this->isEmpty()) {} 354089ef7c982592fadeec441438c551ffb4c746bemtklein Error(const char* s) : fMsg(s), fFatal(!this->isEmpty()) {} 364089ef7c982592fadeec441438c551ffb4c746bemtklein 374089ef7c982592fadeec441438c551ffb4c746bemtklein Error(const Error&) = default; 384089ef7c982592fadeec441438c551ffb4c746bemtklein Error& operator=(const Error&) = default; 394089ef7c982592fadeec441438c551ffb4c746bemtklein 404089ef7c982592fadeec441438c551ffb4c746bemtklein static Error Nonfatal(const SkString& s) { return Nonfatal(s.c_str()); } 414089ef7c982592fadeec441438c551ffb4c746bemtklein static Error Nonfatal(const char* s) { 424089ef7c982592fadeec441438c551ffb4c746bemtklein Error e(s); 434089ef7c982592fadeec441438c551ffb4c746bemtklein e.fFatal = false; 444089ef7c982592fadeec441438c551ffb4c746bemtklein return e; 454089ef7c982592fadeec441438c551ffb4c746bemtklein } 464089ef7c982592fadeec441438c551ffb4c746bemtklein 474089ef7c982592fadeec441438c551ffb4c746bemtklein const char* c_str() const { return fMsg.c_str(); } 484089ef7c982592fadeec441438c551ffb4c746bemtklein bool isEmpty() const { return fMsg.isEmpty(); } 494089ef7c982592fadeec441438c551ffb4c746bemtklein bool isFatal() const { return fFatal; } 504089ef7c982592fadeec441438c551ffb4c746bemtklein 514089ef7c982592fadeec441438c551ffb4c746bemtkleinprivate: 524089ef7c982592fadeec441438c551ffb4c746bemtklein SkString fMsg; 534089ef7c982592fadeec441438c551ffb4c746bemtklein bool fFatal; 544089ef7c982592fadeec441438c551ffb4c746bemtklein}; 554089ef7c982592fadeec441438c551ffb4c746bemtklein 56748ca3bf2d170708f263693e8579e6722389d0efmtkleinstruct Src { 57748ca3bf2d170708f263693e8579e6722389d0efmtklein // All Srcs must be thread safe. 58748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual ~Src() {} 59748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual Error SK_WARN_UNUSED_RESULT draw(SkCanvas*) const = 0; 60748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual SkISize size() const = 0; 61748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual Name name() const = 0; 62748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 63748ca3bf2d170708f263693e8579e6722389d0efmtklein 64748ca3bf2d170708f263693e8579e6722389d0efmtkleinstruct Sink { 65748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual ~Sink() {} 66b9eb4ac0f1c29d6fe10ad7ff81ed8326ac1ea043mtklein // You may write to either the bitmap or stream. If you write to log, we'll print that out. 67b9eb4ac0f1c29d6fe10ad7ff81ed8326ac1ea043mtklein virtual Error SK_WARN_UNUSED_RESULT draw(const Src&, SkBitmap*, SkWStream*, SkString* log) 68b9eb4ac0f1c29d6fe10ad7ff81ed8326ac1ea043mtklein const = 0; 69748ca3bf2d170708f263693e8579e6722389d0efmtklein // Sinks in the same enclave (except kAnyThread_Enclave) will run serially on the same thread. 70748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual int enclave() const = 0; 71748ca3bf2d170708f263693e8579e6722389d0efmtklein 72748ca3bf2d170708f263693e8579e6722389d0efmtklein // File extension for the content draw() outputs, e.g. "png", "pdf". 73748ca3bf2d170708f263693e8579e6722389d0efmtklein virtual const char* fileExtension() const = 0; 74748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 75748ca3bf2d170708f263693e8579e6722389d0efmtklein 76792c80f5a7b66e75d42664ccb298f31962c6654chalcanaryenum { kAnyThread_Enclave, kGPU_Enclave }; 77792c80f5a7b66e75d42664ccb298f31962c6654chalcanarystatic const int kNumEnclaves = kGPU_Enclave + 1; 78748ca3bf2d170708f263693e8579e6722389d0efmtklein 79748ca3bf2d170708f263693e8579e6722389d0efmtklein/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 80748ca3bf2d170708f263693e8579e6722389d0efmtklein 81748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass GMSrc : public Src { 82748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 83748ca3bf2d170708f263693e8579e6722389d0efmtklein explicit GMSrc(skiagm::GMRegistry::Factory); 84748ca3bf2d170708f263693e8579e6722389d0efmtklein 8536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(SkCanvas*) const override; 8636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize size() const override; 8736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Name name() const override; 88748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 89748ca3bf2d170708f263693e8579e6722389d0efmtklein skiagm::GMRegistry::Factory fFactory; 90748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 91748ca3bf2d170708f263693e8579e6722389d0efmtklein 929b77ddde08efe702256355a333cf31ade8f15bb0scroggoclass CodecSrc : public Src { 939b77ddde08efe702256355a333cf31ade8f15bb0scroggopublic: 949c59ebc0db7cade1537591813430f7be47123e76scroggo enum Mode { 959c59ebc0db7cade1537591813430f7be47123e76scroggo kNormal_Mode, 969c59ebc0db7cade1537591813430f7be47123e76scroggo kScanline_Mode, 979c59ebc0db7cade1537591813430f7be47123e76scroggo }; 98438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett enum DstColorType { 99438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett kGetFromCanvas_DstColorType, 100438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett kIndex8_Always_DstColorType, 101438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett kGrayscale_Always_DstColorType, 102438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett }; 103438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett CodecSrc(Path, Mode, DstColorType); 1049b77ddde08efe702256355a333cf31ade8f15bb0scroggo 10536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(SkCanvas*) const override; 10636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize size() const override; 10736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Name name() const override; 1089b77ddde08efe702256355a333cf31ade8f15bb0scroggoprivate: 109438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett Path fPath; 110438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett Mode fMode; 111438b2adefb9e9213e0ddaf0609405d3087a1cf0amsarett DstColorType fDstColorType; 1129b77ddde08efe702256355a333cf31ade8f15bb0scroggo}; 1139b77ddde08efe702256355a333cf31ade8f15bb0scroggo 1149b77ddde08efe702256355a333cf31ade8f15bb0scroggo 115748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass ImageSrc : public Src { 116748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 117edc93bc74003e2c19219ba0b30383868b5371a96mtklein // divisor == 0 means decode the whole image 118edc93bc74003e2c19219ba0b30383868b5371a96mtklein // divisor > 0 means decode in subsets, dividing into a divisor x divisor grid. 119edc93bc74003e2c19219ba0b30383868b5371a96mtklein explicit ImageSrc(Path path, int divisor = 0); 120748ca3bf2d170708f263693e8579e6722389d0efmtklein 12136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(SkCanvas*) const override; 12236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize size() const override; 12336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Name name() const override; 124748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 1258d17a13a71edb0d8412e4354c428582b74587b79mtklein Path fPath; 126edc93bc74003e2c19219ba0b30383868b5371a96mtklein const int fDivisor; 127748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 128748ca3bf2d170708f263693e8579e6722389d0efmtklein 129748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass SKPSrc : public Src { 130748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 1318d17a13a71edb0d8412e4354c428582b74587b79mtklein explicit SKPSrc(Path path); 132748ca3bf2d170708f263693e8579e6722389d0efmtklein 13336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(SkCanvas*) const override; 13436352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkISize size() const override; 13536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Name name() const override; 136748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 1378d17a13a71edb0d8412e4354c428582b74587b79mtklein Path fPath; 138748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 139748ca3bf2d170708f263693e8579e6722389d0efmtklein 140748ca3bf2d170708f263693e8579e6722389d0efmtklein/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 141748ca3bf2d170708f263693e8579e6722389d0efmtklein 142ad66f9b15fd44468b5f013534ee333dc68d6bed6mtkleinclass NullSink : public Sink { 143ad66f9b15fd44468b5f013534ee333dc68d6bed6mtkleinpublic: 144ad66f9b15fd44468b5f013534ee333dc68d6bed6mtklein NullSink() {} 145ad66f9b15fd44468b5f013534ee333dc68d6bed6mtklein 14636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src& src, SkBitmap*, SkWStream*, SkString*) const override; 14736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 14836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return ""; } 149ad66f9b15fd44468b5f013534ee333dc68d6bed6mtklein}; 150ad66f9b15fd44468b5f013534ee333dc68d6bed6mtklein 151ad66f9b15fd44468b5f013534ee333dc68d6bed6mtklein 152748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass GPUSink : public Sink { 153748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 15482d2843cc59dc048b7d8d1d928dab743d8e85a3bmtklein GPUSink(GrContextFactory::GLContextType, GrGLStandard, int samples, bool dfText, bool threaded); 155748ca3bf2d170708f263693e8579e6722389d0efmtklein 15636352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 15736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override; 15836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "png"; } 159748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 160748ca3bf2d170708f263693e8579e6722389d0efmtklein GrContextFactory::GLContextType fContextType; 161748ca3bf2d170708f263693e8579e6722389d0efmtklein GrGLStandard fGpuAPI; 162748ca3bf2d170708f263693e8579e6722389d0efmtklein int fSampleCount; 163748ca3bf2d170708f263693e8579e6722389d0efmtklein bool fUseDFText; 16482d2843cc59dc048b7d8d1d928dab743d8e85a3bmtklein bool fThreaded; 165748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 166748ca3bf2d170708f263693e8579e6722389d0efmtklein 167748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass PDFSink : public Sink { 168748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 169748ca3bf2d170708f263693e8579e6722389d0efmtklein PDFSink(); 170748ca3bf2d170708f263693e8579e6722389d0efmtklein 17136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 17236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 17336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "pdf"; } 174748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 175748ca3bf2d170708f263693e8579e6722389d0efmtklein 17647ef4d5d934bba86848aa238efab21f54a160c1ahalcanaryclass XPSSink : public Sink { 17747ef4d5d934bba86848aa238efab21f54a160c1ahalcanarypublic: 17847ef4d5d934bba86848aa238efab21f54a160c1ahalcanary XPSSink(); 17947ef4d5d934bba86848aa238efab21f54a160c1ahalcanary 18036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 18136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 18236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "xps"; } 18347ef4d5d934bba86848aa238efab21f54a160c1ahalcanary}; 18447ef4d5d934bba86848aa238efab21f54a160c1ahalcanary 185748ca3bf2d170708f263693e8579e6722389d0efmtkleinclass RasterSink : public Sink { 186748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 187748ca3bf2d170708f263693e8579e6722389d0efmtklein explicit RasterSink(SkColorType); 188748ca3bf2d170708f263693e8579e6722389d0efmtklein 18936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 19036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 19136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "png"; } 192748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 193748ca3bf2d170708f263693e8579e6722389d0efmtklein SkColorType fColorType; 194748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 195748ca3bf2d170708f263693e8579e6722389d0efmtklein 1969c3f17d6e859a11535f40497cb9f6e777d15f62emtkleinclass SKPSink : public Sink { 1979c3f17d6e859a11535f40497cb9f6e777d15f62emtkleinpublic: 1989c3f17d6e859a11535f40497cb9f6e777d15f62emtklein SKPSink(); 1999c3f17d6e859a11535f40497cb9f6e777d15f62emtklein 20036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 20136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 20236352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "skp"; } 2039c3f17d6e859a11535f40497cb9f6e777d15f62emtklein}; 2049c3f17d6e859a11535f40497cb9f6e777d15f62emtklein 2058a4527e98a57b1d2dd248a635f0c4fa227be2089mtkleinclass SVGSink : public Sink { 2068a4527e98a57b1d2dd248a635f0c4fa227be2089mtkleinpublic: 2078a4527e98a57b1d2dd248a635f0c4fa227be2089mtklein SVGSink(); 2088a4527e98a57b1d2dd248a635f0c4fa227be2089mtklein 20936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 21036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein int enclave() const override { return kAnyThread_Enclave; } 21136352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return "svg"; } 2128a4527e98a57b1d2dd248a635f0c4fa227be2089mtklein}; 2138a4527e98a57b1d2dd248a635f0c4fa227be2089mtklein 2148a4527e98a57b1d2dd248a635f0c4fa227be2089mtklein 215748ca3bf2d170708f263693e8579e6722389d0efmtklein/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 216748ca3bf2d170708f263693e8579e6722389d0efmtklein 2177882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass Via : public Sink { 218748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 2197882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit Via(Sink* sink) : fSink(sink) {} 22036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein const char* fileExtension() const override { return fSink->fileExtension(); } 2217882924c10fadaed427b6aa65dc7aa6577b94f32mtklein int enclave() const override { return fSink->enclave(); } 2227882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinprotected: 223748ca3bf2d170708f263693e8579e6722389d0efmtklein SkAutoTDelete<Sink> fSink; 224748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 225748ca3bf2d170708f263693e8579e6722389d0efmtklein 2267882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaMatrix : public Via { 227d603b22903bf7c023226bf52bd7c1f49a9bee1bfmtkleinpublic: 2287882924c10fadaed427b6aa65dc7aa6577b94f32mtklein ViaMatrix(SkMatrix, Sink*); 22936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 230d603b22903bf7c023226bf52bd7c1f49a9bee1bfmtkleinprivate: 2317882924c10fadaed427b6aa65dc7aa6577b94f32mtklein const SkMatrix fMatrix; 232d603b22903bf7c023226bf52bd7c1f49a9bee1bfmtklein}; 233d603b22903bf7c023226bf52bd7c1f49a9bee1bfmtklein 2347882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaUpright : public Via { 235748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 2367882924c10fadaed427b6aa65dc7aa6577b94f32mtklein ViaUpright(SkMatrix, Sink*); 23736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 238748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 2397882924c10fadaed427b6aa65dc7aa6577b94f32mtklein const SkMatrix fMatrix; 240748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 241748ca3bf2d170708f263693e8579e6722389d0efmtklein 2427882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaPipe : public Via { 24306a22f618cd2adbbd33634a701b5cf8353886d63reedpublic: 2447882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit ViaPipe(Sink* sink) : Via(sink) {} 24506a22f618cd2adbbd33634a701b5cf8353886d63reed Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 24606a22f618cd2adbbd33634a701b5cf8353886d63reed}; 24706a22f618cd2adbbd33634a701b5cf8353886d63reed 2487882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaDeferred : public Via { 249748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 2507882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit ViaDeferred(Sink* sink) : Via(sink) {} 2517882924c10fadaed427b6aa65dc7aa6577b94f32mtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 2527882924c10fadaed427b6aa65dc7aa6577b94f32mtklein}; 253748ca3bf2d170708f263693e8579e6722389d0efmtklein 2547882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaSerialization : public Via { 2557882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinpublic: 2567882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit ViaSerialization(Sink* sink) : Via(sink) {} 25736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 258748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 259748ca3bf2d170708f263693e8579e6722389d0efmtklein 2607882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaTiles : public Via { 261748ca3bf2d170708f263693e8579e6722389d0efmtkleinpublic: 262748ca3bf2d170708f263693e8579e6722389d0efmtklein ViaTiles(int w, int h, SkBBHFactory*, Sink*); 26336352bf5e38f45a70ee4f4fc132a38048d38206dmtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 264748ca3bf2d170708f263693e8579e6722389d0efmtkleinprivate: 265748ca3bf2d170708f263693e8579e6722389d0efmtklein const int fW, fH; 266748ca3bf2d170708f263693e8579e6722389d0efmtklein SkAutoTDelete<SkBBHFactory> fFactory; 267748ca3bf2d170708f263693e8579e6722389d0efmtklein}; 268748ca3bf2d170708f263693e8579e6722389d0efmtklein 2697882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaSecondPicture : public Via { 270b7e8d69fc21a3043348fd9b76876471e0a6ae7femtkleinpublic: 2717882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit ViaSecondPicture(Sink* sink) : Via(sink) {} 272b7e8d69fc21a3043348fd9b76876471e0a6ae7femtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 273b7e8d69fc21a3043348fd9b76876471e0a6ae7femtklein}; 274b7e8d69fc21a3043348fd9b76876471e0a6ae7femtklein 2757882924c10fadaed427b6aa65dc7aa6577b94f32mtkleinclass ViaSingletonPictures : public Via { 276d31c13d0441aecc8b2a4fa4f45fd5e59584cb3eamtkleinpublic: 2777882924c10fadaed427b6aa65dc7aa6577b94f32mtklein explicit ViaSingletonPictures(Sink* sink) : Via(sink) {} 278d31c13d0441aecc8b2a4fa4f45fd5e59584cb3eamtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 279d31c13d0441aecc8b2a4fa4f45fd5e59584cb3eamtklein}; 280d31c13d0441aecc8b2a4fa4f45fd5e59584cb3eamtklein 2816fbf4b3a7f0a3304649c482ab0a911dc147a6825mtkleinclass ViaTwice : public Via { 2826fbf4b3a7f0a3304649c482ab0a911dc147a6825mtkleinpublic: 2836fbf4b3a7f0a3304649c482ab0a911dc147a6825mtklein explicit ViaTwice(Sink* sink) : Via(sink) {} 2846fbf4b3a7f0a3304649c482ab0a911dc147a6825mtklein Error draw(const Src&, SkBitmap*, SkWStream*, SkString*) const override; 2856fbf4b3a7f0a3304649c482ab0a911dc147a6825mtklein}; 2866fbf4b3a7f0a3304649c482ab0a911dc147a6825mtklein 287748ca3bf2d170708f263693e8579e6722389d0efmtklein} // namespace DM 288748ca3bf2d170708f263693e8579e6722389d0efmtklein 289748ca3bf2d170708f263693e8579e6722389d0efmtklein#endif//DMSrcSink_DEFINED 290