OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 /* | 8 /* |
9 * Code for the "gm" (Golden Master) rendering comparison tool. | 9 * Code for the "gm" (Golden Master) rendering comparison tool. |
10 * | 10 * |
(...skipping 993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1004 recordFlags |= SkPicture::kOptimizeForClippedPlayback_RecordingFlag; | 1004 recordFlags |= SkPicture::kOptimizeForClippedPlayback_RecordingFlag; |
1005 } | 1005 } |
1006 SkCanvas* cv = pict->beginRecording(width, height, recordFlags); | 1006 SkCanvas* cv = pict->beginRecording(width, height, recordFlags); |
1007 cv->scale(scale, scale); | 1007 cv->scale(scale, scale); |
1008 invokeGM(gm, cv, false, false); | 1008 invokeGM(gm, cv, false, false); |
1009 pict->endRecording(); | 1009 pict->endRecording(); |
1010 | 1010 |
1011 return pict; | 1011 return pict; |
1012 } | 1012 } |
1013 | 1013 |
1014 static SkData* bitmap_encoder(size_t* pixelRefOffset, const SkBitmap& bm) { | |
1015 SkPixelRef* pr = bm.pixelRef(); | |
1016 if (pr != NULL) { | |
1017 SkData* data = pr->refEncodedData(); | |
1018 if (data != NULL) { | |
1019 *pixelRefOffset = bm.pixelRefOffset(); | |
1020 return data; | |
1021 } | |
1022 } | |
1023 return NULL; | |
1024 } | |
1025 | |
1026 static SkPicture* stream_to_new_picture(const SkPicture& src) { | 1014 static SkPicture* stream_to_new_picture(const SkPicture& src) { |
1027 SkDynamicMemoryWStream storage; | 1015 SkDynamicMemoryWStream storage; |
1028 src.serialize(&storage, &bitmap_encoder); | 1016 src.serialize(&storage, NULL); |
1029 SkAutoTUnref<SkStreamAsset> pictReadback(storage.detachAsStream()); | 1017 SkAutoTUnref<SkStreamAsset> pictReadback(storage.detachAsStream()); |
1030 SkPicture* retval = SkPicture::CreateFromStream(pictReadback, | 1018 SkPicture* retval = SkPicture::CreateFromStream(pictReadback, |
1031 &SkImageDecoder::DecodeM
emory); | 1019 &SkImageDecoder::DecodeM
emory); |
1032 return retval; | 1020 return retval; |
1033 } | 1021 } |
1034 | 1022 |
1035 // Test: draw into a bitmap or pdf. | 1023 // Test: draw into a bitmap or pdf. |
1036 // Depending on flags, possibly compare to an expected image. | 1024 // Depending on flags, possibly compare to an expected image. |
1037 // If writePath is not NULL, also write images (or documents) to the specifi
ed path. | 1025 // If writePath is not NULL, also write images (or documents) to the specifi
ed path. |
1038 ErrorCombination test_drawing(GM* gm, const ConfigData& gRec, | 1026 ErrorCombination test_drawing(GM* gm, const ConfigData& gRec, |
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 // or probably more readable would be to replace it with a set of a few predicat
es | 1455 // or probably more readable would be to replace it with a set of a few predicat
es |
1468 // Like --prerotate 100 200 10 --posttranslate 10, 10 | 1456 // Like --prerotate 100 200 10 --posttranslate 10, 10 |
1469 // Probably define spacial names like centerx, centery, top, bottom, left, right | 1457 // Probably define spacial names like centerx, centery, top, bottom, left, right |
1470 // then we can write something reabable like --rotate centerx centery 90 | 1458 // then we can write something reabable like --rotate centerx centery 90 |
1471 DEFINE_bool(forcePerspectiveMatrix, false, "Force a perspective matrix."); | 1459 DEFINE_bool(forcePerspectiveMatrix, false, "Force a perspective matrix."); |
1472 DEFINE_bool(useDocumentInsteadOfDevice, false, "Use SkDocument::CreateFoo instea
d of SkFooDevice."); | 1460 DEFINE_bool(useDocumentInsteadOfDevice, false, "Use SkDocument::CreateFoo instea
d of SkFooDevice."); |
1473 DEFINE_int32(pdfRasterDpi, 72, "Scale at which at which the non suported " | 1461 DEFINE_int32(pdfRasterDpi, 72, "Scale at which at which the non suported " |
1474 "features in PDF are rasterized. Must be be in range 0-10000. " | 1462 "features in PDF are rasterized. Must be be in range 0-10000. " |
1475 "Default is 72. N = 0 will disable rasterizing features like " | 1463 "Default is 72. N = 0 will disable rasterizing features like " |
1476 "text shadows or perspective bitmaps."); | 1464 "text shadows or perspective bitmaps."); |
1477 static SkData* encode_to_dct_data(size_t* pixelRefOffset, const SkBitmap& bitmap
) { | 1465 static SkData* encode_to_dct_data(size_t*, const SkBitmap& bitmap) { |
1478 // Filter output of warnings that JPEG is not available for the image. | 1466 // Filter output of warnings that JPEG is not available for the image. |
1479 if (bitmap.width() >= 65500 || bitmap.height() >= 65500) return NULL; | 1467 if (bitmap.width() >= 65500 || bitmap.height() >= 65500) return NULL; |
1480 if (FLAGS_pdfJpegQuality == -1) return NULL; | 1468 if (FLAGS_pdfJpegQuality == -1) return NULL; |
1481 | 1469 |
1482 SkBitmap bm = bitmap; | 1470 SkBitmap bm = bitmap; |
1483 #if defined(SK_BUILD_FOR_MAC) | 1471 #if defined(SK_BUILD_FOR_MAC) |
1484 // Workaround bug #1043 where bitmaps with referenced pixels cause | 1472 // Workaround bug #1043 where bitmaps with referenced pixels cause |
1485 // CGImageDestinationFinalize to crash | 1473 // CGImageDestinationFinalize to crash |
1486 SkBitmap copy; | 1474 SkBitmap copy; |
1487 bitmap.deepCopyTo(©, bitmap.config()); | 1475 bitmap.deepCopyTo(©, bitmap.config()); |
1488 bm = copy; | 1476 bm = copy; |
1489 #endif | 1477 #endif |
1490 | 1478 |
1491 SkPixelRef* pr = bm.pixelRef(); | 1479 SkPixelRef* pr = bm.pixelRef(); |
1492 if (pr != NULL) { | 1480 if (pr != NULL) { |
1493 SkData* data = pr->refEncodedData(); | 1481 SkData* data = pr->refEncodedData(); |
1494 if (data != NULL) { | 1482 if (data != NULL) { |
1495 *pixelRefOffset = bm.pixelRefOffset(); | |
1496 return data; | 1483 return data; |
1497 } | 1484 } |
1498 } | 1485 } |
1499 | 1486 |
1500 *pixelRefOffset = 0; | |
1501 return SkImageEncoder::EncodeData(bm, | 1487 return SkImageEncoder::EncodeData(bm, |
1502 SkImageEncoder::kJPEG_Type, | 1488 SkImageEncoder::kJPEG_Type, |
1503 FLAGS_pdfJpegQuality); | 1489 FLAGS_pdfJpegQuality); |
1504 } | 1490 } |
1505 | 1491 |
1506 static int findConfig(const char config[]) { | 1492 static int findConfig(const char config[]) { |
1507 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) { | 1493 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); i++) { |
1508 if (!strcmp(config, gRec[i].fName)) { | 1494 if (!strcmp(config, gRec[i].fName)) { |
1509 return (int) i; | 1495 return (int) i; |
1510 } | 1496 } |
(...skipping 865 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2376 if (FLAGS_forceBWtext) { | 2362 if (FLAGS_forceBWtext) { |
2377 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 2363 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
2378 } | 2364 } |
2379 } | 2365 } |
2380 | 2366 |
2381 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 2367 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
2382 int main(int argc, char * const argv[]) { | 2368 int main(int argc, char * const argv[]) { |
2383 return tool_main(argc, (char**) argv); | 2369 return tool_main(argc, (char**) argv); |
2384 } | 2370 } |
2385 #endif | 2371 #endif |
OLD | NEW |