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 "SkAndroidCodec.h" | 9 #include "SkAndroidCodec.h" |
10 #include "SkCodec.h" | 10 #include "SkCodec.h" |
(...skipping 13 matching lines...) Expand all Loading... | |
24 #include "SkRecordDraw.h" | 24 #include "SkRecordDraw.h" |
25 #include "SkRecorder.h" | 25 #include "SkRecorder.h" |
26 #include "SkRemote.h" | 26 #include "SkRemote.h" |
27 #include "SkSVGCanvas.h" | 27 #include "SkSVGCanvas.h" |
28 #include "SkStream.h" | 28 #include "SkStream.h" |
29 #include "SkTLogic.h" | 29 #include "SkTLogic.h" |
30 #include "SkXMLWriter.h" | 30 #include "SkXMLWriter.h" |
31 #include "SkSwizzler.h" | 31 #include "SkSwizzler.h" |
32 #include <functional> | 32 #include <functional> |
33 | 33 |
34 #ifdef SK_MOJO | |
35 #include "SkMojo.mojom.h" | |
36 #endif | |
37 | |
34 DEFINE_bool(multiPage, false, "For document-type backends, render the source" | 38 DEFINE_bool(multiPage, false, "For document-type backends, render the source" |
35 " into multiple pages"); | 39 " into multiple pages"); |
36 | 40 |
37 static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) { | 41 static bool lazy_decode_bitmap(const void* src, size_t size, SkBitmap* dst) { |
38 SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size)); | 42 SkAutoTUnref<SkData> encoded(SkData::NewWithCopy(src, size)); |
39 return encoded && SkDEPRECATED_InstallDiscardablePixelRef(encoded, dst); | 43 return encoded && SkDEPRECATED_InstallDiscardablePixelRef(encoded, dst); |
40 } | 44 } |
41 | 45 |
42 namespace DM { | 46 namespace DM { |
43 | 47 |
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1226 if (err.isEmpty()) { | 1230 if (err.isEmpty()) { |
1227 return err; | 1231 return err; |
1228 } | 1232 } |
1229 } | 1233 } |
1230 return check_against_reference(bitmap, src, fSink); | 1234 return check_against_reference(bitmap, src, fSink); |
1231 }); | 1235 }); |
1232 } | 1236 } |
1233 | 1237 |
1234 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | 1238 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ |
1235 | 1239 |
1240 #ifdef SK_MOJO | |
1241 Error ViaMojo::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkS tring* log) const { | |
1242 SkPictureRecorder recorder; | |
1243 SkRect size = SkRect::Make(SkIRect::MakeSize(src.size())); | |
1244 Error err = src.draw(recorder.beginRecording(size)); | |
1245 if (!err.isEmpty()) { | |
1246 return err; | |
1247 } | |
1248 SkAutoTUnref<SkPicture> skPicture(recorder.endRecording()); | |
1249 | |
1250 SkASSERT(skPicture); | |
1251 SkDynamicMemoryWStream buffer; | |
1252 skPicture->serialize(&buffer); | |
1253 skPicture.reset(); | |
1254 SkMojo::FlattenedPicturePtr mojoPicture = SkMojo::FlattenedPicture::New( ); | |
mtklein
2016/01/29 18:51:54
Just curious, is this a typedef for something like
| |
1255 mojoPicture->data.resize(buffer.bytesWritten()); | |
1256 buffer.copyTo(mojoPicture->data.data()); | |
1257 buffer.reset(); | |
1258 SkASSERT(mojoPicture.get() && mojoPicture->data); | |
1259 | |
1260 size_t flatSize = mojoPicture->GetSerializedSize(); | |
1261 SkAutoMalloc storage(flatSize); | |
1262 if (!mojoPicture->Serialize(storage.get(), flatSize)) { | |
1263 return "SkMojo::FlattenedPicture::Serialize failed"; | |
1264 } | |
1265 mojoPicture = SkMojo::FlattenedPicture::New(); | |
1266 mojoPicture->Deserialize(storage.get()); | |
1267 storage.free(); | |
1268 if (!mojoPicture) { | |
1269 return "SkMojo::FlattenedPicture::Deserialize failed"; | |
1270 } | |
1271 SkMemoryStream tmpStream(mojoPicture->data.data(), | |
1272 mojoPicture->data.size()); | |
1273 skPicture.reset(SkPicture::CreateFromStream(&tmpStream)); | |
1274 mojoPicture.reset(); | |
1275 auto fn = [&](SkCanvas* canvas) -> Error { | |
1276 canvas->drawPicture(skPicture.get()); | |
1277 return check_against_reference(bitmap, src, fSink); | |
1278 }; | |
1279 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), fn); | |
1280 } | |
1281 #else // not SK_MOJO | |
mtklein
2016/01/29 18:51:54
This comment is probably no longer useful.
| |
1282 Error ViaMojo::draw(const Src&, SkBitmap*, SkWStream*, SkString*) const { | |
1283 return "Mojo is missing!"; | |
1284 } | |
1285 #endif | |
1286 | |
1287 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ | |
1288 | |
1236 // This is like SkRecords::Draw, in that it plays back SkRecords ops into a Canv as. | 1289 // This is like SkRecords::Draw, in that it plays back SkRecords ops into a Canv as. |
1237 // Unlike SkRecords::Draw, it builds a single-op sub-picture out of each Draw-ty pe op. | 1290 // Unlike SkRecords::Draw, it builds a single-op sub-picture out of each Draw-ty pe op. |
1238 // This is an only-slightly-exaggerated simluation of Blink's Slimming Paint pic tures. | 1291 // This is an only-slightly-exaggerated simluation of Blink's Slimming Paint pic tures. |
1239 struct DrawsAsSingletonPictures { | 1292 struct DrawsAsSingletonPictures { |
1240 SkCanvas* fCanvas; | 1293 SkCanvas* fCanvas; |
1241 const SkDrawableList& fDrawables; | 1294 const SkDrawableList& fDrawables; |
1242 | 1295 |
1243 template <typename T> | 1296 template <typename T> |
1244 void draw(const T& op, SkCanvas* canvas) { | 1297 void draw(const T& op, SkCanvas* canvas) { |
1245 // We must pass SkMatrix::I() as our initial matrix. | 1298 // We must pass SkMatrix::I() as our initial matrix. |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1295 skr.visit<void>(i, drawsAsSingletonPictures); | 1348 skr.visit<void>(i, drawsAsSingletonPictures); |
1296 } | 1349 } |
1297 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); | 1350 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); |
1298 | 1351 |
1299 canvas->drawPicture(macroPic); | 1352 canvas->drawPicture(macroPic); |
1300 return check_against_reference(bitmap, src, fSink); | 1353 return check_against_reference(bitmap, src, fSink); |
1301 }); | 1354 }); |
1302 } | 1355 } |
1303 | 1356 |
1304 } // namespace DM | 1357 } // namespace DM |
OLD | NEW |