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

Side by Side Diff: dm/DMSrcSink.cpp

Issue 1811703002: return pictures as sk_sp (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 9 months 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
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 "SkAndroidCodec.h" 9 #include "SkAndroidCodec.h"
10 #include "SkCodec.h" 10 #include "SkCodec.h"
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after
879 879
880 static const SkRect kSKPViewport = {0,0, 1000,1000}; 880 static const SkRect kSKPViewport = {0,0, 1000,1000};
881 881
882 SKPSrc::SKPSrc(Path path) : fPath(path) {} 882 SKPSrc::SKPSrc(Path path) : fPath(path) {}
883 883
884 Error SKPSrc::draw(SkCanvas* canvas) const { 884 Error SKPSrc::draw(SkCanvas* canvas) const {
885 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str())); 885 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(fPath.c_str()));
886 if (!stream) { 886 if (!stream) {
887 return SkStringPrintf("Couldn't read %s.", fPath.c_str()); 887 return SkStringPrintf("Couldn't read %s.", fPath.c_str());
888 } 888 }
889 SkAutoTUnref<SkPicture> pic(SkPicture::CreateFromStream(stream)); 889 sk_sp<SkPicture> pic(SkPicture::MakeFromStream(stream));
890 if (!pic) { 890 if (!pic) {
891 return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str()) ; 891 return SkStringPrintf("Couldn't decode %s as a picture.", fPath.c_str()) ;
892 } 892 }
893 stream.reset((SkStream*)nullptr); // Might as well drop this when we're don e with it. 893 stream.reset((SkStream*)nullptr); // Might as well drop this when we're don e with it.
894 894
895 canvas->clipRect(kSKPViewport); 895 canvas->clipRect(kSKPViewport);
896 canvas->drawPicture(pic); 896 canvas->drawPicture(pic);
897 return ""; 897 return "";
898 } 898 }
899 899
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 SKPSink::SKPSink() {} 1092 SKPSink::SKPSink() {}
1093 1093
1094 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const { 1094 Error SKPSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
1095 SkSize size; 1095 SkSize size;
1096 size = src.size(); 1096 size = src.size();
1097 SkPictureRecorder recorder; 1097 SkPictureRecorder recorder;
1098 Error err = src.draw(recorder.beginRecording(size.width(), size.height())); 1098 Error err = src.draw(recorder.beginRecording(size.width(), size.height()));
1099 if (!err.isEmpty()) { 1099 if (!err.isEmpty()) {
1100 return err; 1100 return err;
1101 } 1101 }
1102 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 1102 recorder.finishRecordingAsPicture()->serialize(dst);
1103 pic->serialize(dst);
1104 return ""; 1103 return "";
1105 } 1104 }
1106 1105
1107 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1106 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1108 1107
1109 SVGSink::SVGSink() {} 1108 SVGSink::SVGSink() {}
1110 1109
1111 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const { 1110 Error SVGSink::draw(const Src& src, SkBitmap*, SkWStream* dst, SkString*) const {
1112 SkAutoTDelete<SkXMLWriter> xmlWriter(new SkXMLStreamWriter(dst)); 1111 SkAutoTDelete<SkXMLWriter> xmlWriter(new SkXMLStreamWriter(dst));
1113 SkAutoTUnref<SkCanvas> canvas(SkSVGCanvas::Create( 1112 SkAutoTUnref<SkCanvas> canvas(SkSVGCanvas::Create(
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
1249 Error ViaSerialization::draw( 1248 Error ViaSerialization::draw(
1250 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t { 1249 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t {
1251 // Record our Src into a picture. 1250 // Record our Src into a picture.
1252 auto size = src.size(); 1251 auto size = src.size();
1253 SkPictureRecorder recorder; 1252 SkPictureRecorder recorder;
1254 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), 1253 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()),
1255 SkIntToScalar(size.height()))); 1254 SkIntToScalar(size.height())));
1256 if (!err.isEmpty()) { 1255 if (!err.isEmpty()) {
1257 return err; 1256 return err;
1258 } 1257 }
1259 SkAutoTUnref<SkPicture> pic(recorder.endRecording()); 1258 sk_sp<SkPicture> pic(recorder.finishRecordingAsPicture());
1260 1259
1261 // Serialize it and then deserialize it. 1260 // Serialize it and then deserialize it.
1262 SkDynamicMemoryWStream wStream; 1261 SkDynamicMemoryWStream wStream;
1263 pic->serialize(&wStream); 1262 pic->serialize(&wStream);
1264 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream()); 1263 SkAutoTDelete<SkStream> rStream(wStream.detachAsStream());
1265 SkAutoTUnref<SkPicture> deserialized(SkPicture::CreateFromStream(rStream)); 1264 sk_sp<SkPicture> deserialized(SkPicture::MakeFromStream(rStream));
1266 1265
1267 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) { 1266 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) {
1268 canvas->drawPicture(deserialized); 1267 canvas->drawPicture(deserialized);
1269 return check_against_reference(bitmap, src, fSink); 1268 return check_against_reference(bitmap, src, fSink);
1270 }); 1269 });
1271 } 1270 }
1272 1271
1273 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1272 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1274 1273
1275 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink) 1274 ViaTiles::ViaTiles(int w, int h, SkBBHFactory* factory, Sink* sink)
1276 : Via(sink) 1275 : Via(sink)
1277 , fW(w) 1276 , fW(w)
1278 , fH(h) 1277 , fH(h)
1279 , fFactory(factory) {} 1278 , fFactory(factory) {}
1280 1279
1281 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const { 1280 Error ViaTiles::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const {
1282 auto size = src.size(); 1281 auto size = src.size();
1283 SkPictureRecorder recorder; 1282 SkPictureRecorder recorder;
1284 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()), 1283 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()),
1285 SkIntToScalar(size.height()), 1284 SkIntToScalar(size.height()),
1286 fFactory.get())); 1285 fFactory.get()));
1287 if (!err.isEmpty()) { 1286 if (!err.isEmpty()) {
1288 return err; 1287 return err;
1289 } 1288 }
1290 SkAutoTUnref<SkPicture> pic(recorder.endRecordingAsPicture()); 1289 sk_sp<SkPicture> pic(recorder.finishRecordingAsPicture());
1291 1290
1292 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) { 1291 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), [&](SkCanvas* canvas) {
1293 const int xTiles = (size.width() + fW - 1) / fW, 1292 const int xTiles = (size.width() + fW - 1) / fW,
1294 yTiles = (size.height() + fH - 1) / fH; 1293 yTiles = (size.height() + fH - 1) / fH;
1295 SkMultiPictureDraw mpd(xTiles*yTiles); 1294 SkMultiPictureDraw mpd(xTiles*yTiles);
1296 SkTDArray<SkSurface*> surfaces; 1295 SkTDArray<SkSurface*> surfaces;
1297 surfaces.setReserve(xTiles*yTiles); 1296 surfaces.setReserve(xTiles*yTiles);
1298 1297
1299 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH); 1298 SkImageInfo info = canvas->imageInfo().makeWH(fW, fH);
1300 for (int j = 0; j < yTiles; j++) { 1299 for (int j = 0; j < yTiles; j++) {
1301 for (int i = 0; i < xTiles; i++) { 1300 for (int i = 0; i < xTiles; i++) {
1302 // This lets our ultimate Sink determine the best kind of surfac e. 1301 // This lets our ultimate Sink determine the best kind of surfac e.
1303 // E.g., if it's a GpuSink, the surfaces and images are textures . 1302 // E.g., if it's a GpuSink, the surfaces and images are textures .
1304 SkSurface* s = canvas->newSurface(info); 1303 SkSurface* s = canvas->newSurface(info);
1305 if (!s) { 1304 if (!s) {
1306 s = SkSurface::NewRaster(info); // Some canvases can't crea te surfaces. 1305 s = SkSurface::NewRaster(info); // Some canvases can't crea te surfaces.
1307 } 1306 }
1308 surfaces.push(s); 1307 surfaces.push(s);
1309 SkCanvas* c = s->getCanvas(); 1308 SkCanvas* c = s->getCanvas();
1310 c->translate(SkIntToScalar(-i * fW), 1309 c->translate(SkIntToScalar(-i * fW),
1311 SkIntToScalar(-j * fH)); // Line up the canvas wit h this tile. 1310 SkIntToScalar(-j * fH)); // Line up the canvas wit h this tile.
1312 mpd.add(c, pic); 1311 mpd.add(c, pic.get());
1313 } 1312 }
1314 } 1313 }
1315 mpd.draw(); 1314 mpd.draw();
1316 for (int j = 0; j < yTiles; j++) { 1315 for (int j = 0; j < yTiles; j++) {
1317 for (int i = 0; i < xTiles; i++) { 1316 for (int i = 0; i < xTiles; i++) {
1318 sk_sp<SkImage> image(surfaces[i+xTiles*j]->makeImageSnapshot()); 1317 sk_sp<SkImage> image(surfaces[i+xTiles*j]->makeImageSnapshot());
1319 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(j*fH )); 1318 canvas->drawImage(image, SkIntToScalar(i*fW), SkIntToScalar(j*fH ));
1320 } 1319 }
1321 } 1320 }
1322 surfaces.unrefAll(); 1321 surfaces.unrefAll();
1323 return ""; 1322 return "";
1324 }); 1323 });
1325 } 1324 }
1326 1325
1327 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1326 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1328 1327
1329 Error ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt ring* log) const { 1328 Error ViaPicture::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkSt ring* log) const {
1330 auto size = src.size(); 1329 auto size = src.size();
1331 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error { 1330 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error {
1332 SkPictureRecorder recorder; 1331 SkPictureRecorder recorder;
1333 SkAutoTUnref<SkPicture> pic; 1332 sk_sp<SkPicture> pic;
1334 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()) , 1333 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.width()) ,
1335 SkIntToScalar(size.height() ))); 1334 SkIntToScalar(size.height() )));
1336 if (!err.isEmpty()) { 1335 if (!err.isEmpty()) {
1337 return err; 1336 return err;
1338 } 1337 }
1339 pic.reset(recorder.endRecordingAsPicture()); 1338 pic = recorder.finishRecordingAsPicture();
1340 canvas->drawPicture(pic); 1339 canvas->drawPicture(pic);
1341 return check_against_reference(bitmap, src, fSink); 1340 return check_against_reference(bitmap, src, fSink);
1342 }); 1341 });
1343 } 1342 }
1344 1343
1345 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1344 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1346 1345
1347 // Draw the Src into two pictures, then draw the second picture into the wrapped Sink. 1346 // Draw the Src into two pictures, then draw the second picture into the wrapped Sink.
1348 // This tests that any shortcuts we may take while recording that second picture are legal. 1347 // This tests that any shortcuts we may take while recording that second picture are legal.
1349 Error ViaSecondPicture::draw( 1348 Error ViaSecondPicture::draw(
1350 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t { 1349 const Src& src, SkBitmap* bitmap, SkWStream* stream, SkString* log) cons t {
1351 auto size = src.size(); 1350 auto size = src.size();
1352 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error { 1351 return draw_to_canvas(fSink, bitmap, stream, log, size, [&](SkCanvas* canvas ) -> Error {
1353 SkPictureRecorder recorder; 1352 SkPictureRecorder recorder;
1354 SkAutoTUnref<SkPicture> pic; 1353 sk_sp<SkPicture> pic;
1355 for (int i = 0; i < 2; i++) { 1354 for (int i = 0; i < 2; i++) {
1356 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.widt h()), 1355 Error err = src.draw(recorder.beginRecording(SkIntToScalar(size.widt h()),
1357 SkIntToScalar(size.heig ht()))); 1356 SkIntToScalar(size.heig ht())));
1358 if (!err.isEmpty()) { 1357 if (!err.isEmpty()) {
1359 return err; 1358 return err;
1360 } 1359 }
1361 pic.reset(recorder.endRecordingAsPicture()); 1360 pic = recorder.finishRecordingAsPicture();
1362 } 1361 }
1363 canvas->drawPicture(pic); 1362 canvas->drawPicture(pic);
1364 return check_against_reference(bitmap, src, fSink); 1363 return check_against_reference(bitmap, src, fSink);
1365 }); 1364 });
1366 } 1365 }
1367 1366
1368 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1367 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1369 1368
1370 // Draw the Src twice. This can help exercise caching. 1369 // Draw the Src twice. This can help exercise caching.
1371 Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const { 1370 Error ViaTwice::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkStri ng* log) const {
(...skipping 13 matching lines...) Expand all
1385 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/ 1384 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~*/
1386 1385
1387 #ifdef SK_MOJO 1386 #ifdef SK_MOJO
1388 Error ViaMojo::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkS tring* log) const { 1387 Error ViaMojo::draw(const Src& src, SkBitmap* bitmap, SkWStream* stream, SkS tring* log) const {
1389 SkPictureRecorder recorder; 1388 SkPictureRecorder recorder;
1390 SkRect size = SkRect::Make(SkIRect::MakeSize(src.size())); 1389 SkRect size = SkRect::Make(SkIRect::MakeSize(src.size()));
1391 Error err = src.draw(recorder.beginRecording(size)); 1390 Error err = src.draw(recorder.beginRecording(size));
1392 if (!err.isEmpty()) { 1391 if (!err.isEmpty()) {
1393 return err; 1392 return err;
1394 } 1393 }
1395 SkAutoTUnref<SkPicture> skPicture(recorder.endRecording()); 1394 sk_sp<SkPicture> skPicture(recorder.finishRecordingAsPicture());
1396 1395
1397 SkASSERT(skPicture); 1396 SkASSERT(skPicture);
1398 SkDynamicMemoryWStream buffer; 1397 SkDynamicMemoryWStream buffer;
1399 skPicture->serialize(&buffer); 1398 skPicture->serialize(&buffer);
1400 skPicture.reset(); 1399 skPicture.reset();
1401 SkMojo::FlattenedPicturePtr mojoPicture = SkMojo::FlattenedPicture::New( ); 1400 SkMojo::FlattenedPicturePtr mojoPicture = SkMojo::FlattenedPicture::New( );
1402 mojoPicture->data.resize(buffer.bytesWritten()); 1401 mojoPicture->data.resize(buffer.bytesWritten());
1403 buffer.copyTo(mojoPicture->data.data()); 1402 buffer.copyTo(mojoPicture->data.data());
1404 buffer.reset(); 1403 buffer.reset();
1405 SkASSERT(mojoPicture.get() && mojoPicture->data); 1404 SkASSERT(mojoPicture.get() && mojoPicture->data);
1406 1405
1407 size_t flatSize = mojoPicture->GetSerializedSize(); 1406 size_t flatSize = mojoPicture->GetSerializedSize();
1408 SkAutoMalloc storage(flatSize); 1407 SkAutoMalloc storage(flatSize);
1409 if (!mojoPicture->Serialize(storage.get(), flatSize)) { 1408 if (!mojoPicture->Serialize(storage.get(), flatSize)) {
1410 return "SkMojo::FlattenedPicture::Serialize failed"; 1409 return "SkMojo::FlattenedPicture::Serialize failed";
1411 } 1410 }
1412 mojoPicture = SkMojo::FlattenedPicture::New(); 1411 mojoPicture = SkMojo::FlattenedPicture::New();
1413 mojoPicture->Deserialize(storage.get()); 1412 mojoPicture->Deserialize(storage.get());
1414 storage.reset(); 1413 storage.reset();
1415 if (!mojoPicture) { 1414 if (!mojoPicture) {
1416 return "SkMojo::FlattenedPicture::Deserialize failed"; 1415 return "SkMojo::FlattenedPicture::Deserialize failed";
1417 } 1416 }
1418 SkMemoryStream tmpStream(mojoPicture->data.data(), 1417 SkMemoryStream tmpStream(mojoPicture->data.data(),
1419 mojoPicture->data.size()); 1418 mojoPicture->data.size());
1420 skPicture.reset(SkPicture::CreateFromStream(&tmpStream)); 1419 skPicture = SkPicture::MakeFromStream(&tmpStream);
1421 mojoPicture.reset(); 1420 mojoPicture.reset();
1422 auto fn = [&](SkCanvas* canvas) -> Error { 1421 auto fn = [&](SkCanvas* canvas) -> Error {
1423 canvas->drawPicture(skPicture.get()); 1422 canvas->drawPicture(skPicture.get());
1424 return check_against_reference(bitmap, src, fSink); 1423 return check_against_reference(bitmap, src, fSink);
1425 }; 1424 };
1426 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), fn); 1425 return draw_to_canvas(fSink, bitmap, stream, log, src.size(), fn);
1427 } 1426 }
1428 #else // not SK_MOJO 1427 #else // not SK_MOJO
1429 Error ViaMojo::draw(const Src&, SkBitmap*, SkWStream*, SkString*) const { 1428 Error ViaMojo::draw(const Src&, SkBitmap*, SkWStream*, SkString*) const {
1430 return "Mojo is missing!"; 1429 return "Mojo is missing!";
(...skipping 16 matching lines...) Expand all
1447 // which would have the funky effect of applying transforms over and ove r. 1446 // which would have the funky effect of applying transforms over and ove r.
1448 SkRecords::Draw d(canvas, nullptr, fDrawables.begin(), fDrawables.count( ), &SkMatrix::I()); 1447 SkRecords::Draw d(canvas, nullptr, fDrawables.begin(), fDrawables.count( ), &SkMatrix::I());
1449 d(op); 1448 d(op);
1450 } 1449 }
1451 1450
1452 // Draws get their own picture. 1451 // Draws get their own picture.
1453 template <typename T> 1452 template <typename T>
1454 SK_WHEN(T::kTags & SkRecords::kDraw_Tag, void) operator()(const T& op) { 1453 SK_WHEN(T::kTags & SkRecords::kDraw_Tag, void) operator()(const T& op) {
1455 SkPictureRecorder rec; 1454 SkPictureRecorder rec;
1456 this->draw(op, rec.beginRecording(SkRect::MakeLargest())); 1455 this->draw(op, rec.beginRecording(SkRect::MakeLargest()));
1457 SkAutoTUnref<SkPicture> pic(rec.endRecordingAsPicture()); 1456 sk_sp<SkPicture> pic(rec.finishRecordingAsPicture());
1458 fCanvas->drawPicture(pic); 1457 fCanvas->drawPicture(pic);
1459 } 1458 }
1460 1459
1461 // We'll just issue non-draws directly. 1460 // We'll just issue non-draws directly.
1462 template <typename T> 1461 template <typename T>
1463 skstd::enable_if_t<!(T::kTags & SkRecords::kDraw_Tag), void> operator()(cons t T& op) { 1462 skstd::enable_if_t<!(T::kTags & SkRecords::kDraw_Tag), void> operator()(cons t T& op) {
1464 this->draw(op, fCanvas); 1463 this->draw(op, fCanvas);
1465 } 1464 }
1466 }; 1465 };
1467 1466
(...skipping 19 matching lines...) Expand all
1487 SkAutoTDelete<SkDrawableList> drawables(recorder.detachDrawableList()); 1486 SkAutoTDelete<SkDrawableList> drawables(recorder.detachDrawableList());
1488 const SkDrawableList empty; 1487 const SkDrawableList empty;
1489 1488
1490 DrawsAsSingletonPictures drawsAsSingletonPictures = { 1489 DrawsAsSingletonPictures drawsAsSingletonPictures = {
1491 macroCanvas, 1490 macroCanvas,
1492 drawables ? *drawables : empty, 1491 drawables ? *drawables : empty,
1493 }; 1492 };
1494 for (int i = 0; i < skr.count(); i++) { 1493 for (int i = 0; i < skr.count(); i++) {
1495 skr.visit<void>(i, drawsAsSingletonPictures); 1494 skr.visit<void>(i, drawsAsSingletonPictures);
1496 } 1495 }
1497 SkAutoTUnref<SkPicture> macroPic(macroRec.endRecordingAsPicture()); 1496 sk_sp<SkPicture> macroPic(macroRec.finishRecordingAsPicture());
1498 1497
1499 canvas->drawPicture(macroPic); 1498 canvas->drawPicture(macroPic);
1500 return check_against_reference(bitmap, src, fSink); 1499 return check_against_reference(bitmap, src, fSink);
1501 }); 1500 });
1502 } 1501 }
1503 1502
1504 } // namespace DM 1503 } // namespace DM
OLDNEW
« no previous file with comments | « debugger/QT/SkDebuggerGUI.cpp ('k') | fuzz/fuzz.cpp » ('j') | src/core/SkPictureRecorder.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698