OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "DMSrcSink.h" | 8 #include "DMSrcSink.h" |
9 #include "SamplePipeControllers.h" | 9 #include "SamplePipeControllers.h" |
10 #include "SkCodec.h" | 10 #include "SkCodec.h" |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 if (!stream) { | 281 if (!stream) { |
282 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); | 282 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); |
283 } | 283 } |
284 SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream, &lazy_decode
_bitmap)); | 284 SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream, &lazy_decode
_bitmap)); |
285 if (!pic) { | 285 if (!pic) { |
286 return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str())
; | 286 return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str())
; |
287 } | 287 } |
288 stream.reset((SkStream*)NULL); // Might as well drop this when we're done w
ith it. | 288 stream.reset((SkStream*)NULL); // Might as well drop this when we're done w
ith it. |
289 | 289 |
290 canvas->clipRect(kSKPViewport); | 290 canvas->clipRect(kSKPViewport); |
291 // Testing TextBlob batching requires that we see individual text blobs more
than once | |
292 // TODO remove this and add a flag to DM so we can run skps multiple times | |
293 //#define DOUBLE_LOOP | |
294 #ifdef DOUBLE_LOOP | |
295 { | |
296 SkAutoCanvasRestore acr(canvas, true); | |
297 #endif | |
298 canvas->drawPicture(pic); | |
299 #ifdef DOUBLE_LOOP | |
300 } | |
301 canvas->clear(0); | |
302 canvas->drawPicture(pic); | 291 canvas->drawPicture(pic); |
303 #endif | |
304 return ""; | 292 return ""; |
305 } | 293 } |
306 | 294 |
307 SkISize SKPSrc::size() const { | 295 SkISize SKPSrc::size() const { |
308 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str())); | 296 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str())); |
309 if (!stream) { | 297 if (!stream) { |
310 return SkISize::Make(0,0); | 298 return SkISize::Make(0,0); |
311 } | 299 } |
312 SkPictInfo info; | 300 SkPictInfo info; |
313 if (!SkPicture::InternalOnly_StreamIsSKP(stream, &info)) { | 301 if (!SkPicture::InternalOnly_StreamIsSKP(stream, &info)) { |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 } | 701 } |
714 pic.reset(recorder.endRecordingAsPicture()); | 702 pic.reset(recorder.endRecordingAsPicture()); |
715 } | 703 } |
716 canvas->drawPicture(pic); | 704 canvas->drawPicture(pic); |
717 return ""; | 705 return ""; |
718 }); | 706 }); |
719 } | 707 } |
720 | 708 |
721 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ | 709 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
722 | 710 |
| 711 // Draw the Src twice. This can help exercise caching. |
| 712 Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri
ng* log) const { |
| 713 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas*
canvas) -> Error { |
| 714 for (int i = 0; i < 2; i++) { |
| 715 SkAutoCanvasRestore acr(canvas, true/*save now*/); |
| 716 canvas->clear(SK_ColorTRANSPARENT); |
| 717 Error err = src.draw(canvas); |
| 718 if (err.isEmpty()) { |
| 719 return err; |
| 720 } |
| 721 } |
| 722 return ""; |
| 723 }); |
| 724 } |
| 725 |
| 726 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~*/ |
| 727 |
723 // This is like SkRecords::Draw, in that it plays back SkRecords ops into a Canv
as. | 728 // This is like SkRecords::Draw, in that it plays back SkRecords ops into a Canv
as. |
724 // Unlike SkRecords::Draw, it builds a single-op sub-picture out of each Draw-ty
pe op. | 729 // Unlike SkRecords::Draw, it builds a single-op sub-picture out of each Draw-ty
pe op. |
725 // This is an only-slightly-exaggerated simluation of Blink's Slimming Paint pic
tures. | 730 // This is an only-slightly-exaggerated simluation of Blink's Slimming Paint pic
tures. |
726 struct DrawsAsSingletonPictures { | 731 struct DrawsAsSingletonPictures { |
727 SkCanvas* fCanvas; | 732 SkCanvas* fCanvas; |
728 | 733 |
729 SK_CREATE_MEMBER_DETECTOR(paint); | 734 SK_CREATE_MEMBER_DETECTOR(paint); |
730 | 735 |
731 template <typename T> | 736 template <typename T> |
732 void draw(const T& op, SkCanvas* canvas) { | 737 void draw(const T& op, SkCanvas* canvas) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
775 skr.visit<void>(i, drawsAsSingletonPictures); | 780 skr.visit<void>(i, drawsAsSingletonPictures); |
776 } | 781 } |
777 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); | 782 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); |
778 | 783 |
779 canvas->drawPicture(macroPic); | 784 canvas->drawPicture(macroPic); |
780 return ""; | 785 return ""; |
781 }); | 786 }); |
782 } | 787 } |
783 | 788 |
784 } // namespace DM | 789 } // namespace DM |
OLD | NEW |