Chromium Code Reviews| 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 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 // size) overwrite our previous allocation | 404 // size) overwrite our previous allocation |
| 405 bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.fWidth, | 405 bitmap->setConfig(SkBitmap::kARGB_8888_Config, size.fWidth, |
| 406 size.fHeight); | 406 size.fHeight); |
| 407 canvas->readPixels(bitmap, 0, 0); | 407 canvas->readPixels(bitmap, 0, 0); |
| 408 } | 408 } |
| 409 #endif | 409 #endif |
| 410 complete_bitmap(bitmap); | 410 complete_bitmap(bitmap); |
| 411 return kEmpty_ErrorCombination; | 411 return kEmpty_ErrorCombination; |
| 412 } | 412 } |
| 413 | 413 |
| 414 static void bitmap_copy_subset(const SkBitmap& src, SkBitmap* dst, int xDst, | |
| 415 int yDst) { | |
| 416 for (int y = 0; y <src.height() && y + yDst < dst->height() ; y++) { | |
| 417 for (int x = 0; x < src.width() && x + xDst < dst->width() ; x++) { | |
| 418 *dst->getAddr32(xDst + x, yDst + y) = *src.getAddr32(x, y); | |
| 419 } | |
| 420 } | |
| 421 } | |
| 422 | |
| 414 static void generate_image_from_picture(GM* gm, const ConfigData& gRec, | 423 static void generate_image_from_picture(GM* gm, const ConfigData& gRec, |
| 415 SkPicture* pict, SkBitmap* bitmap, | 424 SkPicture* pict, SkBitmap* bitmap, |
| 416 SkScalar scale = SK_Scalar1) { | 425 SkScalar scale = SK_Scalar1, |
| 426 bool tile = false) { | |
| 417 SkISize size = gm->getISize(); | 427 SkISize size = gm->getISize(); |
| 418 setup_bitmap(gRec, size, bitmap); | 428 setup_bitmap(gRec, size, bitmap); |
| 419 SkCanvas canvas(*bitmap); | 429 |
| 420 installFilter(&canvas); | 430 if (tile) { |
| 421 canvas.scale(scale, scale); | 431 // Generate the result image by rendering to tiles and accumulating |
| 422 canvas.drawPicture(*pict); | 432 // the results in 'bitmap' |
| 423 complete_bitmap(bitmap); | 433 |
| 434 // This 16x16 tiling matches the settings applied to 'pict' in | |
| 435 // 'generate_new_picture' | |
| 436 SkISize tileSize = SkISize::Make(16, 16); | |
| 437 | |
| 438 SkBitmap tileBM; | |
| 439 setup_bitmap(gRec, tileSize, &tileBM); | |
| 440 SkCanvas tileCanvas(tileBM); | |
| 441 installFilter(&tileCanvas); | |
| 442 | |
| 443 for (int yTile = 0; yTile < (size.height()+15)/16; ++yTile) { | |
| 444 for (int xTile = 0; xTile < (size.width()+15)/16; ++xTile) { | |
| 445 int saveCount = tileCanvas.save(); | |
| 446 SkMatrix mat(tileCanvas.getTotalMatrix()); | |
| 447 mat.postTranslate(SkIntToScalar(-xTile*tileSize.width()), | |
| 448 SkIntToScalar(-yTile*tileSize.height())); | |
| 449 tileCanvas.setMatrix(mat); | |
| 450 pict->draw(&tileCanvas); | |
| 451 tileCanvas.flush(); | |
| 452 tileCanvas.restoreToCount(saveCount); | |
| 453 bitmap_copy_subset(tileBM, bitmap, | |
|
bsalomon
2013/04/01 17:36:43
Maybe create an SkCanvas around bitmap and drawBit
robertphillips
2013/04/01 18:21:52
What does that buy us?
bsalomon
2013/04/01 18:28:27
Faster, works with different src/dst bitmap types,
robertphillips
2013/04/02 13:29:53
Done.
| |
| 454 xTile * tileSize.width(), | |
| 455 yTile * tileSize.height()); | |
| 456 } | |
| 457 } | |
| 458 } else { | |
| 459 SkCanvas canvas(*bitmap); | |
| 460 installFilter(&canvas); | |
| 461 canvas.scale(scale, scale); | |
| 462 canvas.drawPicture(*pict); | |
| 463 complete_bitmap(bitmap); | |
| 464 } | |
| 424 } | 465 } |
| 425 | 466 |
| 426 static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { | 467 static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) { |
| 427 #ifdef SK_SUPPORT_PDF | 468 #ifdef SK_SUPPORT_PDF |
| 428 SkMatrix initialTransform = gm->getInitialTransform(); | 469 SkMatrix initialTransform = gm->getInitialTransform(); |
| 429 SkISize pageSize = gm->getISize(); | 470 SkISize pageSize = gm->getISize(); |
| 430 SkPDFDevice* dev = NULL; | 471 SkPDFDevice* dev = NULL; |
| 431 if (initialTransform.isIdentity()) { | 472 if (initialTransform.isIdentity()) { |
| 432 dev = new SkPDFDevice(pageSize, pageSize, initialTransform); | 473 dev = new SkPDFDevice(pageSize, pageSize, initialTransform); |
| 433 } else { | 474 } else { |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1312 if ((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1) { | 1353 if ((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1) { |
| 1313 continue; | 1354 continue; |
| 1314 } | 1355 } |
| 1315 // We record with the reciprocal scale to obtain a replay | 1356 // We record with the reciprocal scale to obtain a replay |
| 1316 // result that can be validated against comparisonBitmap. | 1357 // result that can be validated against comparisonBitmap. |
| 1317 SkScalar recordScale = SkScalarInvert(replayScale); | 1358 SkScalar recordScale = SkScalarInvert(replayScale); |
| 1318 SkPicture* pict = gmmain.generate_new_picture( | 1359 SkPicture* pict = gmmain.generate_new_picture( |
| 1319 gm, kTileGrid_BbhType, SkPicture::kUsePathBoundsForClip_Recordin gFlag, recordScale); | 1360 gm, kTileGrid_BbhType, SkPicture::kUsePathBoundsForClip_Recordin gFlag, recordScale); |
| 1320 SkAutoUnref aur(pict); | 1361 SkAutoUnref aur(pict); |
| 1321 SkBitmap bitmap; | 1362 SkBitmap bitmap; |
| 1322 gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap, replayScale); | 1363 // We cannot yet pass 'true' to generate_image_from_picture to |
| 1364 // perform actual tiled rendering (see Issue 1198 - | |
| 1365 // https://code.google.com/p/skia/issues/detail?id=1198) | |
| 1366 gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap, | |
| 1367 replayScale /*, true */); | |
| 1323 SkString suffix("-tilegrid"); | 1368 SkString suffix("-tilegrid"); |
| 1324 if (SK_Scalar1 != replayScale) { | 1369 if (SK_Scalar1 != replayScale) { |
| 1325 suffix += "-scale-"; | 1370 suffix += "-scale-"; |
| 1326 suffix.appendScalar(replayScale); | 1371 suffix.appendScalar(replayScale); |
| 1327 } | 1372 } |
| 1328 errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma p( | 1373 errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma p( |
| 1329 gm, compareConfig, suffix.c_str(), bitmap, &comparisonBitmap)); | 1374 gm, compareConfig, suffix.c_str(), bitmap, &comparisonBitmap)); |
| 1330 } | 1375 } |
| 1331 } | 1376 } |
| 1332 | 1377 |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1657 if (FLAGS_forceBWtext) { | 1702 if (FLAGS_forceBWtext) { |
| 1658 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 1703 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
| 1659 } | 1704 } |
| 1660 } | 1705 } |
| 1661 | 1706 |
| 1662 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 1707 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
| 1663 int main(int argc, char * const argv[]) { | 1708 int main(int argc, char * const argv[]) { |
| 1664 return tool_main(argc, (char**) argv); | 1709 return tool_main(argc, (char**) argv); |
| 1665 } | 1710 } |
| 1666 #endif | 1711 #endif |
| OLD | NEW |