Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(516)

Side by Side Diff: gm/gmmain.cpp

Issue 21715002: Refactor gmmain to separate out config parsing (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Simplify printing, make bad JPEG quality settings fail Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1749 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 SkString subdir; 1760 SkString subdir;
1761 subdir.appendf("%s%c%s", root, SkPATH_SEPARATOR, config.fName); 1761 subdir.appendf("%s%c%s", root, SkPATH_SEPARATOR, config.fName);
1762 if (!sk_mkdir(subdir.c_str())) { 1762 if (!sk_mkdir(subdir.c_str())) {
1763 return false; 1763 return false;
1764 } 1764 }
1765 } 1765 }
1766 } 1766 }
1767 return true; 1767 return true;
1768 } 1768 }
1769 1769
1770 int tool_main(int argc, char** argv); 1770 static bool parse_flags_configs(SkTDArray<size_t>* outConfigs,
1771 int tool_main(int argc, char** argv) { 1771 GrContextFactory* grFactory) {
1772
1773 #if SK_ENABLE_INST_COUNT
1774 gPrintInstCount = true;
1775 #endif
1776
1777 SkGraphics::Init();
1778 // we don't need to see this during a run
1779 gSkSuppressFontCachePurgeSpew = true;
1780
1781 setSystemPreferences();
1782 GMMain gmmain;
1783
1784 SkTDArray<size_t> configs;
1785 SkTDArray<size_t> excludeConfigs; 1772 SkTDArray<size_t> excludeConfigs;
1786 bool userConfig = false;
1787
1788 SkString usage;
1789 usage.printf("Run the golden master tests.\n");
1790 SkCommandLineFlags::SetUsage(usage.c_str());
1791 SkCommandLineFlags::Parse(argc, argv);
1792
1793 gmmain.fUseFileHierarchy = FLAGS_hierarchy;
1794 gmmain.fWriteChecksumBasedFilenames = FLAGS_writeChecksumBasedFilenames;
1795 if (FLAGS_mismatchPath.count() == 1) {
1796 gmmain.fMismatchPath = FLAGS_mismatchPath[0];
1797 }
1798 if (FLAGS_missingExpectationsPath.count() == 1) {
1799 gmmain.fMissingExpectationsPath = FLAGS_missingExpectationsPath[0];
1800 }
1801 1773
1802 for (int i = 0; i < FLAGS_config.count(); i++) { 1774 for (int i = 0; i < FLAGS_config.count(); i++) {
1803 const char* config = FLAGS_config[i]; 1775 const char* config = FLAGS_config[i];
1804 userConfig = true;
1805 bool exclude = false; 1776 bool exclude = false;
1806 if (*config == kExcludeConfigChar) { 1777 if (*config == kExcludeConfigChar) {
1807 exclude = true; 1778 exclude = true;
1808 config += 1; 1779 config += 1;
1809 } 1780 }
1810 int index = findConfig(config); 1781 int index = findConfig(config);
1811 if (index >= 0) { 1782 if (index >= 0) {
1812 if (exclude) { 1783 if (exclude) {
1813 *excludeConfigs.append() = index; 1784 *excludeConfigs.append() = index;
1814 } else { 1785 } else {
1815 appendUnique<size_t>(&configs, index); 1786 appendUnique<size_t>(outConfigs, index);
1816 } 1787 }
1817 } else if (0 == strcmp(kDefaultsConfigStr, config)) { 1788 } else if (0 == strcmp(kDefaultsConfigStr, config)) {
1789 if (exclude) {
1790 gm_fprintf(stderr, "%c%s is not allowed.\n",
1791 kExcludeConfigChar, kDefaultsConfigStr);
1792 return false;
1793 }
1818 for (size_t c = 0; c < SK_ARRAY_COUNT(gRec); ++c) { 1794 for (size_t c = 0; c < SK_ARRAY_COUNT(gRec); ++c) {
1819 if (gRec[c].fRunByDefault) { 1795 if (gRec[c].fRunByDefault) {
1820 if (exclude) { 1796 appendUnique<size_t>(outConfigs, c);
1821 gm_fprintf(stderr, "%c%s is not allowed.\n",
1822 kExcludeConfigChar, kDefaultsConfigStr);
1823 return -1;
1824 } else {
1825 appendUnique<size_t>(&configs, c);
1826 }
1827 } 1797 }
1828 } 1798 }
1829 } else { 1799 } else {
1830 gm_fprintf(stderr, "unrecognized config %s\n", config); 1800 gm_fprintf(stderr, "unrecognized config %s\n", config);
1831 return -1; 1801 return false;
1832 } 1802 }
1833 } 1803 }
1834 1804
1835 for (int i = 0; i < FLAGS_excludeConfig.count(); i++) { 1805 for (int i = 0; i < FLAGS_excludeConfig.count(); i++) {
1836 int index = findConfig(FLAGS_excludeConfig[i]); 1806 int index = findConfig(FLAGS_excludeConfig[i]);
1837 if (index >= 0) { 1807 if (index >= 0) {
1838 *excludeConfigs.append() = index; 1808 *excludeConfigs.append() = index;
1839 } else { 1809 } else {
1840 gm_fprintf(stderr, "unrecognized excludeConfig %s\n", FLAGS_excludeC onfig[i]); 1810 gm_fprintf(stderr, "unrecognized excludeConfig %s\n", FLAGS_excludeC onfig[i]);
1841 return -1; 1811 return false;
1842 } 1812 }
1843 } 1813 }
1844 1814
1845 int moduloRemainder = -1; 1815 if (outConfigs->count() == 0) {
1846 int moduloDivisor = -1; 1816 // if no config is specified by user, add the defaults
1847 1817 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) {
1848 if (FLAGS_modulo.count() == 2) { 1818 if (gRec[i].fRunByDefault) {
1849 moduloRemainder = atoi(FLAGS_modulo[0]); 1819 *outConfigs->append() = i;
1850 moduloDivisor = atoi(FLAGS_modulo[1]); 1820 }
1851 if (moduloRemainder < 0 || moduloDivisor <= 0 || moduloRemainder >= modu loDivisor) { 1821 }
1852 gm_fprintf(stderr, "invalid modulo values."); 1822 }
1853 return -1; 1823 // now remove any explicitly excluded configs
1854 } 1824 for (int i = 0; i < excludeConfigs.count(); ++i) {
1855 } 1825 int index = outConfigs->find(excludeConfigs[i]);
1856 1826 if (index >= 0) {
1827 outConfigs->remove(index);
1828 // now assert that there was only one copy in configs[]
1829 SkASSERT(outConfigs->find(excludeConfigs[i]) < 0);
1830 }
1831 }
1832
1833 if (grFactory != NULL) {
1834 for (int i = 0; i < outConfigs->count(); ++i) {
1835 size_t index = (*outConfigs)[i];
1836 if (kGPU_Backend == gRec[index].fBackend) {
1837 GrContext* ctx = grFactory->get(gRec[index].fGLContextType);
1838 if (NULL == ctx) {
1839 gm_fprintf(stderr, "GrContext could not be created for confi g %s."
1840 " Config will be skipped.\n", gRec[index].fName);
1841 outConfigs->remove(i);
1842 --i;
1843 continue;
1844 }
1845 if (gRec[index].fSampleCnt > ctx->getMaxSampleCount()) {
1846 gm_fprintf(stderr, "Sample count (%d) of config %s is not su pported."
1847 " Config will be skipped.\n",
1848 gRec[index].fSampleCnt, gRec[index].fName);
1849 outConfigs->remove(i);
1850 --i;
1851 }
1852 }
1853 }
1854 }
1855
1856 if (outConfigs->isEmpty()) {
1857 gm_fprintf(stderr, "No configs to run.");
1858 return false;
1859 }
1860
1861 // now show the user the set of configs that will be run.
1862 SkString configStr("These configs will be run: ");
1863 // show the user the config that will run.
1864 for (int i = 0; i < outConfigs->count(); ++i) {
1865 configStr.appendf("%s ", gRec[(*outConfigs)[i]].fName);
1866 }
1867 gm_fprintf(stdout, "%s\n", configStr.c_str());
1868
1869 return true;
1870 }
1871
1872 static bool parse_flags_ignore_error_types(ErrorCombination* outErrorTypes) {
1857 if (FLAGS_ignoreErrorTypes.count() > 0) { 1873 if (FLAGS_ignoreErrorTypes.count() > 0) {
1858 gmmain.fIgnorableErrorTypes = ErrorCombination(); 1874 *outErrorTypes = ErrorCombination();
1859 for (int i = 0; i < FLAGS_ignoreErrorTypes.count(); i++) { 1875 for (int i = 0; i < FLAGS_ignoreErrorTypes.count(); i++) {
1860 ErrorType type; 1876 ErrorType type;
1861 const char *name = FLAGS_ignoreErrorTypes[i]; 1877 const char *name = FLAGS_ignoreErrorTypes[i];
1862 if (!getErrorTypeByName(name, &type)) { 1878 if (!getErrorTypeByName(name, &type)) {
1863 gm_fprintf(stderr, "cannot find ErrorType with name '%s'\n", nam e); 1879 gm_fprintf(stderr, "cannot find ErrorType with name '%s'\n", nam e);
1864 return -1; 1880 return false;
1865 } else { 1881 } else {
1866 gmmain.fIgnorableErrorTypes.add(type); 1882 outErrorTypes->add(type);
1867 } 1883 }
1868 } 1884 }
1869 } 1885 }
1870 1886 return true;
1871 #if SK_SUPPORT_GPU 1887 }
1888
1889 static bool parse_flags_modulo(int* moduloRemainder, int* moduloDivisor) {
1890 if (FLAGS_modulo.count() == 2) {
1891 *moduloRemainder = atoi(FLAGS_modulo[0]);
1892 *moduloDivisor = atoi(FLAGS_modulo[1]);
1893 if (*moduloRemainder < 0 || *moduloDivisor <= 0 ||
1894 *moduloRemainder >= *moduloDivisor) {
1895 gm_fprintf(stderr, "invalid modulo values.");
1896 return false;
1897 }
1898 }
1899 return true;
1900 }
1901
1902 static bool parse_flags_gpu_cache(int* sizeBytes, int* sizeCount) {
1872 if (FLAGS_gpuCacheSize.count() > 0) { 1903 if (FLAGS_gpuCacheSize.count() > 0) {
1873 if (FLAGS_gpuCacheSize.count() != 2) { 1904 if (FLAGS_gpuCacheSize.count() != 2) {
1874 gm_fprintf(stderr, "--gpuCacheSize requires two arguments\n"); 1905 gm_fprintf(stderr, "--gpuCacheSize requires two arguments\n");
1875 return -1; 1906 return false;
1876 } 1907 }
1877 gGpuCacheSizeBytes = atoi(FLAGS_gpuCacheSize[0]); 1908 *sizeBytes = atoi(FLAGS_gpuCacheSize[0]);
1878 gGpuCacheSizeCount = atoi(FLAGS_gpuCacheSize[1]); 1909 *sizeCount = atoi(FLAGS_gpuCacheSize[1]);
1879 } else { 1910 } else {
1880 gGpuCacheSizeBytes = DEFAULT_CACHE_VALUE; 1911 *sizeBytes = DEFAULT_CACHE_VALUE;
1881 gGpuCacheSizeCount = DEFAULT_CACHE_VALUE; 1912 *sizeCount = DEFAULT_CACHE_VALUE;
1882 } 1913 }
1883 #endif 1914 return true;
1884 1915 }
1885 SkTDArray<SkScalar> tileGridReplayScales; 1916
1886 *tileGridReplayScales.append() = SK_Scalar1; // By default only test at scal e 1.0 1917 static bool parse_flags_tile_grid_replay_scales(SkTDArray<SkScalar>* outScales) {
1918 *outScales->append() = SK_Scalar1; // By default only test at scale 1.0
1887 if (FLAGS_tileGridReplayScales.count() > 0) { 1919 if (FLAGS_tileGridReplayScales.count() > 0) {
1888 tileGridReplayScales.reset(); 1920 outScales->reset();
1889 for (int i = 0; i < FLAGS_tileGridReplayScales.count(); i++) { 1921 for (int i = 0; i < FLAGS_tileGridReplayScales.count(); i++) {
1890 double val = atof(FLAGS_tileGridReplayScales[i]); 1922 double val = atof(FLAGS_tileGridReplayScales[i]);
1891 if (0 < val) { 1923 if (0 < val) {
1892 *tileGridReplayScales.append() = SkDoubleToScalar(val); 1924 *outScales->append() = SkDoubleToScalar(val);
1893 } 1925 }
1894 } 1926 }
1895 if (0 == tileGridReplayScales.count()) { 1927 if (0 == outScales->count()) {
1896 // Should have at least one scale 1928 // Should have at least one scale
1897 gm_fprintf(stderr, "--tileGridReplayScales requires at least one sca le.\n"); 1929 gm_fprintf(stderr, "--tileGridReplayScales requires at least one sca le.\n");
1898 return -1; 1930 return false;
1899 } 1931 }
1900 } 1932 }
1901 1933 return true;
1902 if (!userConfig) { 1934 }
1903 // if no config is specified by user, add the defaults 1935
1904 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 1936 static bool parse_flags_gmmain_paths(GMMain* gmmain) {
1905 if (gRec[i].fRunByDefault) { 1937 gmmain->fUseFileHierarchy = FLAGS_hierarchy;
1906 *configs.append() = i; 1938 gmmain->fWriteChecksumBasedFilenames = FLAGS_writeChecksumBasedFilenames;
1907 } 1939
1908 } 1940 if (FLAGS_mismatchPath.count() == 1) {
1909 } 1941 gmmain->fMismatchPath = FLAGS_mismatchPath[0];
1910 // now remove any explicitly excluded configs 1942 }
1911 for (int i = 0; i < excludeConfigs.count(); ++i) { 1943
1912 int index = configs.find(excludeConfigs[i]); 1944 if (FLAGS_missingExpectationsPath.count() == 1) {
1913 if (index >= 0) { 1945 gmmain->fMissingExpectationsPath = FLAGS_missingExpectationsPath[0];
1914 configs.remove(index);
1915 // now assert that there was only one copy in configs[]
1916 SkASSERT(configs.find(excludeConfigs[i]) < 0);
1917 }
1918 }
1919
1920 #if SK_SUPPORT_GPU
1921 GrContextFactory* grFactory = new GrContextFactory;
1922 for (int i = 0; i < configs.count(); ++i) {
1923 size_t index = configs[i];
1924 if (kGPU_Backend == gRec[index].fBackend) {
1925 GrContext* ctx = grFactory->get(gRec[index].fGLContextType);
1926 if (NULL == ctx) {
1927 gm_fprintf(stderr, "GrContext could not be created for config %s ."
1928 " Config will be skipped.\n", gRec[index].fName);
1929 configs.remove(i);
1930 --i;
1931 continue;
1932 }
1933 if (gRec[index].fSampleCnt > ctx->getMaxSampleCount()) {
1934 gm_fprintf(stderr, "Sample count (%d) of config %s is not suppor ted."
1935 " Config will be skipped.\n", gRec[index].fSampleCnt, gRec[index].fName);
1936 configs.remove(i);
1937 --i;
1938 }
1939 }
1940 }
1941 #else
1942 GrContextFactory* grFactory = NULL;
1943 #endif
1944
1945 if (configs.isEmpty()) {
1946 gm_fprintf(stderr, "No configs to run.");
1947 return -1;
1948 }
1949
1950 // now show the user the set of configs that will be run.
1951 SkString configStr("These configs will be run: ");
1952 // show the user the config that will run.
1953 for (int i = 0; i < configs.count(); ++i) {
1954 configStr.appendf("%s%s", gRec[configs[i]].fName, (i == configs.count() - 1) ? "\n" : " ");
1955 }
1956 gm_fprintf(stdout, "%s", configStr.c_str());
1957
1958 if (FLAGS_resourcePath.count() == 1) {
1959 GM::SetResourcePath(FLAGS_resourcePath[0]);
1960 } 1946 }
1961 1947
1962 if (FLAGS_readPath.count() == 1) { 1948 if (FLAGS_readPath.count() == 1) {
1963 const char* readPath = FLAGS_readPath[0]; 1949 const char* readPath = FLAGS_readPath[0];
1964 if (!sk_exists(readPath)) { 1950 if (!sk_exists(readPath)) {
1965 gm_fprintf(stderr, "readPath %s does not exist!\n", readPath); 1951 gm_fprintf(stderr, "readPath %s does not exist!\n", readPath);
1966 return -1; 1952 return false;
1967 } 1953 }
1968 if (sk_isdir(readPath)) { 1954 if (sk_isdir(readPath)) {
1969 if (FLAGS_verbose) { 1955 if (FLAGS_verbose) {
1970 gm_fprintf(stdout, "reading from %s\n", readPath); 1956 gm_fprintf(stdout, "reading from %s\n", readPath);
1971 } 1957 }
1972 gmmain.fExpectationsSource.reset(SkNEW_ARGS( 1958 gmmain->fExpectationsSource.reset(SkNEW_ARGS(
1973 IndividualImageExpectationsSource, (readPath))); 1959 IndividualImageExpectationsSource, (readPath)));
1974 } else { 1960 } else {
1975 if (FLAGS_verbose) { 1961 if (FLAGS_verbose) {
1976 gm_fprintf(stdout, "reading expectations from JSON summary file %s\n", readPath); 1962 gm_fprintf(stdout, "reading expectations from JSON summary file %s\n", readPath);
1977 } 1963 }
1978 gmmain.fExpectationsSource.reset(SkNEW_ARGS( 1964 gmmain->fExpectationsSource.reset(SkNEW_ARGS(JsonExpectationsSource, (readPath)));
1979 JsonExpectationsSource, (readPath))); 1965 }
1980 } 1966 }
1981 } 1967 return true;
1968 }
1969
1970 static bool parse_flags_match_strs(SkTDArray<const char*>* matchStrs) {
1971 for (int i = 0; i < FLAGS_match.count(); ++i) {
1972 matchStrs->push(FLAGS_match[i]);
1973 }
1974 return true;
1975 }
1976
1977 static bool parse_flags_resource_path() {
1978 if (FLAGS_resourcePath.count() == 1) {
1979 GM::SetResourcePath(FLAGS_resourcePath[0]);
1980 }
1981 return true;
1982 }
1983
1984 static bool parse_flags_jpeg_quality() {
1985 if (FLAGS_pdfJpegQuality < -1 || FLAGS_pdfJpegQuality > 100) {
1986 gm_fprintf(stderr, "%s\n", "pdfJpegQuality must be in [-1 .. 100] range. ");
1987 return false;
1988 }
1989 return true;
1990 }
1991
1992 int tool_main(int argc, char** argv);
1993 int tool_main(int argc, char** argv) {
1994
1995 #if SK_ENABLE_INST_COUNT
1996 gPrintInstCount = true;
1997 #endif
1998
1999 SkGraphics::Init();
2000 // we don't need to see this during a run
2001 gSkSuppressFontCachePurgeSpew = true;
2002
2003 setSystemPreferences();
2004 GMMain gmmain;
2005
2006 SkString usage;
2007 usage.printf("Run the golden master tests.\n");
2008 SkCommandLineFlags::SetUsage(usage.c_str());
2009 SkCommandLineFlags::Parse(argc, argv);
2010
2011 SkTDArray<size_t> configs;
2012 int moduloRemainder = -1, moduloDivisor = -1;
vandebo (ex-Chrome) 2013/08/07 17:29:48 nit: two int lines.
2013 SkTDArray<SkScalar> tileGridReplayScales;
2014 #if SK_SUPPORT_GPU
2015 GrContextFactory* grFactory = new GrContextFactory;
2016 #else
2017 GrContextFactory* grFactory = NULL;
2018 #endif
2019 SkTDArray<const char*> matchStrs;
2020
2021 if (!parse_flags_modulo(&moduloRemainder, &moduloDivisor) ||
2022 !parse_flags_ignore_error_types(&gmmain.fIgnorableErrorTypes) ||
2023 #if SK_SUPPORT_GPU
2024 !parse_flags_gpu_cache(&gGpuCacheSizeBytes, &gGpuCacheSizeCount) ||
2025 #endif
2026 !parse_flags_tile_grid_replay_scales(&tileGridReplayScales) ||
2027 !parse_flags_gmmain_paths(&gmmain) ||
2028 !parse_flags_resource_path() ||
2029 !parse_flags_match_strs(&matchStrs) ||
2030 !parse_flags_jpeg_quality() ||
2031 !parse_flags_configs(&configs, grFactory)) {
2032 return -1;
2033 }
2034
1982 if (FLAGS_verbose) { 2035 if (FLAGS_verbose) {
1983 if (FLAGS_writePath.count() == 1) { 2036 if (FLAGS_writePath.count() == 1) {
1984 gm_fprintf(stdout, "writing to %s\n", FLAGS_writePath[0]); 2037 gm_fprintf(stdout, "writing to %s\n", FLAGS_writePath[0]);
1985 } 2038 }
1986 if (NULL != gmmain.fMismatchPath) { 2039 if (NULL != gmmain.fMismatchPath) {
1987 gm_fprintf(stdout, "writing mismatches to %s\n", gmmain.fMismatchPat h); 2040 gm_fprintf(stdout, "writing mismatches to %s\n", gmmain.fMismatchPat h);
1988 } 2041 }
1989 if (NULL != gmmain.fMissingExpectationsPath) { 2042 if (NULL != gmmain.fMissingExpectationsPath) {
1990 gm_fprintf(stdout, "writing images without expectations to %s\n", 2043 gm_fprintf(stdout, "writing images without expectations to %s\n",
1991 gmmain.fMissingExpectationsPath); 2044 gmmain.fMissingExpectationsPath);
1992 } 2045 }
1993 if (FLAGS_writePicturePath.count() == 1) { 2046 if (FLAGS_writePicturePath.count() == 1) {
1994 gm_fprintf(stdout, "writing pictures to %s\n", FLAGS_writePicturePat h[0]); 2047 gm_fprintf(stdout, "writing pictures to %s\n", FLAGS_writePicturePat h[0]);
1995 } 2048 }
1996 if (FLAGS_resourcePath.count() == 1) { 2049 if (FLAGS_resourcePath.count() == 1) {
1997 gm_fprintf(stdout, "reading resources from %s\n", FLAGS_resourcePath [0]); 2050 gm_fprintf(stdout, "reading resources from %s\n", FLAGS_resourcePath [0]);
1998 } 2051 }
1999 } 2052 }
2000 2053
2001 if (moduloDivisor <= 0) {
2002 moduloRemainder = -1;
2003 }
2004 if (moduloRemainder < 0 || moduloRemainder >= moduloDivisor) {
2005 moduloRemainder = -1;
2006 }
2007
2008 int gmsRun = 0; 2054 int gmsRun = 0;
2009 int gmIndex = -1; 2055 int gmIndex = -1;
2010 SkString moduloStr; 2056 SkString moduloStr;
2011 2057
2012 // If we will be writing out files, prepare subdirectories. 2058 // If we will be writing out files, prepare subdirectories.
2013 if (FLAGS_writePath.count() == 1) { 2059 if (FLAGS_writePath.count() == 1) {
2014 if (!prepare_subdirectories(FLAGS_writePath[0], gmmain.fUseFileHierarchy , configs)) { 2060 if (!prepare_subdirectories(FLAGS_writePath[0], gmmain.fUseFileHierarchy , configs)) {
2015 return -1; 2061 return -1;
2016 } 2062 }
2017 } 2063 }
2018 if (NULL != gmmain.fMismatchPath) { 2064 if (NULL != gmmain.fMismatchPath) {
2019 if (!prepare_subdirectories(gmmain.fMismatchPath, gmmain.fUseFileHierarc hy, configs)) { 2065 if (!prepare_subdirectories(gmmain.fMismatchPath, gmmain.fUseFileHierarc hy, configs)) {
2020 return -1; 2066 return -1;
2021 } 2067 }
2022 } 2068 }
2023 if (NULL != gmmain.fMissingExpectationsPath) { 2069 if (NULL != gmmain.fMissingExpectationsPath) {
2024 if (!prepare_subdirectories(gmmain.fMissingExpectationsPath, gmmain.fUse FileHierarchy, 2070 if (!prepare_subdirectories(gmmain.fMissingExpectationsPath, gmmain.fUse FileHierarchy,
2025 configs)) { 2071 configs)) {
2026 return -1; 2072 return -1;
2027 } 2073 }
2028 } 2074 }
2029 2075
2030 if (FLAGS_pdfJpegQuality < -1 || FLAGS_pdfJpegQuality > 100) {
2031 gm_fprintf(stderr, "%s\n", "pdfJpegQuality must be in [-1 .. 100] range. ");
2032 }
2033
2034 Iter iter; 2076 Iter iter;
2035 GM* gm; 2077 GM* gm;
2036 while ((gm = iter.next()) != NULL) { 2078 while ((gm = iter.next()) != NULL) {
2037 SkAutoTDelete<GM> adgm(gm); 2079 SkAutoTDelete<GM> adgm(gm);
2038 ++gmIndex; 2080 ++gmIndex;
2039 if (moduloRemainder >= 0) { 2081 if (moduloRemainder >= 0) {
2040 if ((gmIndex % moduloDivisor) != moduloRemainder) { 2082 if ((gmIndex % moduloDivisor) != moduloRemainder) {
2041 continue; 2083 continue;
2042 } 2084 }
2043 moduloStr.printf("[%d.%d] ", gmIndex, moduloDivisor); 2085 moduloStr.printf("[%d.%d] ", gmIndex, moduloDivisor);
2044 } 2086 }
2045 2087
2046 const char* shortName = gm->shortName(); 2088 const char* shortName = gm->shortName();
2047 2089
2048 SkTDArray<const char*> matchStrs;
2049 for (int i = 0; i < FLAGS_match.count(); ++i) {
2050 matchStrs.push(FLAGS_match[i]);
2051 }
2052 if (SkCommandLineFlags::ShouldSkip(matchStrs, shortName)) { 2090 if (SkCommandLineFlags::ShouldSkip(matchStrs, shortName)) {
2053 continue; 2091 continue;
2054 } 2092 }
2055 2093
2056 gmsRun++; 2094 gmsRun++;
2057 SkISize size = gm->getISize(); 2095 SkISize size = gm->getISize();
2058 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name, 2096 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name,
2059 size.width(), size.height()); 2097 size.width(), size.height());
2060 2098
2061 run_multiple_configs(gmmain, gm, configs, grFactory); 2099 run_multiple_configs(gmmain, gm, configs, grFactory);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2135 if (FLAGS_forceBWtext) { 2173 if (FLAGS_forceBWtext) {
2136 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); 2174 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref();
2137 } 2175 }
2138 } 2176 }
2139 2177
2140 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 2178 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
2141 int main(int argc, char * const argv[]) { 2179 int main(int argc, char * const argv[]) {
2142 return tool_main(argc, (char**) argv); 2180 return tool_main(argc, (char**) argv);
2143 } 2181 }
2144 #endif 2182 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698