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

Side by Side Diff: tests/PictureTest.cpp

Issue 313613004: Alter SkCanvas::drawPicture (devirtualize, take const SkPicture, take pointer) (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Add staging entry point for Chromium and Android Created 6 years, 6 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 2012 Google Inc. 2 * Copyright 2012 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 "SkBitmapDevice.h" 8 #include "SkBitmapDevice.h"
9 #include "SkBlurImageFilter.h" 9 #include "SkBlurImageFilter.h"
10 #include "SkCanvas.h" 10 #include "SkCanvas.h"
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // a little sloppy. 339 // a little sloppy.
340 SkIRect ir; 340 SkIRect ir;
341 rect->round(&ir); 341 rect->round(&ir);
342 rect->set(ir); 342 rect->set(ir);
343 } 343 }
344 344
345 static void draw(SkPicture* pic, int width, int height, SkBitmap* result) { 345 static void draw(SkPicture* pic, int width, int height, SkBitmap* result) {
346 make_bm(result, width, height, SK_ColorBLACK, false); 346 make_bm(result, width, height, SK_ColorBLACK, false);
347 347
348 SkCanvas canvas(*result); 348 SkCanvas canvas(*result);
349 canvas.drawPicture(*pic); 349 canvas.drawPicture(pic);
350 } 350 }
351 351
352 template <typename T> int find_index(const T* array, T elem, int count) { 352 template <typename T> int find_index(const T* array, T elem, int count) {
353 for (int i = 0; i < count; ++i) { 353 for (int i = 0; i < count; ++i) {
354 if (array[i] == elem) { 354 if (array[i] == elem) {
355 return i; 355 return i;
356 } 356 }
357 } 357 }
358 return -1; 358 return -1;
359 } 359 }
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 // Create picture with 2 unbalanced saves 1059 // Create picture with 2 unbalanced saves
1060 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0); 1060 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
1061 canvas->save(); 1061 canvas->save();
1062 canvas->translate(10, 10); 1062 canvas->translate(10, 10);
1063 canvas->drawRect(rect, paint); 1063 canvas->drawRect(rect, paint);
1064 canvas->save(); 1064 canvas->save();
1065 canvas->translate(10, 10); 1065 canvas->translate(10, 10);
1066 canvas->drawRect(rect, paint); 1066 canvas->drawRect(rect, paint);
1067 SkAutoTUnref<SkPicture> extraSavePicture(recorder.endRecording()); 1067 SkAutoTUnref<SkPicture> extraSavePicture(recorder.endRecording());
1068 1068
1069 testCanvas.drawPicture(*extraSavePicture); 1069 testCanvas.drawPicture(extraSavePicture);
1070 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 1070 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
1071 } 1071 }
1072 1072
1073 set_canvas_to_save_count_4(&testCanvas); 1073 set_canvas_to_save_count_4(&testCanvas);
1074 1074
1075 { 1075 {
1076 // Create picture with 2 unbalanced restores 1076 // Create picture with 2 unbalanced restores
1077 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0); 1077 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
1078 canvas->save(); 1078 canvas->save();
1079 canvas->translate(10, 10); 1079 canvas->translate(10, 10);
1080 canvas->drawRect(rect, paint); 1080 canvas->drawRect(rect, paint);
1081 canvas->save(); 1081 canvas->save();
1082 canvas->translate(10, 10); 1082 canvas->translate(10, 10);
1083 canvas->drawRect(rect, paint); 1083 canvas->drawRect(rect, paint);
1084 canvas->restore(); 1084 canvas->restore();
1085 canvas->restore(); 1085 canvas->restore();
1086 canvas->restore(); 1086 canvas->restore();
1087 canvas->restore(); 1087 canvas->restore();
1088 SkAutoTUnref<SkPicture> extraRestorePicture(recorder.endRecording()); 1088 SkAutoTUnref<SkPicture> extraRestorePicture(recorder.endRecording());
1089 1089
1090 testCanvas.drawPicture(*extraRestorePicture); 1090 testCanvas.drawPicture(extraRestorePicture);
1091 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 1091 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
1092 } 1092 }
1093 1093
1094 set_canvas_to_save_count_4(&testCanvas); 1094 set_canvas_to_save_count_4(&testCanvas);
1095 1095
1096 { 1096 {
1097 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0); 1097 SkCanvas* canvas = recorder.beginRecording(100, 100, NULL, 0);
1098 canvas->translate(10, 10); 1098 canvas->translate(10, 10);
1099 canvas->drawRect(rect, paint); 1099 canvas->drawRect(rect, paint);
1100 SkAutoTUnref<SkPicture> noSavePicture(recorder.endRecording()); 1100 SkAutoTUnref<SkPicture> noSavePicture(recorder.endRecording());
1101 1101
1102 testCanvas.drawPicture(*noSavePicture); 1102 testCanvas.drawPicture(noSavePicture);
1103 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount()); 1103 REPORTER_ASSERT(reporter, 4 == testCanvas.getSaveCount());
1104 REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity()); 1104 REPORTER_ASSERT(reporter, testCanvas.getTotalMatrix().isIdentity());
1105 } 1105 }
1106 } 1106 }
1107 1107
1108 static void test_peephole() { 1108 static void test_peephole() {
1109 SkRandom rand; 1109 SkRandom rand;
1110 1110
1111 SkPictureRecorder recorder; 1111 SkPictureRecorder recorder;
1112 1112
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 // This bitmap has a width and height but no pixels. As a result, attempting to record it will 1145 // This bitmap has a width and height but no pixels. As a result, attempting to record it will
1146 // fail. 1146 // fail.
1147 SkBitmap bm; 1147 SkBitmap bm;
1148 bm.setInfo(SkImageInfo::MakeN32Premul(100, 100)); 1148 bm.setInfo(SkImageInfo::MakeN32Premul(100, 100));
1149 SkPictureRecorder recorder; 1149 SkPictureRecorder recorder;
1150 SkCanvas* recordingCanvas = recorder.beginRecording(100, 100, NULL, 0); 1150 SkCanvas* recordingCanvas = recorder.beginRecording(100, 100, NULL, 0);
1151 recordingCanvas->drawBitmap(bm, 0, 0); 1151 recordingCanvas->drawBitmap(bm, 0, 0);
1152 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1152 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1153 1153
1154 SkCanvas canvas; 1154 SkCanvas canvas;
1155 canvas.drawPicture(*picture); 1155 canvas.drawPicture(picture);
1156 } 1156 }
1157 #endif 1157 #endif
1158 1158
1159 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) { 1159 static SkData* encode_bitmap_to_data(size_t*, const SkBitmap& bm) {
1160 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100); 1160 return SkImageEncoder::EncodeData(bm, SkImageEncoder::kPNG_Type, 100);
1161 } 1161 }
1162 1162
1163 static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) { 1163 static SkData* serialized_picture_from_bitmap(const SkBitmap& bitmap) {
1164 SkPictureRecorder recorder; 1164 SkPictureRecorder recorder;
1165 SkCanvas* canvas = recorder.beginRecording(bitmap.width(), bitmap.height(), NULL, 0); 1165 SkCanvas* canvas = recorder.beginRecording(bitmap.width(), bitmap.height(), NULL, 0);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 make_bm(&result, 2, 2, SK_ColorBLACK, false); 1240 make_bm(&result, 2, 2, SK_ColorBLACK, false);
1241 1241
1242 SkCanvas canvas(result); 1242 SkCanvas canvas(result);
1243 1243
1244 { 1244 {
1245 // stock SkPicture 1245 // stock SkPicture
1246 SkPictureRecorder recorder; 1246 SkPictureRecorder recorder;
1247 recorder.beginRecording(1, 1, NULL, 0); 1247 recorder.beginRecording(1, 1, NULL, 0);
1248 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1248 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1249 1249
1250 canvas.drawPicture(*picture); 1250 canvas.drawPicture(picture);
1251 } 1251 }
1252 1252
1253 { 1253 {
1254 // tile grid 1254 // tile grid
1255 SkTileGridFactory::TileGridInfo gridInfo; 1255 SkTileGridFactory::TileGridInfo gridInfo;
1256 gridInfo.fMargin.setEmpty(); 1256 gridInfo.fMargin.setEmpty();
1257 gridInfo.fOffset.setZero(); 1257 gridInfo.fOffset.setZero();
1258 gridInfo.fTileInterval.set(1, 1); 1258 gridInfo.fTileInterval.set(1, 1);
1259 1259
1260 SkTileGridFactory factory(gridInfo); 1260 SkTileGridFactory factory(gridInfo);
1261 SkPictureRecorder recorder; 1261 SkPictureRecorder recorder;
1262 recorder.beginRecording(1, 1, &factory, 0); 1262 recorder.beginRecording(1, 1, &factory, 0);
1263 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1263 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1264 1264
1265 canvas.drawPicture(*picture); 1265 canvas.drawPicture(picture);
1266 } 1266 }
1267 1267
1268 { 1268 {
1269 // RTree 1269 // RTree
1270 SkRTreeFactory factory; 1270 SkRTreeFactory factory;
1271 SkPictureRecorder recorder; 1271 SkPictureRecorder recorder;
1272 recorder.beginRecording(1, 1, &factory, 0); 1272 recorder.beginRecording(1, 1, &factory, 0);
1273 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1273 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1274 1274
1275 canvas.drawPicture(*picture); 1275 canvas.drawPicture(picture);
1276 } 1276 }
1277 1277
1278 { 1278 {
1279 // quad tree 1279 // quad tree
1280 SkQuadTreeFactory factory; 1280 SkQuadTreeFactory factory;
1281 SkPictureRecorder recorder; 1281 SkPictureRecorder recorder;
1282 recorder.beginRecording(1, 1, &factory, 0); 1282 recorder.beginRecording(1, 1, &factory, 0);
1283 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1283 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1284 1284
1285 canvas.drawPicture(*picture); 1285 canvas.drawPicture(picture);
1286 } 1286 }
1287 } 1287 }
1288 1288
1289 static void test_clip_bound_opt(skiatest::Reporter* reporter) { 1289 static void test_clip_bound_opt(skiatest::Reporter* reporter) {
1290 // Test for crbug.com/229011 1290 // Test for crbug.com/229011
1291 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4), 1291 SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(4), SkIntToScalar(4),
1292 SkIntToScalar(2), SkIntToScalar(2)); 1292 SkIntToScalar(2), SkIntToScalar(2));
1293 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7), 1293 SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(7), SkIntToScalar(7),
1294 SkIntToScalar(1), SkIntToScalar(1)); 1294 SkIntToScalar(1), SkIntToScalar(1));
1295 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6), 1295 SkRect rect3 = SkRect::MakeXYWH(SkIntToScalar(6), SkIntToScalar(6),
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1453 recorder.beginRecording(10, 10, NULL, 0); 1453 recorder.beginRecording(10, 10, NULL, 0);
1454 SkAutoTUnref<SkPicture> childPlain(recorder.endRecording()); 1454 SkAutoTUnref<SkPicture> childPlain(recorder.endRecording());
1455 REPORTER_ASSERT(reporter, !childPlain->willPlayBackBitmaps()); // 0 1455 REPORTER_ASSERT(reporter, !childPlain->willPlayBackBitmaps()); // 0
1456 1456
1457 recorder.beginRecording(10, 10, NULL, 0)->drawBitmap(bm, 0, 0); 1457 recorder.beginRecording(10, 10, NULL, 0)->drawBitmap(bm, 0, 0);
1458 SkAutoTUnref<SkPicture> childWithBitmap(recorder.endRecording()); 1458 SkAutoTUnref<SkPicture> childWithBitmap(recorder.endRecording());
1459 REPORTER_ASSERT(reporter, childWithBitmap->willPlayBackBitmaps()); // 1 1459 REPORTER_ASSERT(reporter, childWithBitmap->willPlayBackBitmaps()); // 1
1460 1460
1461 { 1461 {
1462 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0); 1462 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1463 canvas->drawPicture(*childPlain); 1463 canvas->drawPicture(childPlain);
1464 SkAutoTUnref<SkPicture> parentPP(recorder.endRecording()); 1464 SkAutoTUnref<SkPicture> parentPP(recorder.endRecording());
1465 REPORTER_ASSERT(reporter, !parentPP->willPlayBackBitmaps()); // 0 1465 REPORTER_ASSERT(reporter, !parentPP->willPlayBackBitmaps()); // 0
1466 } 1466 }
1467 { 1467 {
1468 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0); 1468 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1469 canvas->drawPicture(*childWithBitmap); 1469 canvas->drawPicture(childWithBitmap);
1470 SkAutoTUnref<SkPicture> parentPWB(recorder.endRecording()); 1470 SkAutoTUnref<SkPicture> parentPWB(recorder.endRecording());
1471 REPORTER_ASSERT(reporter, parentPWB->willPlayBackBitmaps()); // 1 1471 REPORTER_ASSERT(reporter, parentPWB->willPlayBackBitmaps()); // 1
1472 } 1472 }
1473 { 1473 {
1474 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0); 1474 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1475 canvas->drawBitmap(bm, 0, 0); 1475 canvas->drawBitmap(bm, 0, 0);
1476 canvas->drawPicture(*childPlain); 1476 canvas->drawPicture(childPlain);
1477 SkAutoTUnref<SkPicture> parentWBP(recorder.endRecording()); 1477 SkAutoTUnref<SkPicture> parentWBP(recorder.endRecording());
1478 REPORTER_ASSERT(reporter, parentWBP->willPlayBackBitmaps()); // 1 1478 REPORTER_ASSERT(reporter, parentWBP->willPlayBackBitmaps()); // 1
1479 } 1479 }
1480 { 1480 {
1481 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0); 1481 SkCanvas* canvas = recorder.beginRecording(10, 10, NULL, 0);
1482 canvas->drawBitmap(bm, 0, 0); 1482 canvas->drawBitmap(bm, 0, 0);
1483 canvas->drawPicture(*childWithBitmap); 1483 canvas->drawPicture(childWithBitmap);
1484 SkAutoTUnref<SkPicture> parentWBWB(recorder.endRecording()); 1484 SkAutoTUnref<SkPicture> parentWBWB(recorder.endRecording());
1485 REPORTER_ASSERT(reporter, parentWBWB->willPlayBackBitmaps()); // 2 1485 REPORTER_ASSERT(reporter, parentWBWB->willPlayBackBitmaps()); // 2
1486 } 1486 }
1487 } 1487 }
1488 1488
1489 static void test_gen_id(skiatest::Reporter* reporter) { 1489 static void test_gen_id(skiatest::Reporter* reporter) {
1490 1490
1491 SkPicture empty; 1491 SkPicture empty;
1492 1492
1493 // Empty pictures should still have a valid ID 1493 // Empty pictures should still have a valid ID
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 SkAutoTUnref<SkPicture> picture(recorder.endRecording()); 1586 SkAutoTUnref<SkPicture> picture(recorder.endRecording());
1587 } 1587 }
1588 1588
1589 DEF_TEST(Canvas_EmptyBitmap, r) { 1589 DEF_TEST(Canvas_EmptyBitmap, r) {
1590 SkBitmap dst; 1590 SkBitmap dst;
1591 dst.allocN32Pixels(10, 10); 1591 dst.allocN32Pixels(10, 10);
1592 SkCanvas canvas(dst); 1592 SkCanvas canvas(dst);
1593 1593
1594 test_draw_bitmaps(&canvas); 1594 test_draw_bitmaps(&canvas);
1595 } 1595 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698