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 |