Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: dm/DMSrcSink.cpp

Issue 1513323002: DM: fix `--config $VIA-pdf` to not crash (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2015-12-10 (Thursday) 15:08:03 EST Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « dm/DMSrcSink.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "SkAndroidCodec.h" 10 #include "SkAndroidCodec.h"
(...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 SkCanvas canvas(*dst); 985 SkCanvas canvas(*dst);
986 return src.draw(&canvas); 986 return src.draw(&canvas);
987 } 987 }
988 988
989 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 989 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
990 990
991 // Handy for front-patching a Src. Do whatever up-front work you need, then cal l draw_to_canvas(), 991 // Handy for front-patching a Src. Do whatever up-front work you need, then cal l draw_to_canvas(),
992 // passing the Sink draw() arguments, a size, and a function draws into an SkCan vas. 992 // passing the Sink draw() arguments, a size, and a function draws into an SkCan vas.
993 // Several examples below. 993 // Several examples below.
994 994
995 static Error draw_to_canvas(Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkS tring* log, 995 static Error draw_to_canvas(Name name, Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log,
996 SkISize size, std::function<Error(SkCanvas*)> draw) { 996 SkISize size, std::function<Error(SkCanvas*)> draw) {
997 class ProxySrc : public Src { 997 class ProxySrc : public Src {
998 public: 998 public:
999 ProxySrc(SkISize size, std::function<Error(SkCanvas*)> draw) : fSize(siz e), fDraw(draw) {} 999 ProxySrc(SkISize size, Name name, std::function<Error(SkCanvas*)> draw)
1000 : fSize(size), fName(name), fDraw(draw) {}
1000 Error draw(SkCanvas* canvas) const override { return fDraw(canvas); } 1001 Error draw(SkCanvas* canvas) const override { return fDraw(canvas); }
1001 Name name() const override { sk_throw(); return ""; } // Won't be called. 1002 Name name() const override { return fName; }
1002 SkISize size() const override { return fSize; } 1003 SkISize size() const override { return fSize; }
1003 private: 1004 private:
1004 SkISize fSize; 1005 SkISize fSize;
1006 Name fName;
1005 std::function<Error(SkCanvas*)> fDraw; 1007 std::function<Error(SkCanvas*)> fDraw;
1006 }; 1008 };
1007 return sink->draw(ProxySrc(size, draw), bitmap, stream, log); 1009 return sink->draw(ProxySrc(size, name, draw), bitmap, stream, log);
1008 } 1010 }
1009 1011
1010 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1012 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1011 1013
1012 static SkISize auto_compute_translate(SkMatrix* matrix, int srcW, int srcH) { 1014 static SkISize auto_compute_translate(SkMatrix* matrix, int srcW, int srcH) {
1013 SkRect bounds = SkRect::MakeIWH(srcW, srcH); 1015 SkRect bounds = SkRect::MakeIWH(srcW, srcH);
1014 matrix->mapRect(&bounds); 1016 matrix->mapRect(&bounds);
1015 matrix->postTranslate(-bounds.x(), -bounds.y()); 1017 matrix->postTranslate(-bounds.x(), -bounds.y());
1016 return SkISize::Make(SkScalarRoundToInt(bounds.width()), SkScalarRoundToInt( bounds.height())); 1018 return SkISize::Make(SkScalarRoundToInt(bounds.width()), SkScalarRoundToInt( bounds.height()));
1017 } 1019 }
1018 1020
1019 ViaMatrix::ViaMatrix(SkMatrix matrix, Sink* sink) : Via(sink), fMatrix(matrix) { } 1021 ViaMatrix::ViaMatrix(Name name, SkMatrix matrix, Sink* sink) : Via(name, sink), fMatrix(matrix) {}
1020 1022
1021 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr ing* log) const { 1023 Error ViaMatrix::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr ing* log) const {
1022 SkMatrix matrix = fMatrix; 1024 SkMatrix matrix = fMatrix;
1023 SkISize size = auto_compute_translate(&matrix, src.size().width(), src.size( ).height()); 1025 SkISize size = auto_compute_translate(&matrix, src.size().width(), src.size( ).height());
1024 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) { 1026 Name name = this->decorateName(src);
1027 return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) {
1025 canvas->concat(matrix); 1028 canvas->concat(matrix);
1026 return src.draw(canvas); 1029 return src.draw(canvas);
1027 }); 1030 });
1028 } 1031 }
1029 1032
1030 // Undoes any flip or 90 degree rotate without changing the scale of the bitmap. 1033 // Undoes any flip or 90 degree rotate without changing the scale of the bitmap.
1031 // This should be pixel-preserving. 1034 // This should be pixel-preserving.
1032 ViaUpright::ViaUpright(SkMatrix matrix, Sink* sink) : Via(sink), fMatrix(matrix) {} 1035 ViaUpright::ViaUpright(Name name, SkMatrix matrix, Sink* sink) : Via(name, sink) , fMatrix(matrix) {}
1033 1036
1034 Error ViaUpright::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt ring* log) const { 1037 Error ViaUpright::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt ring* log) const {
1035 Error err = fSink->draw(src, bitmap, stream, log); 1038 Error err = fSink->draw(src, bitmap, stream, log);
1036 if (!err.isEmpty()) { 1039 if (!err.isEmpty()) {
1037 return err; 1040 return err;
1038 } 1041 }
1039 1042
1040 SkMatrix inverse; 1043 SkMatrix inverse;
1041 if (!fMatrix.rectStaysRect() || !fMatrix.invert(&inverse)) { 1044 if (!fMatrix.rectStaysRect() || !fMatrix.invert(&inverse)) {
1042 return "Cannot upright --matrix."; 1045 return "Cannot upright --matrix.";
(...skipping 16 matching lines...) Expand all
1059 1062
1060 *bitmap = uprighted; 1063 *bitmap = uprighted;
1061 bitmap->lockPixels(); 1064 bitmap->lockPixels();
1062 return ""; 1065 return "";
1063 } 1066 }
1064 1067
1065 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1068 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1066 1069
1067 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin g* log) const { 1070 Error ViaPipe::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStrin g* log) const {
1068 auto size = src.size(); 1071 auto size = src.size();
1069 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) { 1072 Name name = this->decorateName(src);
1073 return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) {
1070 PipeController controller(canvas, &SkImageDecoder::DecodeMemory); 1074 PipeController controller(canvas, &SkImageDecoder::DecodeMemory);
1071 SkGPipeWriter pipe; 1075 SkGPipeWriter pipe;
1072 const uint32_t kFlags = 0; 1076 const uint32_t kFlags = 0;
1073 return src.draw(pipe.startRecording(&controller, kFlags, size.width(), s ize.height())); 1077 return src.draw(pipe.startRecording(&controller, kFlags, size.width(), s ize.height()));
1074 }); 1078 });
1075 } 1079 }
1076 1080
1077 Error ViaRemote::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr ing* log) const { 1081 Error ViaRemote::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStr ing* log) const {
1078 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* target) { 1082 Name name = this->decorateName(src);
1083 return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCa nvas* target) {
1079 SkAutoTDelete<SkRemote::Encoder> decoder(SkRemote::NewDecoder(target)); 1084 SkAutoTDelete<SkRemote::Encoder> decoder(SkRemote::NewDecoder(target));
1080 SkAutoTDelete<SkRemote::Encoder> cache(fCache ? SkRemote::NewCachingEn coder(decoder) 1085 SkAutoTDelete<SkRemote::Encoder> cache(fCache ? SkRemote::NewCachingEn coder(decoder)
1081 : nullptr); 1086 : nullptr);
1082 SkAutoTDelete<SkCanvas> canvas(SkRemote::NewCanvas(cache ? cache : decod er)); 1087 SkAutoTDelete<SkCanvas> canvas(SkRemote::NewCanvas(cache ? cache : decod er));
1083 return src.draw(canvas); 1088 return src.draw(canvas);
1084 }); 1089 });
1085 } 1090 }
1086 1091
1087 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1092 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1088 1093
1089 Error ViaSerialization::draw( 1094 Error ViaSerialization::draw(
1090 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t { 1095 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t {
1091 // Record our Src into a picture. 1096 // Record our Src into a picture.
1092 auto size = src.size(); 1097 auto size = src.size();
1093 SkPictureRecorder recorder; 1098 SkPictureRecorder recorder;
1094 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), 1099 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()),
1095 SkIntToScalar(size.height()))); 1100 SkIntToScalar(size.height())));
1096 if (!err.isEmpty()) { 1101 if (!err.isEmpty()) {
1097 return err; 1102 return err;
1098 } 1103 }
1099 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 1104 SkAutoTUnref<SkPicture> pic(recorder.endRecording());
1100 1105
1101 // Serialize it and then deserialize it. 1106 // Serialize it and then deserialize it.
1102 SkDynamicMemoryWStream wStream; 1107 SkDynamicMemoryWStream wStream;
1103 pic->serialize(&wStream); 1108 pic->serialize(&wStream);
1104 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); 1109 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream());
1105 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &l azy_decode_bitmap)); 1110 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream, &l azy_decode_bitmap));
1111 Name name = this->decorateName(src);
1106 1112
1107 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) { 1113 return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) {
1108 canvas->drawPicture(deserialized); 1114 canvas->drawPicture(deserialized);
1109 return ""; 1115 return "";
1110 }); 1116 });
1111 } 1117 }
1112 1118
1113 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1119 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1114 1120
1115 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) 1121 ViaTiles::ViaTiles(Name name, int w, int h, SkBBHFactory* factory, Sink* sink)
1116 : Via(sink) 1122 : Via(name, sink)
1117 , fW(w) 1123 , fW(w)
1118 , fH(h) 1124 , fH(h)
1119 , fFactory(factory) {} 1125 , fFactory(factory) {}
1120 1126
1121 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const { 1127 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const {
1122 auto size = src.size(); 1128 auto size = src.size();
1123 SkPictureRecorder recorder; 1129 SkPictureRecorder recorder;
1124 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), 1130 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()),
1125 SkIntToScalar(size.height()), 1131 SkIntToScalar(size.height()),
1126 fFactory.get())); 1132 fFactory.get()));
1127 if (!err.isEmpty()) { 1133 if (!err.isEmpty()) {
1128 return err; 1134 return err;
1129 } 1135 }
1130 SkAutoTUnref<SkPicture> pic(recorder.endRecordingAsPicture()); 1136 SkAutoTUnref<SkPicture> pic(recorder.endRecordingAsPicture());
1137 Name name = this->decorateName(src);
1131 1138
1132 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) { 1139 return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCa nvas* canvas) {
1133 const int xTiles = (size.width() + fW - 1) / fW, 1140 const int xTiles = (size.width() + fW - 1) / fW,
1134 yTiles = (size.height() + fH - 1) / fH; 1141 yTiles = (size.height() + fH - 1) / fH;
1135 SkMultiPictureDraw mpd(xTiles*yTiles); 1142 SkMultiPictureDraw mpd(xTiles*yTiles);
1136 SkTDArray<SkSurface*> surfaces; 1143 SkTDArray<SkSurface*> surfaces;
1137 surfaces.setReserve(xTiles*yTiles); 1144 surfaces.setReserve(xTiles*yTiles);
1138 1145
1139 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH); 1146 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH);
1140 for (int j = 0; j < yTiles; j++) { 1147 for (int j = 0; j < yTiles; j++) {
1141 for (int i = 0; i < xTiles; i++) { 1148 for (int i = 0; i < xTiles; i++) {
1142 // This lets our ultimate Sink determine the best kind of surfac e. 1149 // This lets our ultimate Sink determine the best kind of surfac e.
(...skipping 21 matching lines...) Expand all
1164 }); 1171 });
1165 } 1172 }
1166 1173
1167 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1174 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1168 1175
1169 // Draw the Src into two pictures, then draw the second picture into the wrapped Sink. 1176 // Draw the Src into two pictures, then draw the second picture into the wrapped Sink.
1170 // This tests that any shortcuts we may take while recording that second picture are legal. 1177 // This tests that any shortcuts we may take while recording that second picture are legal.
1171 Error ViaSecondPicture::draw( 1178 Error ViaSecondPicture::draw(
1172 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t { 1179 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t {
1173 auto size = src.size(); 1180 auto size = src.size();
1174 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error { 1181 Name name = this->decorateName(src);
1182 return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error {
1175 SkPictureRecorder recorder; 1183 SkPictureRecorder recorder;
1176 SkAutoTUnref<SkPicture> pic; 1184 SkAutoTUnref<SkPicture> pic;
1177 for (int i = 0; i < 2; i++) { 1185 for (int i = 0; i < 2; i++) {
1178 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.widt h()), 1186 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.widt h()),
1179 SkIntToScalar(size.heig ht()))); 1187 SkIntToScalar(size.heig ht())));
1180 if (!err.isEmpty()) { 1188 if (!err.isEmpty()) {
1181 return err; 1189 return err;
1182 } 1190 }
1183 pic.reset(recorder.endRecordingAsPicture()); 1191 pic.reset(recorder.endRecordingAsPicture());
1184 } 1192 }
1185 canvas->drawPicture(pic); 1193 canvas->drawPicture(pic);
1186 return ""; 1194 return "";
1187 }); 1195 });
1188 } 1196 }
1189 1197
1190 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1198 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1191 1199
1192 // Draw the Src twice. This can help exercise caching. 1200 // Draw the Src twice. This can help exercise caching.
1193 Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const { 1201 Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const {
1194 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) -> Error { 1202 Name name = this->decorateName(src);
1203 return draw_to_canvas(name, fSink, bitmap, stream, log, src.size(), [&](SkCa nvas* canvas) -> Error {
1195 for (int i = 0; i < 2; i++) { 1204 for (int i = 0; i < 2; i++) {
1196 SkAutoCanvasRestore acr(canvas, true/*save now*/); 1205 SkAutoCanvasRestore acr(canvas, true/*save now*/);
1197 canvas->clear(SK_ColorTRANSPARENT); 1206 canvas->clear(SK_ColorTRANSPARENT);
1198 Error err = src.draw(canvas); 1207 Error err = src.draw(canvas);
1199 if (err.isEmpty()) { 1208 if (err.isEmpty()) {
1200 return err; 1209 return err;
1201 } 1210 }
1202 } 1211 }
1203 return ""; 1212 return "";
1204 }); 1213 });
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1236 skstd::enable_if_t<!(T::kTags & SkRecords::kDraw_Tag), void> operator()(cons t T& op) { 1245 skstd::enable_if_t<!(T::kTags & SkRecords::kDraw_Tag), void> operator()(cons t T& op) {
1237 this->draw(op, fCanvas); 1246 this->draw(op, fCanvas);
1238 } 1247 }
1239 }; 1248 };
1240 1249
1241 // Record Src into a picture, then record it into a macro picture with a sub-pic ture for each draw. 1250 // Record Src into a picture, then record it into a macro picture with a sub-pic ture for each draw.
1242 // Then play back that macro picture into our wrapped sink. 1251 // Then play back that macro picture into our wrapped sink.
1243 Error ViaSingletonPictures::draw( 1252 Error ViaSingletonPictures::draw(
1244 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t { 1253 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t {
1245 auto size = src.size(); 1254 auto size = src.size();
1246 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error { 1255 Name name = this->decorateName(src);
1256 return draw_to_canvas(name, fSink, bitmap, stream, log, size, [&](SkCanvas* canvas) -> Error {
1247 // Use low-level (Skia-private) recording APIs so we can read the SkReco rd. 1257 // Use low-level (Skia-private) recording APIs so we can read the SkReco rd.
1248 SkRecord skr; 1258 SkRecord skr;
1249 SkRecorder recorder(&skr, size.width(), size.height()); 1259 SkRecorder recorder(&skr, size.width(), size.height());
1250 Error err = src.draw(&recorder); 1260 Error err = src.draw(&recorder);
1251 if (!err.isEmpty()) { 1261 if (!err.isEmpty()) {
1252 return err; 1262 return err;
1253 } 1263 }
1254 1264
1255 // Record our macro-picture, with each draw op as its own sub-picture. 1265 // Record our macro-picture, with each draw op as its own sub-picture.
1256 SkPictureRecorder macroRec; 1266 SkPictureRecorder macroRec;
(...skipping 11 matching lines...) Expand all
1268 skr.visit<void>(i, drawsAsSingletonPictures); 1278 skr.visit<void>(i, drawsAsSingletonPictures);
1269 } 1279 }
1270 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); 1280 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture());
1271 1281
1272 canvas->drawPicture(macroPic); 1282 canvas->drawPicture(macroPic);
1273 return ""; 1283 return "";
1274 }); 1284 });
1275 } 1285 }
1276 1286
1277 } // namespace DM 1287 } // namespace DM
OLDNEW
« no previous file with comments | « dm/DMSrcSink.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698