| OLD | NEW |
| 1 #include "DMSrcSink.h" | 1 #include "DMSrcSink.h" |
| 2 #include "SamplePipeControllers.h" | 2 #include "SamplePipeControllers.h" |
| 3 #include "SkCommonFlags.h" | 3 #include "SkCommonFlags.h" |
| 4 #include "SkDocument.h" | 4 #include "SkDocument.h" |
| 5 #include "SkMultiPictureDraw.h" | 5 #include "SkMultiPictureDraw.h" |
| 6 #include "SkOSFile.h" | 6 #include "SkOSFile.h" |
| 7 #include "SkPictureRecorder.h" | 7 #include "SkPictureRecorder.h" |
| 8 #include "SkRandom.h" | 8 #include "SkRandom.h" |
| 9 #include "SkSVGDevice.h" | 9 #include "SkSVGDevice.h" |
| 10 #include "SkStream.h" | 10 #include "SkStream.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 | 124 |
| 125 SkISize SKPSrc::size() const { | 125 SkISize SKPSrc::size() const { |
| 126 // This may be unnecessarily large. | 126 // This may be unnecessarily large. |
| 127 return kSKPViewport.roundOut().size(); | 127 return kSKPViewport.roundOut().size(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } | 130 Name SKPSrc::name() const { return SkOSPath::Basename(fPath.c_str()); } |
| 131 | 131 |
| 132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 132 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 133 | 133 |
| 134 DEFINE_bool(gpuStats, false, "Append GPU stats to the log for each GPU task?"); |
| 135 |
| 134 GPUSink::GPUSink(GrContextFactory::GLContextType ct, | 136 GPUSink::GPUSink(GrContextFactory::GLContextType ct, |
| 135 GrGLStandard api, | 137 GrGLStandard api, |
| 136 int samples, | 138 int samples, |
| 137 bool dfText, | 139 bool dfText, |
| 138 bool threaded) | 140 bool threaded) |
| 139 : fContextType(ct) | 141 : fContextType(ct) |
| 140 , fGpuAPI(api) | 142 , fGpuAPI(api) |
| 141 , fSampleCount(samples) | 143 , fSampleCount(samples) |
| 142 , fUseDFText(dfText) | 144 , fUseDFText(dfText) |
| 143 , fThreaded(threaded) {} | 145 , fThreaded(threaded) {} |
| 144 | 146 |
| 145 int GPUSink::enclave() const { | 147 int GPUSink::enclave() const { |
| 146 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave; | 148 return fThreaded ? kAnyThread_Enclave : kGPU_Enclave; |
| 147 } | 149 } |
| 148 | 150 |
| 149 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { | 151 Error GPUSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString* log) co
nst { |
| 150 GrContextFactory factory; | 152 GrContextFactory factory; |
| 151 const SkISize size = src.size(); | 153 const SkISize size = src.size(); |
| 152 const SkImageInfo info = | 154 const SkImageInfo info = |
| 153 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul
_SkAlphaType); | 155 SkImageInfo::Make(size.width(), size.height(), kN32_SkColorType, kPremul
_SkAlphaType); |
| 154 SkAutoTUnref<SkSurface> surface( | 156 SkAutoTUnref<SkSurface> surface( |
| 155 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f
UseDFText)); | 157 NewGpuSurface(&factory, fContextType, fGpuAPI, info, fSampleCount, f
UseDFText)); |
| 156 if (!surface) { | 158 if (!surface) { |
| 157 return "Could not create a surface."; | 159 return "Could not create a surface."; |
| 158 } | 160 } |
| 159 SkCanvas* canvas = surface->getCanvas(); | 161 SkCanvas* canvas = surface->getCanvas(); |
| 160 Error err = src.draw(canvas); | 162 Error err = src.draw(canvas); |
| 161 if (!err.isEmpty()) { | 163 if (!err.isEmpty()) { |
| 162 return err; | 164 return err; |
| 163 } | 165 } |
| 164 canvas->flush(); | 166 canvas->flush(); |
| 167 if (FLAGS_gpuStats) { |
| 168 canvas->getGrContext()->dumpCacheStats(log); |
| 169 canvas->getGrContext()->dumpGpuStats(log); |
| 170 } |
| 165 dst->allocPixels(info); | 171 dst->allocPixels(info); |
| 166 canvas->readPixels(dst, 0,0); | 172 canvas->readPixels(dst, 0,0); |
| 167 if (FLAGS_abandonGpuContext) { | 173 if (FLAGS_abandonGpuContext) { |
| 168 factory.abandonContexts(); | 174 factory.abandonContexts(); |
| 169 } | 175 } |
| 170 return ""; | 176 return ""; |
| 171 } | 177 } |
| 172 | 178 |
| 173 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 179 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 174 | 180 |
| 175 PDFSink::PDFSink() {} | 181 PDFSink::PDFSink() {} |
| 176 | 182 |
| 177 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 183 Error PDFSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
| 178 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages. | 184 // Print the given DM:Src to a PDF, breaking on 8.5x11 pages. |
| 179 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst)); | 185 SkAutoTUnref<SkDocument> doc(SkDocument::CreatePDF(dst)); |
| 180 | 186 |
| 181 int width = src.size().width(), | 187 int width = src.size().width(), |
| 182 height = src.size().height(); | 188 height = src.size().height(); |
| 183 | 189 |
| 184 const int kLetterWidth = 612, // 8.5 * 72 | 190 const int kLetterWidth = 612, // 8.5 * 72 |
| 185 kLetterHeight = 792; // 11 * 72 | 191 kLetterHeight = 792; // 11 * 72 |
| 186 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth), | 192 const SkRect letter = SkRect::MakeWH(SkIntToScalar(kLetterWidth), |
| 187 SkIntToScalar(kLetterHeight)); | 193 SkIntToScalar(kLetterHeight)); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 206 } | 212 } |
| 207 doc->close(); | 213 doc->close(); |
| 208 dst->flush(); | 214 dst->flush(); |
| 209 return ""; | 215 return ""; |
| 210 } | 216 } |
| 211 | 217 |
| 212 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 218 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 213 | 219 |
| 214 SKPSink::SKPSink() {} | 220 SKPSink::SKPSink() {} |
| 215 | 221 |
| 216 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 222 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
| 217 SkSize size; | 223 SkSize size; |
| 218 size = src.size(); | 224 size = src.size(); |
| 219 SkPictureRecorder recorder; | 225 SkPictureRecorder recorder; |
| 220 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); | 226 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); |
| 221 if (!err.isEmpty()) { | 227 if (!err.isEmpty()) { |
| 222 return err; | 228 return err; |
| 223 } | 229 } |
| 224 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 230 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
| 225 pic->serialize(dst); | 231 pic->serialize(dst); |
| 226 return ""; | 232 return ""; |
| 227 } | 233 } |
| 228 | 234 |
| 229 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 235 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 230 | 236 |
| 231 SVGSink::SVGSink() {} | 237 SVGSink::SVGSink() {} |
| 232 | 238 |
| 233 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst) const { | 239 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const
{ |
| 234 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst)); | 240 SkAutoTUnref<SkBaseDevice> device(SkSVGDevice::Create(src.size(), dst)); |
| 235 SkCanvas canvas(device); | 241 SkCanvas canvas(device); |
| 236 return src.draw(&canvas); | 242 return src.draw(&canvas); |
| 237 } | 243 } |
| 238 | 244 |
| 239 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 245 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 240 | 246 |
| 241 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {} | 247 RasterSink::RasterSink(SkColorType colorType) : fColorType(colorType) {} |
| 242 | 248 |
| 243 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*) const { | 249 Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con
st { |
| 244 const SkISize size = src.size(); | 250 const SkISize size = src.size(); |
| 245 // If there's an appropriate alpha type for this color type, use it, otherwi
se use premul. | 251 // If there's an appropriate alpha type for this color type, use it, otherwi
se use premul. |
| 246 SkAlphaType alphaType = kPremul_SkAlphaType; | 252 SkAlphaType alphaType = kPremul_SkAlphaType; |
| 247 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType); | 253 (void)SkColorTypeValidateAlphaType(fColorType, alphaType, &alphaType); |
| 248 | 254 |
| 249 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType,
alphaType)); | 255 dst->allocPixels(SkImageInfo::Make(size.width(), size.height(), fColorType,
alphaType)); |
| 250 dst->eraseColor(SK_ColorTRANSPARENT); | 256 dst->eraseColor(SK_ColorTRANSPARENT); |
| 251 SkCanvas canvas(*dst); | 257 SkCanvas canvas(*dst); |
| 252 return src.draw(&canvas); | 258 return src.draw(&canvas); |
| 253 } | 259 } |
| 254 | 260 |
| 255 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 261 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 256 | 262 |
| 257 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink)
{} | 263 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : fMatrix(matrix), fSink(sink)
{} |
| 258 | 264 |
| 259 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const
{ | 265 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr
ing* log) const { |
| 260 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. | 266 // We turn our arguments into a Src, then draw that Src into our Sink to fil
l bitmap or stream. |
| 261 struct ProxySrc : public Src { | 267 struct ProxySrc : public Src { |
| 262 const Src& fSrc; | 268 const Src& fSrc; |
| 263 SkMatrix fMatrix; | 269 SkMatrix fMatrix; |
| 264 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) {
} | 270 ProxySrc(const Src& src, SkMatrix matrix) : fSrc(src), fMatrix(matrix) {
} |
| 265 | 271 |
| 266 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 272 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
| 267 canvas->concat(fMatrix); | 273 canvas->concat(fMatrix); |
| 268 return fSrc.draw(canvas); | 274 return fSrc.draw(canvas); |
| 269 } | 275 } |
| 270 SkISize size() const SK_OVERRIDE { return fSrc.size(); } | 276 SkISize size() const SK_OVERRIDE { return fSrc.size(); } |
| 271 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 277 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
| 272 } proxy(src, fMatrix); | 278 } proxy(src, fMatrix); |
| 273 return fSink->draw(proxy, bitmap, stream); | 279 return fSink->draw(proxy, bitmap, stream, log); |
| 274 } | 280 } |
| 275 | 281 |
| 276 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 282 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 277 | 283 |
| 278 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} | 284 ViaPipe::ViaPipe(Sink* sink) : fSink(sink) {} |
| 279 | 285 |
| 280 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const { | 286 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin
g* log) const { |
| 281 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. | 287 // We turn ourselves into another Src that draws our argument into bitmap/st
ream via pipe. |
| 282 struct ProxySrc : public Src { | 288 struct ProxySrc : public Src { |
| 283 const Src& fSrc; | 289 const Src& fSrc; |
| 284 ProxySrc(const Src& src) : fSrc(src) {} | 290 ProxySrc(const Src& src) : fSrc(src) {} |
| 285 | 291 |
| 286 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 292 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
| 287 SkISize size = this->size(); | 293 SkISize size = this->size(); |
| 288 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); | 294 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); |
| 289 SkGPipeWriter pipe; | 295 SkGPipeWriter pipe; |
| 290 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. | 296 const uint32_t kFlags = 0; // We mirror SkDeferredCanvas, which does
n't use any flags. |
| 291 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); | 297 return fSrc.draw(pipe.startRecording(&controller, kFlags, size.width
(), size.height())); |
| 292 } | 298 } |
| 293 SkISize size() const SK_OVERRIDE { return fSrc.size(); } | 299 SkISize size() const SK_OVERRIDE { return fSrc.size(); } |
| 294 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 300 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
| 295 } proxy(src); | 301 } proxy(src); |
| 296 return fSink->draw(proxy, bitmap, stream); | 302 return fSink->draw(proxy, bitmap, stream, log); |
| 297 } | 303 } |
| 298 | 304 |
| 299 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 305 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 300 | 306 |
| 301 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} | 307 ViaSerialization::ViaSerialization(Sink* sink) : fSink(sink) {} |
| 302 | 308 |
| 303 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
) const { | 309 Error ViaSerialization::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream
, SkString* log) |
| 310 const { |
| 304 // Record our Src into a picture. | 311 // Record our Src into a picture. |
| 305 SkSize size; | 312 SkSize size; |
| 306 size = src.size(); | 313 size = src.size(); |
| 307 SkPictureRecorder recorder; | 314 SkPictureRecorder recorder; |
| 308 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); | 315 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); |
| 309 if (!err.isEmpty()) { | 316 if (!err.isEmpty()) { |
| 310 return err; | 317 return err; |
| 311 } | 318 } |
| 312 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 319 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
| 313 | 320 |
| 314 // Serialize it and then deserialize it. | 321 // Serialize it and then deserialize it. |
| 315 SkDynamicMemoryWStream wStream; | 322 SkDynamicMemoryWStream wStream; |
| 316 pic->serialize(&wStream); | 323 pic->serialize(&wStream); |
| 317 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); | 324 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); |
| 318 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); | 325 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); |
| 319 | 326 |
| 320 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. | 327 // Turn that deserialized picture into a Src, draw it into our Sink to fill
bitmap or stream. |
| 321 struct ProxySrc : public Src { | 328 struct ProxySrc : public Src { |
| 322 const SkPicture* fPic; | 329 const SkPicture* fPic; |
| 323 const SkISize fSize; | 330 const SkISize fSize; |
| 324 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} | 331 ProxySrc(const SkPicture* pic, SkISize size) : fPic(pic), fSize(size) {} |
| 325 | 332 |
| 326 Error draw(SkCanvas* canvas) const SK_OVERRIDE { | 333 Error draw(SkCanvas* canvas) const SK_OVERRIDE { |
| 327 canvas->drawPicture(fPic); | 334 canvas->drawPicture(fPic); |
| 328 return ""; | 335 return ""; |
| 329 } | 336 } |
| 330 SkISize size() const SK_OVERRIDE { return fSize; } | 337 SkISize size() const SK_OVERRIDE { return fSize; } |
| 331 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 338 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
| 332 } proxy(deserialized, src.size()); | 339 } proxy(deserialized, src.size()); |
| 333 return fSink->draw(proxy, bitmap, stream); | 340 return fSink->draw(proxy, bitmap, stream, log); |
| 334 } | 341 } |
| 335 | 342 |
| 336 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 343 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 337 | 344 |
| 338 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) | 345 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) |
| 339 : fW(w) | 346 : fW(w) |
| 340 , fH(h) | 347 , fH(h) |
| 341 , fFactory(factory) | 348 , fFactory(factory) |
| 342 , fSink(sink) {} | 349 , fSink(sink) {} |
| 343 | 350 |
| 344 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream) const
{ | 351 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
ng* log) const { |
| 345 // Record our Src into a picture. | 352 // Record our Src into a picture. |
| 346 SkSize size; | 353 SkSize size; |
| 347 size = src.size(); | 354 size = src.size(); |
| 348 SkPictureRecorder recorder; | 355 SkPictureRecorder recorder; |
| 349 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); | 356 Error err = src.draw(recorder.beginRecording(size.width(), size.height(), fF
actory.get())); |
| 350 if (!err.isEmpty()) { | 357 if (!err.isEmpty()) { |
| 351 return err; | 358 return err; |
| 352 } | 359 } |
| 353 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); | 360 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); |
| 354 | 361 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); | 396 SkAutoTUnref<SkImage> image(surfaces[i+xTiles*j]->newImageSn
apshot()); |
| 390 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); | 397 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(
j*fH)); |
| 391 } | 398 } |
| 392 } | 399 } |
| 393 surfaces.unrefAll(); | 400 surfaces.unrefAll(); |
| 394 return ""; | 401 return ""; |
| 395 } | 402 } |
| 396 SkISize size() const SK_OVERRIDE { return fSize; } | 403 SkISize size() const SK_OVERRIDE { return fSize; } |
| 397 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. | 404 Name name() const SK_OVERRIDE { sk_throw(); return ""; } // No one shou
ld be calling this. |
| 398 } proxy(fW, fH, pic, src.size()); | 405 } proxy(fW, fH, pic, src.size()); |
| 399 return fSink->draw(proxy, bitmap, stream); | 406 return fSink->draw(proxy, bitmap, stream, log); |
| 400 } | 407 } |
| 401 | 408 |
| 402 } // namespace DM | 409 } // namespace DM |
| OLD | NEW |