| 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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 enum Backend { | 135 enum Backend { |
| 136 kRaster_Backend, | 136 kRaster_Backend, |
| 137 kGPU_Backend, | 137 kGPU_Backend, |
| 138 kPDF_Backend, | 138 kPDF_Backend, |
| 139 kXPS_Backend, | 139 kXPS_Backend, |
| 140 }; | 140 }; |
| 141 | 141 |
| 142 enum BbhType { | 142 enum BbhType { |
| 143 kNone_BbhType, | 143 kNone_BbhType, |
| 144 kRTree_BbhType, | 144 kRTree_BbhType, |
| 145 kTileGrid_BbhType, | |
| 146 }; | 145 }; |
| 147 | 146 |
| 148 enum ConfigFlags { | 147 enum ConfigFlags { |
| 149 kNone_ConfigFlag = 0x0, | 148 kNone_ConfigFlag = 0x0, |
| 150 /* Write GM images if a write path is provided. */ | 149 /* Write GM images if a write path is provided. */ |
| 151 kWrite_ConfigFlag = 0x1, | 150 kWrite_ConfigFlag = 0x1, |
| 152 /* Read reference GM images if a read path is provided. */ | 151 /* Read reference GM images if a read path is provided. */ |
| 153 kRead_ConfigFlag = 0x2, | 152 kRead_ConfigFlag = 0x2, |
| 154 kRW_ConfigFlag = (kWrite_ConfigFlag | kRead_ConfigFlag), | 153 kRW_ConfigFlag = (kWrite_ConfigFlag | kRead_ConfigFlag), |
| 155 /* Use distance fields for rendering text */ | 154 /* Use distance fields for rendering text */ |
| (...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1032 | 1031 |
| 1033 return errors; | 1032 return errors; |
| 1034 } | 1033 } |
| 1035 | 1034 |
| 1036 static SkPicture* generate_new_picture(GM* gm, BbhType bbhType, uint32_t rec
ordFlags, | 1035 static SkPicture* generate_new_picture(GM* gm, BbhType bbhType, uint32_t rec
ordFlags, |
| 1037 SkScalar scale = SK_Scalar1) { | 1036 SkScalar scale = SK_Scalar1) { |
| 1038 SkScalar width = SkScalarMul(SkIntToScalar(gm->getISize().width()), scal
e); | 1037 SkScalar width = SkScalarMul(SkIntToScalar(gm->getISize().width()), scal
e); |
| 1039 SkScalar height = SkScalarMul(SkIntToScalar(gm->getISize().height()), sc
ale); | 1038 SkScalar height = SkScalarMul(SkIntToScalar(gm->getISize().height()), sc
ale); |
| 1040 | 1039 |
| 1041 SkAutoTDelete<SkBBHFactory> factory; | 1040 SkAutoTDelete<SkBBHFactory> factory; |
| 1042 if (kTileGrid_BbhType == bbhType) { | 1041 if (kRTree_BbhType == bbhType) { |
| 1043 SkTileGridFactory::TileGridInfo info; | |
| 1044 info.fMargin.setEmpty(); | |
| 1045 info.fOffset.setZero(); | |
| 1046 info.fTileInterval.set(16, 16); | |
| 1047 factory.reset(SkNEW_ARGS(SkTileGridFactory, (info))); | |
| 1048 } else if (kRTree_BbhType == bbhType) { | |
| 1049 factory.reset(SkNEW(SkRTreeFactory)); | 1042 factory.reset(SkNEW(SkRTreeFactory)); |
| 1050 } | 1043 } |
| 1051 SkPictureRecorder recorder; | 1044 SkPictureRecorder recorder; |
| 1052 SkCanvas* cv = recorder.beginRecording(width, height, factory.get(), rec
ordFlags); | 1045 SkCanvas* cv = recorder.beginRecording(width, height, factory.get(), rec
ordFlags); |
| 1053 cv->scale(scale, scale); | 1046 cv->scale(scale, scale); |
| 1054 invokeGM(gm, cv, false, false); | 1047 invokeGM(gm, cv, false, false); |
| 1055 return recorder.endRecording(); | 1048 return recorder.endRecording(); |
| 1056 } | 1049 } |
| 1057 | 1050 |
| 1058 static SkPicture* stream_to_new_picture(const SkPicture& src) { | 1051 static SkPicture* stream_to_new_picture(const SkPicture& src) { |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1168 return compare_test_results_to_reference_bitmap( | 1161 return compare_test_results_to_reference_bitmap( |
| 1169 gm->getName(), gRec.fName, renderModeDescriptor, bitmap, &refere
nceBitmap); | 1162 gm->getName(), gRec.fName, renderModeDescriptor, bitmap, &refere
nceBitmap); |
| 1170 } | 1163 } |
| 1171 return kEmpty_ErrorCombination; | 1164 return kEmpty_ErrorCombination; |
| 1172 } | 1165 } |
| 1173 | 1166 |
| 1174 static SkSurface* CreateSurface(const ConfigData& config, | 1167 static SkSurface* CreateSurface(const ConfigData& config, |
| 1175 const SkISize& size, | 1168 const SkISize& size, |
| 1176 GrSurface* gpuTarget) { | 1169 GrSurface* gpuTarget) { |
| 1177 if (config.fBackend == kRaster_Backend) { | 1170 if (config.fBackend == kRaster_Backend) { |
| 1178 SkImageInfo ii = SkImageInfo::Make(size.width(), size.height(), | 1171 SkImageInfo ii = SkImageInfo::Make(size.width(), size.height(), |
| 1179 config.fColorType, kPremul_SkAlph
aType); | 1172 config.fColorType, kPremul_SkAlph
aType); |
| 1180 | 1173 |
| 1181 return SkSurface::NewRaster(ii); | 1174 return SkSurface::NewRaster(ii); |
| 1182 } | 1175 } |
| 1183 #if SK_SUPPORT_GPU | 1176 #if SK_SUPPORT_GPU |
| 1184 else { | 1177 else { |
| 1185 uint32_t flags = (config.fFlags & kDFText_ConfigFlag) ? | 1178 uint32_t flags = (config.fFlags & kDFText_ConfigFlag) ? |
| 1186 SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0; | 1179 SkSurfaceProps::kUseDistanceFieldFonts_Flag : 0; |
| 1187 SkSurfaceProps props(flags, SkSurfaceProps::kLegacyFontHost_InitType
); | 1180 SkSurfaceProps props(flags, SkSurfaceProps::kLegacyFontHost_InitType
); |
| 1188 return SkSurface::NewRenderTargetDirect(gpuTarget->asRenderTarget(),
&props); | 1181 return SkSurface::NewRenderTargetDirect(gpuTarget->asRenderTarget(),
&props); |
| (...skipping 529 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1718 SkPicture* pict = gmmain.generate_new_picture(gm, kRTree_BbhType, 0)
; | 1711 SkPicture* pict = gmmain.generate_new_picture(gm, kRTree_BbhType, 0)
; |
| 1719 SkAutoTUnref<SkPicture> aur(pict); | 1712 SkAutoTUnref<SkPicture> aur(pict); |
| 1720 SkBitmap bitmap; | 1713 SkBitmap bitmap; |
| 1721 gmmain.generate_image_from_picture(gm, compareConfig, gpuTarget, pic
t, &bitmap); | 1714 gmmain.generate_image_from_picture(gm, compareConfig, gpuTarget, pic
t, &bitmap); |
| 1722 errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma
p( | 1715 errorsForAllModes.add(gmmain.compare_test_results_to_reference_bitma
p( |
| 1723 gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap
, | 1716 gm->getName(), compareConfig.fName, renderModeDescriptor, bitmap
, |
| 1724 &comparisonBitmap)); | 1717 &comparisonBitmap)); |
| 1725 } | 1718 } |
| 1726 } | 1719 } |
| 1727 | 1720 |
| 1728 if (FLAGS_tileGrid) { | |
| 1729 for(int scaleIndex = 0; scaleIndex < tileGridReplayScales.count(); ++sca
leIndex) { | |
| 1730 SkScalar replayScale = tileGridReplayScales[scaleIndex]; | |
| 1731 SkString renderModeDescriptor("-tilegrid"); | |
| 1732 if (SK_Scalar1 != replayScale) { | |
| 1733 renderModeDescriptor += "-scale-"; | |
| 1734 renderModeDescriptor.appendScalar(replayScale); | |
| 1735 } | |
| 1736 | |
| 1737 if ((gmFlags & GM::kSkipPicture_Flag) || | |
| 1738 (gmFlags & GM::kSkipTiled_Flag) || | |
| 1739 ((gmFlags & GM::kSkipScaledReplay_Flag) && replayScale != 1)) { | |
| 1740 gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortN
amePlusConfig, | |
| 1741 renderModeDescriptor.c_str()); | |
| 1742 errorsForAllModes.add(kIntentionallySkipped_ErrorType); | |
| 1743 } else { | |
| 1744 // We record with the reciprocal scale to obtain a replay | |
| 1745 // result that can be validated against comparisonBitmap. | |
| 1746 SkScalar recordScale = SkScalarInvert(replayScale); | |
| 1747 SkPicture* pict = gmmain.generate_new_picture( | |
| 1748 gm, kTileGrid_BbhType, 0, recordScale); | |
| 1749 SkAutoTUnref<SkPicture> aur(pict); | |
| 1750 SkBitmap bitmap; | |
| 1751 // We cannot yet pass 'true' to generate_image_from_picture to | |
| 1752 // perform actual tiled rendering (see Issue 1198 - | |
| 1753 // https://code.google.com/p/skia/issues/detail?id=1198) | |
| 1754 gmmain.generate_image_from_picture(gm, compareConfig, gpuTarget,
pict, &bitmap, | |
| 1755 replayScale /*, true */); | |
| 1756 errorsForAllModes.add(gmmain.compare_test_results_to_reference_b
itmap( | |
| 1757 gm->getName(), compareConfig.fName, renderModeDescriptor.c_s
tr(), bitmap, | |
| 1758 &comparisonBitmap)); | |
| 1759 } | |
| 1760 } | |
| 1761 } | |
| 1762 | |
| 1763 // run the pipe centric GM steps | 1721 // run the pipe centric GM steps |
| 1764 if (FLAGS_pipe) { | 1722 if (FLAGS_pipe) { |
| 1765 errorsForAllModes.add(gmmain.test_pipe_playback(gm, compareConfig, compa
risonBitmap, | 1723 errorsForAllModes.add(gmmain.test_pipe_playback(gm, compareConfig, compa
risonBitmap, |
| 1766 FLAGS_simulatePipePlayba
ckFailure)); | 1724 FLAGS_simulatePipePlayba
ckFailure)); |
| 1767 if (FLAGS_tiledPipe) { | 1725 if (FLAGS_tiledPipe) { |
| 1768 errorsForAllModes.add(gmmain.test_tiled_pipe_playback(gm, compareCon
fig, | 1726 errorsForAllModes.add(gmmain.test_tiled_pipe_playback(gm, compareCon
fig, |
| 1769 comparisonBitm
ap)); | 1727 comparisonBitm
ap)); |
| 1770 } | 1728 } |
| 1771 } | 1729 } |
| 1772 return errorsForAllModes; | 1730 return errorsForAllModes; |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1902 } | 1860 } |
| 1903 | 1861 |
| 1904 if (FLAGS_mpd && (kGPU_Backend == config.fBackend || kRaster_Backend ==
config.fBackend)) { | 1862 if (FLAGS_mpd && (kGPU_Backend == config.fBackend || kRaster_Backend ==
config.fBackend)) { |
| 1905 | 1863 |
| 1906 if (gmFlags & GM::kSkipPicture_Flag) { | 1864 if (gmFlags & GM::kSkipPicture_Flag) { |
| 1907 gmmain.RecordSkippedTest(shortNamePlusConfig, | 1865 gmmain.RecordSkippedTest(shortNamePlusConfig, |
| 1908 renderModeDescriptor, | 1866 renderModeDescriptor, |
| 1909 config.fBackend); | 1867 config.fBackend); |
| 1910 errorsForThisConfig.add(kIntentionallySkipped_ErrorType); | 1868 errorsForThisConfig.add(kIntentionallySkipped_ErrorType); |
| 1911 } else if (!(gmFlags & GM::kGPUOnly_Flag)) { | 1869 } else if (!(gmFlags & GM::kGPUOnly_Flag)) { |
| 1912 errorsForThisConfig.add(gmmain.testMPDDrawing(gm, config, | 1870 errorsForThisConfig.add(gmmain.testMPDDrawing(gm, config, |
| 1913 writePath, gpuTarg
et, | 1871 writePath, gpuTarg
et, |
| 1914 comparisonBitmap))
; | 1872 comparisonBitmap))
; |
| 1915 } | 1873 } |
| 1916 } | 1874 } |
| 1917 | 1875 |
| 1918 errorsForAllConfigs.add(errorsForThisConfig); | 1876 errorsForAllConfigs.add(errorsForThisConfig); |
| 1919 } | 1877 } |
| 1920 return errorsForAllConfigs; | 1878 return errorsForAllConfigs; |
| 1921 } | 1879 } |
| 1922 | 1880 |
| (...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2582 if (FLAGS_forceBWtext) { | 2540 if (FLAGS_forceBWtext) { |
| 2583 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); | 2541 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); |
| 2584 } | 2542 } |
| 2585 } | 2543 } |
| 2586 | 2544 |
| 2587 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) | 2545 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) |
| 2588 int main(int argc, char * const argv[]) { | 2546 int main(int argc, char * const argv[]) { |
| 2589 return tool_main(argc, (char**) argv); | 2547 return tool_main(argc, (char**) argv); |
| 2590 } | 2548 } |
| 2591 #endif | 2549 #endif |
| OLD | NEW |