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

Side by Side Diff: dm/DMSrcSink.cpp

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