OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |