| 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 16 matching lines...) Expand all  Loading... | 
| 27 #include "SkDrawFilter.h" | 27 #include "SkDrawFilter.h" | 
| 28 #include "SkForceLinking.h" | 28 #include "SkForceLinking.h" | 
| 29 #include "SkGPipe.h" | 29 #include "SkGPipe.h" | 
| 30 #include "SkGraphics.h" | 30 #include "SkGraphics.h" | 
| 31 #include "SkImageDecoder.h" | 31 #include "SkImageDecoder.h" | 
| 32 #include "SkImageEncoder.h" | 32 #include "SkImageEncoder.h" | 
| 33 #include "SkJSONCPP.h" | 33 #include "SkJSONCPP.h" | 
| 34 #include "SkOSFile.h" | 34 #include "SkOSFile.h" | 
| 35 #include "SkPDFRasterizer.h" | 35 #include "SkPDFRasterizer.h" | 
| 36 #include "SkPicture.h" | 36 #include "SkPicture.h" | 
|  | 37 #include "SkQuadTreePicture.h" | 
| 37 #include "SkRefCnt.h" | 38 #include "SkRefCnt.h" | 
|  | 39 #include "SkRTreePicture.h" | 
| 38 #include "SkScalar.h" | 40 #include "SkScalar.h" | 
| 39 #include "SkStream.h" | 41 #include "SkStream.h" | 
| 40 #include "SkString.h" | 42 #include "SkString.h" | 
| 41 #include "SkSurface.h" | 43 #include "SkSurface.h" | 
| 42 #include "SkTArray.h" | 44 #include "SkTArray.h" | 
| 43 #include "SkTDict.h" | 45 #include "SkTDict.h" | 
| 44 #include "SkTileGridPicture.h" | 46 #include "SkTileGridPicture.h" | 
| 45 #include "SamplePipeControllers.h" | 47 #include "SamplePipeControllers.h" | 
| 46 | 48 | 
| 47 #ifdef SK_DEBUG | 49 #ifdef SK_DEBUG | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 132     kRaster_Backend, | 134     kRaster_Backend, | 
| 133     kGPU_Backend, | 135     kGPU_Backend, | 
| 134     kPDF_Backend, | 136     kPDF_Backend, | 
| 135     kXPS_Backend, | 137     kXPS_Backend, | 
| 136 }; | 138 }; | 
| 137 | 139 | 
| 138 enum BbhType { | 140 enum BbhType { | 
| 139     kNone_BbhType, | 141     kNone_BbhType, | 
| 140     kRTree_BbhType, | 142     kRTree_BbhType, | 
| 141     kTileGrid_BbhType, | 143     kTileGrid_BbhType, | 
|  | 144     kQuadTree_BbhType | 
| 142 }; | 145 }; | 
| 143 | 146 | 
| 144 enum ConfigFlags { | 147 enum ConfigFlags { | 
| 145     kNone_ConfigFlag  = 0x0, | 148     kNone_ConfigFlag  = 0x0, | 
| 146     /* Write GM images if a write path is provided. */ | 149     /* Write GM images if a write path is provided. */ | 
| 147     kWrite_ConfigFlag = 0x1, | 150     kWrite_ConfigFlag = 0x1, | 
| 148     /* Read reference GM images if a read path is provided. */ | 151     /* Read reference GM images if a read path is provided. */ | 
| 149     kRead_ConfigFlag  = 0x2, | 152     kRead_ConfigFlag  = 0x2, | 
| 150     kRW_ConfigFlag    = (kWrite_ConfigFlag | kRead_ConfigFlag), | 153     kRW_ConfigFlag    = (kWrite_ConfigFlag | kRead_ConfigFlag), | 
| 151 }; | 154 }; | 
| (...skipping 859 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1011         int width = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().w
      idth()), scale)); | 1014         int width = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().w
      idth()), scale)); | 
| 1012         int height = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().
      height()), scale)); | 1015         int height = SkScalarCeilToInt(SkScalarMul(SkIntToScalar(gm->getISize().
      height()), scale)); | 
| 1013 | 1016 | 
| 1014         SkAutoTUnref<SkPictureFactory> factory; | 1017         SkAutoTUnref<SkPictureFactory> factory; | 
| 1015         if (kTileGrid_BbhType == bbhType) { | 1018         if (kTileGrid_BbhType == bbhType) { | 
| 1016             SkTileGridPicture::TileGridInfo info; | 1019             SkTileGridPicture::TileGridInfo info; | 
| 1017             info.fMargin.setEmpty(); | 1020             info.fMargin.setEmpty(); | 
| 1018             info.fOffset.setZero(); | 1021             info.fOffset.setZero(); | 
| 1019             info.fTileInterval.set(16, 16); | 1022             info.fTileInterval.set(16, 16); | 
| 1020             factory.reset(SkNEW_ARGS(SkTileGridPictureFactory, (info))); | 1023             factory.reset(SkNEW_ARGS(SkTileGridPictureFactory, (info))); | 
| 1021         } | 1024         } else if (kQuadTree_BbhType == bbhType) { | 
| 1022         if (kNone_BbhType != bbhType) { | 1025             factory.reset(SkNEW(SkQuadTreePictureFactory)); | 
| 1023             recordFlags |= SkPicture::kOptimizeForClippedPlayback_RecordingFlag; | 1026         } else if (kRTree_BbhType == bbhType) { | 
|  | 1027             factory.reset(SkNEW(SkRTreePictureFactory)); | 
| 1024         } | 1028         } | 
| 1025         SkPictureRecorder recorder(factory); | 1029         SkPictureRecorder recorder(factory); | 
| 1026         SkCanvas* cv = recorder.beginRecording(width, height, recordFlags); | 1030         SkCanvas* cv = recorder.beginRecording(width, height, recordFlags); | 
| 1027         cv->scale(scale, scale); | 1031         cv->scale(scale, scale); | 
| 1028         invokeGM(gm, cv, false, false); | 1032         invokeGM(gm, cv, false, false); | 
| 1029         return recorder.endRecording(); | 1033         return recorder.endRecording(); | 
| 1030     } | 1034     } | 
| 1031 | 1035 | 
| 1032     static SkPicture* stream_to_new_picture(const SkPicture& src) { | 1036     static SkPicture* stream_to_new_picture(const SkPicture& src) { | 
| 1033         SkDynamicMemoryWStream storage; | 1037         SkDynamicMemoryWStream storage; | 
| (...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1442               "^ and $ requires an exact match\n" | 1446               "^ and $ requires an exact match\n" | 
| 1443               "If a test does not match any list entry,\n" | 1447               "If a test does not match any list entry,\n" | 
| 1444               "it is skipped unless some list entry starts with ~"); | 1448               "it is skipped unless some list entry starts with ~"); | 
| 1445 DEFINE_string(missingExpectationsPath, "", "Write images for tests without expec
      tations " | 1449 DEFINE_string(missingExpectationsPath, "", "Write images for tests without expec
      tations " | 
| 1446               "into this directory."); | 1450               "into this directory."); | 
| 1447 DEFINE_string(mismatchPath, "", "Write images for tests that failed due to " | 1451 DEFINE_string(mismatchPath, "", "Write images for tests that failed due to " | 
| 1448               "pixel mismatches into this directory."); | 1452               "pixel mismatches into this directory."); | 
| 1449 DEFINE_string(modulo, "", "[--modulo <remainder> <divisor>]: only run tests for 
      which " | 1453 DEFINE_string(modulo, "", "[--modulo <remainder> <divisor>]: only run tests for 
      which " | 
| 1450               "testIndex %% divisor == remainder."); | 1454               "testIndex %% divisor == remainder."); | 
| 1451 DEFINE_bool(pipe, false, "Exercise the SkGPipe replay test pass."); | 1455 DEFINE_bool(pipe, false, "Exercise the SkGPipe replay test pass."); | 
|  | 1456 DEFINE_bool(quadtree, false, "Exercise the QuadTree variant of SkPicture test pa
      ss."); | 
| 1452 DEFINE_string2(readPath, r, "", "Read reference images from this dir, and report
       " | 1457 DEFINE_string2(readPath, r, "", "Read reference images from this dir, and report
       " | 
| 1453                "any differences between those and the newly generated ones."); | 1458                "any differences between those and the newly generated ones."); | 
| 1454 DEFINE_bool(replay, false, "Exercise the SkPicture replay test pass."); | 1459 DEFINE_bool(replay, false, "Exercise the SkPicture replay test pass."); | 
| 1455 #if SK_SUPPORT_GPU | 1460 #if SK_SUPPORT_GPU | 
| 1456 DEFINE_bool(resetGpuContext, false, "Reset the GrContext prior to running each G
      M."); | 1461 DEFINE_bool(resetGpuContext, false, "Reset the GrContext prior to running each G
      M."); | 
| 1457 #endif | 1462 #endif | 
| 1458 DEFINE_string2(resourcePath, i, "resources", "Directory that stores image resour
      ces."); | 1463 DEFINE_string2(resourcePath, i, "resources", "Directory that stores image resour
      ces."); | 
| 1459 DEFINE_bool(rtree, false, "Exercise the R-Tree variant of SkPicture test pass.")
      ; | 1464 DEFINE_bool(rtree, false, "Exercise the R-Tree variant of SkPicture test pass.")
      ; | 
| 1460 DEFINE_bool(serialize, false, "Exercise the SkPicture serialization & deserializ
      ation test pass."); | 1465 DEFINE_bool(serialize, false, "Exercise the SkPicture serialization & deserializ
      ation test pass."); | 
| 1461 DEFINE_bool(simulatePipePlaybackFailure, false, "Simulate a rendering failure in
       pipe mode only."); | 1466 DEFINE_bool(simulatePipePlaybackFailure, false, "Simulate a rendering failure in
       pipe mode only."); | 
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1600         // overwriting each other.  But we should make sure it doesn't | 1605         // overwriting each other.  But we should make sure it doesn't | 
| 1601         // break anybody. | 1606         // break anybody. | 
| 1602         SkString path = gmmain.make_filename(FLAGS_writePicturePath[0], gm->getN
      ame(), | 1607         SkString path = gmmain.make_filename(FLAGS_writePicturePath[0], gm->getN
      ame(), | 
| 1603                                              compareConfig.fName, "", pictureSuf
      fix); | 1608                                              compareConfig.fName, "", pictureSuf
      fix); | 
| 1604         SkFILEWStream stream(path.c_str()); | 1609         SkFILEWStream stream(path.c_str()); | 
| 1605         pict->serialize(&stream); | 1610         pict->serialize(&stream); | 
| 1606     } | 1611     } | 
| 1607 | 1612 | 
| 1608     if (FLAGS_rtree) { | 1613     if (FLAGS_rtree) { | 
| 1609         const char renderModeDescriptor[] = "-rtree"; | 1614         const char renderModeDescriptor[] = "-rtree"; | 
| 1610         if ((gmFlags & GM::kSkipPicture_Flag) || | 1615         if ((gmFlags & GM::kSkipPicture_Flag) || (gmFlags & GM::kSkipTiled_Flag)
      ) { | 
| 1611             (gmFlags & GM::kSkipTiled_Flag)) { |  | 
| 1612             gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNameP
      lusConfig, | 1616             gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNameP
      lusConfig, | 
| 1613                                      renderModeDescriptor); | 1617                                      renderModeDescriptor); | 
| 1614             errorsForAllModes.add(kIntentionallySkipped_ErrorType); | 1618             errorsForAllModes.add(kIntentionallySkipped_ErrorType); | 
| 1615         } else { | 1619         } else { | 
| 1616             SkPicture* pict = gmmain.generate_new_picture( | 1620             SkPicture* pict = gmmain.generate_new_picture(gm, kRTree_BbhType, 0)
      ; | 
| 1617                 gm, kRTree_BbhType, SkPicture::kOptimizeForClippedPlayback_Recor
      dingFlag); |  | 
| 1618             SkAutoUnref aur(pict); | 1621             SkAutoUnref aur(pict); | 
| 1619             SkBitmap bitmap; | 1622             SkBitmap bitmap; | 
| 1620             gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap)
      ; | 1623             gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap)
      ; | 
| 1621             errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma
      p( | 1624             errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma
      p( | 
| 1622                 gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap
      , | 1625                 gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap
      , | 
| 1623                 &comparisonBitmap)); | 1626                 &comparisonBitmap)); | 
| 1624         } | 1627         } | 
| 1625     } | 1628     } | 
| 1626 | 1629 | 
|  | 1630     if (FLAGS_quadtree) { | 
|  | 1631         const char renderModeDescriptor[] = "-quadtree"; | 
|  | 1632         if ((gmFlags & GM::kSkipPicture_Flag) || (gmFlags & GM::kSkipTiled_Flag)
      ) { | 
|  | 1633             gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNameP
      lusConfig, | 
|  | 1634                                      renderModeDescriptor); | 
|  | 1635             errorsForAllModes.add(kIntentionallySkipped_ErrorType); | 
|  | 1636         } else { | 
|  | 1637             SkPicture* pict = gmmain.generate_new_picture(gm, kQuadTree_BbhType,
       0); | 
|  | 1638             SkAutoUnref aur(pict); | 
|  | 1639             SkBitmap bitmap; | 
|  | 1640             gmmain.generate_image_from_picture(gm, compareConfig, pict, &bitmap)
      ; | 
|  | 1641             errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma
      p( | 
|  | 1642                 gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap
      , | 
|  | 1643                 &comparisonBitmap)); | 
|  | 1644         } | 
|  | 1645     } | 
|  | 1646 | 
| 1627     if (FLAGS_tileGrid) { | 1647     if (FLAGS_tileGrid) { | 
| 1628         for(int scaleIndex = 0; scaleIndex < tileGridReplayScales.count(); ++sca
      leIndex) { | 1648         for(int scaleIndex = 0; scaleIndex < tileGridReplayScales.count(); ++sca
      leIndex) { | 
| 1629             SkScalar replayScale = tileGridReplayScales[scaleIndex]; | 1649             SkScalar replayScale = tileGridReplayScales[scaleIndex]; | 
| 1630             SkString renderModeDescriptor("-tilegrid"); | 1650             SkString renderModeDescriptor("-tilegrid"); | 
| 1631             if (SK_Scalar1 != replayScale) { | 1651             if (SK_Scalar1 != replayScale) { | 
| 1632                 renderModeDescriptor += "-scale-"; | 1652                 renderModeDescriptor += "-scale-"; | 
| 1633                 renderModeDescriptor.appendScalar(replayScale); | 1653                 renderModeDescriptor.appendScalar(replayScale); | 
| 1634             } | 1654             } | 
| 1635 | 1655 | 
| 1636             if ((gmFlags & GM::kSkipPicture_Flag) || | 1656             if ((gmFlags & GM::kSkipPicture_Flag) || | 
| (...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2437     if (FLAGS_forceBWtext) { | 2457     if (FLAGS_forceBWtext) { | 
| 2438         canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 2458         canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 
| 2439     } | 2459     } | 
| 2440 } | 2460 } | 
| 2441 | 2461 | 
| 2442 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 2462 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 
| 2443 int main(int argc, char * const argv[]) { | 2463 int main(int argc, char * const argv[]) { | 
| 2444     return tool_main(argc, (char**) argv); | 2464     return tool_main(argc, (char**) argv); | 
| 2445 } | 2465 } | 
| 2446 #endif | 2466 #endif | 
| OLD | NEW | 
|---|