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 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 } | 261 } |
262 } | 262 } |
263 | 263 |
264 /* since PNG insists on unpremultiplying our alpha, we take no | 264 /* since PNG insists on unpremultiplying our alpha, we take no |
265 precision chances and force all pixels to be 100% opaque, | 265 precision chances and force all pixels to be 100% opaque, |
266 otherwise on compare we may not get a perfect match. | 266 otherwise on compare we may not get a perfect match. |
267 */ | 267 */ |
268 static void force_all_opaque(const SkBitmap& bitmap) { | 268 static void force_all_opaque(const SkBitmap& bitmap) { |
269 SkColorType colorType = bitmap.colorType(); | 269 SkColorType colorType = bitmap.colorType(); |
270 switch (colorType) { | 270 switch (colorType) { |
271 case kPMColor_SkColorType: | 271 case kN32_SkColorType: |
272 force_all_opaque_8888(bitmap); | 272 force_all_opaque_8888(bitmap); |
273 break; | 273 break; |
274 case kRGB_565_SkColorType: | 274 case kRGB_565_SkColorType: |
275 // nothing to do here; 565 bitmaps are inherently opaque | 275 // nothing to do here; 565 bitmaps are inherently opaque |
276 break; | 276 break; |
277 default: | 277 default: |
278 SkDebugf("unsupported bitmap colorType %d\n", colorType); | 278 SkDebugf("unsupported bitmap colorType %d\n", colorType); |
279 DEBUGFAIL_SEE_STDERR; | 279 DEBUGFAIL_SEE_STDERR; |
280 } | 280 } |
281 } | 281 } |
282 | 282 |
283 static void force_all_opaque_8888(const SkBitmap& bitmap) { | 283 static void force_all_opaque_8888(const SkBitmap& bitmap) { |
284 SkAutoLockPixels lock(bitmap); | 284 SkAutoLockPixels lock(bitmap); |
285 for (int y = 0; y < bitmap.height(); y++) { | 285 for (int y = 0; y < bitmap.height(); y++) { |
286 for (int x = 0; x < bitmap.width(); x++) { | 286 for (int x = 0; x < bitmap.width(); x++) { |
287 *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT); | 287 *bitmap.getAddr32(x, y) |= (SK_A32_MASK << SK_A32_SHIFT); |
288 } | 288 } |
289 } | 289 } |
290 } | 290 } |
291 | 291 |
292 static ErrorCombination write_bitmap(const SkString& path, const SkBitmap& b
itmap) { | 292 static ErrorCombination write_bitmap(const SkString& path, const SkBitmap& b
itmap) { |
293 // TODO(epoger): Now that we have removed force_all_opaque() | 293 // TODO(epoger): Now that we have removed force_all_opaque() |
294 // from this method, we should be able to get rid of the | 294 // from this method, we should be able to get rid of the |
295 // transformation to 8888 format also. | 295 // transformation to 8888 format also. |
296 SkBitmap copy; | 296 SkBitmap copy; |
297 bitmap.copyTo(©, kPMColor_SkColorType); | 297 bitmap.copyTo(©, kN32_SkColorType); |
298 if (!SkImageEncoder::EncodeFile(path.c_str(), copy, | 298 if (!SkImageEncoder::EncodeFile(path.c_str(), copy, |
299 SkImageEncoder::kPNG_Type, | 299 SkImageEncoder::kPNG_Type, |
300 100)) { | 300 100)) { |
301 SkDebugf("FAILED to write bitmap: %s\n", path.c_str()); | 301 SkDebugf("FAILED to write bitmap: %s\n", path.c_str()); |
302 return ErrorCombination(kWritingReferenceImage_ErrorType); | 302 return ErrorCombination(kWritingReferenceImage_ErrorType); |
303 } | 303 } |
304 return kEmpty_ErrorCombination; | 304 return kEmpty_ErrorCombination; |
305 } | 305 } |
306 | 306 |
307 /** | 307 /** |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 const int expectedWidth = expectedBitmap.width(); | 733 const int expectedWidth = expectedBitmap.width(); |
734 const int expectedHeight = expectedBitmap.height(); | 734 const int expectedHeight = expectedBitmap.height(); |
735 const int width = actualBitmap.width(); | 735 const int width = actualBitmap.width(); |
736 const int height = actualBitmap.height(); | 736 const int height = actualBitmap.height(); |
737 if ((expectedWidth != width) || (expectedHeight != height)) { | 737 if ((expectedWidth != width) || (expectedHeight != height)) { |
738 SkDebugf("---- %s: dimension mismatch -- expected [%d %d], actual [%
d %d]\n", | 738 SkDebugf("---- %s: dimension mismatch -- expected [%d %d], actual [%
d %d]\n", |
739 testName, expectedWidth, expectedHeight, width, height); | 739 testName, expectedWidth, expectedHeight, width, height); |
740 return; | 740 return; |
741 } | 741 } |
742 | 742 |
743 if ((kPMColor_SkColorType != expectedBitmap.colorType()) || | 743 if ((kN32_SkColorType != expectedBitmap.colorType()) || |
744 (kPMColor_SkColorType != actualBitmap.colorType())) { | 744 (kN32_SkColorType != actualBitmap.colorType())) { |
745 SkDebugf("---- %s: not computing max per-channel pixel mismatch beca
use non-8888\n", | 745 SkDebugf("---- %s: not computing max per-channel pixel mismatch beca
use non-8888\n", |
746 testName); | 746 testName); |
747 return; | 747 return; |
748 } | 748 } |
749 | 749 |
750 SkAutoLockPixels alp0(expectedBitmap); | 750 SkAutoLockPixels alp0(expectedBitmap); |
751 SkAutoLockPixels alp1(actualBitmap); | 751 SkAutoLockPixels alp1(actualBitmap); |
752 int errR = 0; | 752 int errR = 0; |
753 int errG = 0; | 753 int errG = 0; |
754 int errB = 0; | 754 int errB = 0; |
(...skipping 1686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2441 if (FLAGS_forceBWtext) { | 2441 if (FLAGS_forceBWtext) { |
2442 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 2442 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
2443 } | 2443 } |
2444 } | 2444 } |
2445 | 2445 |
2446 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 2446 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
2447 int main(int argc, char * const argv[]) { | 2447 int main(int argc, char * const argv[]) { |
2448 return tool_main(argc, (char**) argv); | 2448 return tool_main(argc, (char**) argv); |
2449 } | 2449 } |
2450 #endif | 2450 #endif |
OLD | NEW |