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

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: Fix "--config ~" semantics, remove PDF rasterization stuff 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 bool parse_flags_configs(SkTDArray<size_t>* outConfigs,
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Fixed as of latest patchset last night, after I re
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%s", gRec[(*outConfigs)[i]].fName,
1866 (i == outConfigs->count() - 1) ? "\n" : " ");
edisonn 2013/08/02 12:32:41 make it (i < outConfigs->count()) ? " " : ""); an
ducky 2013/08/02 18:14:38 Done. It now just adds a space all the time, since
1867 }
1868 gm_fprintf(stdout, "%s", configStr.c_str());
1869
1870 return true;
1871 }
1872
1873 bool parse_flags_ignore_error_types(ErrorCombination* outErrorTypes) {
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Done.
1857 if (FLAGS_ignoreErrorTypes.count() > 0) { 1874 if (FLAGS_ignoreErrorTypes.count() > 0) {
1858 gmmain.fIgnorableErrorTypes = ErrorCombination(); 1875 *outErrorTypes = ErrorCombination();
1859 for (int i = 0; i < FLAGS_ignoreErrorTypes.count(); i++) { 1876 for (int i = 0; i < FLAGS_ignoreErrorTypes.count(); i++) {
1860 ErrorType type; 1877 ErrorType type;
1861 const char *name = FLAGS_ignoreErrorTypes[i]; 1878 const char *name = FLAGS_ignoreErrorTypes[i];
1862 if (!getErrorTypeByName(name, &type)) { 1879 if (!getErrorTypeByName(name, &type)) {
1863 gm_fprintf(stderr, "cannot find ErrorType with name '%s'\n", nam e); 1880 gm_fprintf(stderr, "cannot find ErrorType with name '%s'\n", nam e);
1864 return -1; 1881 return false;
1865 } else { 1882 } else {
1866 gmmain.fIgnorableErrorTypes.add(type); 1883 outErrorTypes->add(type);
1867 } 1884 }
1868 } 1885 }
1869 } 1886 }
1870 1887 return true;
1871 #if SK_SUPPORT_GPU 1888 }
1889
1890 bool parse_flags_modulo(int* moduloRemainder, int* moduloDivisor) {
edisonn 2013/08/02 12:32:41 make it static, otherwise you might get a warning
ducky 2013/08/02 18:14:38 Done.
1891 if (FLAGS_modulo.count() == 2) {
1892 *moduloRemainder = atoi(FLAGS_modulo[0]);
1893 *moduloDivisor = atoi(FLAGS_modulo[1]);
1894 if (*moduloRemainder < 0 || *moduloDivisor <= 0 ||
1895 *moduloRemainder >= *moduloDivisor) {
1896 gm_fprintf(stderr, "invalid modulo values.");
1897 return false;
1898 }
1899 }
1900 return true;
1901 }
1902
1903 bool parse_flags_gpu_cache(int* sizeBytes, int* sizeCount) {
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Done.
1872 if (FLAGS_gpuCacheSize.count() > 0) { 1904 if (FLAGS_gpuCacheSize.count() > 0) {
1873 if (FLAGS_gpuCacheSize.count() != 2) { 1905 if (FLAGS_gpuCacheSize.count() != 2) {
1874 gm_fprintf(stderr, "--gpuCacheSize requires two arguments\n"); 1906 gm_fprintf(stderr, "--gpuCacheSize requires two arguments\n");
1875 return -1; 1907 return false;
1876 } 1908 }
1877 gGpuCacheSizeBytes = atoi(FLAGS_gpuCacheSize[0]); 1909 *sizeBytes = atoi(FLAGS_gpuCacheSize[0]);
1878 gGpuCacheSizeCount = atoi(FLAGS_gpuCacheSize[1]); 1910 *sizeCount = atoi(FLAGS_gpuCacheSize[1]);
1879 } else { 1911 } else {
1880 gGpuCacheSizeBytes = DEFAULT_CACHE_VALUE; 1912 *sizeBytes = DEFAULT_CACHE_VALUE;
1881 gGpuCacheSizeCount = DEFAULT_CACHE_VALUE; 1913 *sizeCount = DEFAULT_CACHE_VALUE;
1882 } 1914 }
1883 #endif 1915 return true;
1884 1916 }
1885 SkTDArray<SkScalar> tileGridReplayScales; 1917
1886 *tileGridReplayScales.append() = SK_Scalar1; // By default only test at scal e 1.0 1918 bool parse_tile_grid_replay_scales(SkTDArray<SkScalar>* outScales) {
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Done.
1919 *outScales->append() = SK_Scalar1; // By default only test at scale 1.0
1887 if (FLAGS_tileGridReplayScales.count() > 0) { 1920 if (FLAGS_tileGridReplayScales.count() > 0) {
1888 tileGridReplayScales.reset(); 1921 outScales->reset();
1889 for (int i = 0; i < FLAGS_tileGridReplayScales.count(); i++) { 1922 for (int i = 0; i < FLAGS_tileGridReplayScales.count(); i++) {
1890 double val = atof(FLAGS_tileGridReplayScales[i]); 1923 double val = atof(FLAGS_tileGridReplayScales[i]);
1891 if (0 < val) { 1924 if (0 < val) {
1892 *tileGridReplayScales.append() = SkDoubleToScalar(val); 1925 *outScales->append() = SkDoubleToScalar(val);
1893 } 1926 }
1894 } 1927 }
1895 if (0 == tileGridReplayScales.count()) { 1928 if (0 == outScales->count()) {
1896 // Should have at least one scale 1929 // Should have at least one scale
1897 gm_fprintf(stderr, "--tileGridReplayScales requires at least one sca le.\n"); 1930 gm_fprintf(stderr, "--tileGridReplayScales requires at least one sca le.\n");
1898 return -1; 1931 return false;
1899 } 1932 }
1900 } 1933 }
1901 1934 return true;
1902 if (!userConfig) { 1935 }
1903 // if no config is specified by user, add the defaults 1936
1904 for (size_t i = 0; i < SK_ARRAY_COUNT(gRec); ++i) { 1937 bool parse_read_path(SkAutoTUnref<ExpectationsSource>* source) {
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Done.
1905 if (gRec[i].fRunByDefault) {
1906 *configs.append() = i;
1907 }
1908 }
1909 }
1910 // now remove any explicitly excluded configs
1911 for (int i = 0; i < excludeConfigs.count(); ++i) {
1912 int index = configs.find(excludeConfigs[i]);
1913 if (index >= 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 }
1961
1962 if (FLAGS_readPath.count() == 1) { 1938 if (FLAGS_readPath.count() == 1) {
1963 const char* readPath = FLAGS_readPath[0]; 1939 const char* readPath = FLAGS_readPath[0];
1964 if (!sk_exists(readPath)) { 1940 if (!sk_exists(readPath)) {
1965 gm_fprintf(stderr, "readPath %s does not exist!\n", readPath); 1941 gm_fprintf(stderr, "readPath %s does not exist!\n", readPath);
1966 return -1; 1942 return false;
1967 } 1943 }
1968 if (sk_isdir(readPath)) { 1944 if (sk_isdir(readPath)) {
1969 if (FLAGS_verbose) { 1945 if (FLAGS_verbose) {
1970 gm_fprintf(stdout, "reading from %s\n", readPath); 1946 gm_fprintf(stdout, "reading from %s\n", readPath);
1971 } 1947 }
1972 gmmain.fExpectationsSource.reset(SkNEW_ARGS( 1948 source->reset(SkNEW_ARGS(
1973 IndividualImageExpectationsSource, (readPath))); 1949 IndividualImageExpectationsSource, (readPath)));
1974 } else { 1950 } else {
1975 if (FLAGS_verbose) { 1951 if (FLAGS_verbose) {
1976 gm_fprintf(stdout, "reading expectations from JSON summary file %s\n", readPath); 1952 gm_fprintf(stdout, "reading expectations from JSON summary file %s\n", readPath);
1977 } 1953 }
1978 gmmain.fExpectationsSource.reset(SkNEW_ARGS( 1954 source->reset(SkNEW_ARGS(JsonExpectationsSource, (readPath)));
1979 JsonExpectationsSource, (readPath))); 1955 }
1980 } 1956 }
1981 } 1957 return true;
1958 }
1959
1960 bool parse_match_strs(SkTDArray<const char*>* matchStrs) {
edisonn 2013/08/02 12:32:41 static
ducky 2013/08/02 18:14:38 Done.
1961 for (int i = 0; i < FLAGS_match.count(); ++i) {
1962 matchStrs->push(FLAGS_match[i]);
1963 }
1964 return true;
1965 }
1966
1967 int tool_main(int argc, char** argv);
1968 int tool_main(int argc, char** argv) {
1969
1970 #if SK_ENABLE_INST_COUNT
1971 gPrintInstCount = true;
1972 #endif
1973
1974 SkGraphics::Init();
1975 // we don't need to see this during a run
1976 gSkSuppressFontCachePurgeSpew = true;
1977
1978 setSystemPreferences();
1979 GMMain gmmain;
1980
1981 SkString usage;
1982 usage.printf("Run the golden master tests.\n");
1983 SkCommandLineFlags::SetUsage(usage.c_str());
1984 SkCommandLineFlags::Parse(argc, argv);
1985
1986 gmmain.fUseFileHierarchy = FLAGS_hierarchy;
1987 gmmain.fWriteChecksumBasedFilenames = FLAGS_writeChecksumBasedFilenames;
1988 if (FLAGS_mismatchPath.count() == 1) {
1989 gmmain.fMismatchPath = FLAGS_mismatchPath[0];
1990 }
1991 if (FLAGS_missingExpectationsPath.count() == 1) {
1992 gmmain.fMissingExpectationsPath = FLAGS_missingExpectationsPath[0];
1993 }
1994
1995 SkTDArray<size_t> configs;
1996 int moduloRemainder = -1, moduloDivisor = -1;
1997 SkTDArray<SkScalar> tileGridReplayScales;
1998 #if SK_SUPPORT_GPU
1999 GrContextFactory* grFactory = new GrContextFactory;
2000 #else
2001 GrContextFactory* grFactory = NULL;
2002 #endif
2003 SkTDArray<const char*> matchStrs;
2004
2005 if (!parse_flags_configs(&configs, grFactory) ||
2006 !parse_flags_ignore_error_types(&(gmmain.fIgnorableErrorTypes)) ||
2007 !parse_flags_modulo(&moduloRemainder, &moduloDivisor) ||
2008 #if SK_SUPPORT_GPU
2009 !parse_flags_gpu_cache(&gGpuCacheSizeBytes, &gGpuCacheSizeCount) ||
2010 #endif
2011 !parse_tile_grid_replay_scales(&tileGridReplayScales) ||
2012 !parse_read_path(&gmmain.fExpectationsSource) ||
2013 !parse_match_strs(&matchStrs)) {
2014 return -1;
2015 }
2016
2017 if (FLAGS_resourcePath.count() == 1) {
2018 GM::SetResourcePath(FLAGS_resourcePath[0]);
2019 }
2020
1982 if (FLAGS_verbose) { 2021 if (FLAGS_verbose) {
1983 if (FLAGS_writePath.count() == 1) { 2022 if (FLAGS_writePath.count() == 1) {
1984 gm_fprintf(stdout, "writing to %s\n", FLAGS_writePath[0]); 2023 gm_fprintf(stdout, "writing to %s\n", FLAGS_writePath[0]);
1985 } 2024 }
1986 if (NULL != gmmain.fMismatchPath) { 2025 if (NULL != gmmain.fMismatchPath) {
1987 gm_fprintf(stdout, "writing mismatches to %s\n", gmmain.fMismatchPat h); 2026 gm_fprintf(stdout, "writing mismatches to %s\n", gmmain.fMismatchPat h);
1988 } 2027 }
1989 if (NULL != gmmain.fMissingExpectationsPath) { 2028 if (NULL != gmmain.fMissingExpectationsPath) {
1990 gm_fprintf(stdout, "writing images without expectations to %s\n", 2029 gm_fprintf(stdout, "writing images without expectations to %s\n",
1991 gmmain.fMissingExpectationsPath); 2030 gmmain.fMissingExpectationsPath);
1992 } 2031 }
1993 if (FLAGS_writePicturePath.count() == 1) { 2032 if (FLAGS_writePicturePath.count() == 1) {
1994 gm_fprintf(stdout, "writing pictures to %s\n", FLAGS_writePicturePat h[0]); 2033 gm_fprintf(stdout, "writing pictures to %s\n", FLAGS_writePicturePat h[0]);
1995 } 2034 }
1996 if (FLAGS_resourcePath.count() == 1) { 2035 if (FLAGS_resourcePath.count() == 1) {
1997 gm_fprintf(stdout, "reading resources from %s\n", FLAGS_resourcePath [0]); 2036 gm_fprintf(stdout, "reading resources from %s\n", FLAGS_resourcePath [0]);
1998 } 2037 }
1999 } 2038 }
2000 2039
2001 if (moduloDivisor <= 0) {
2002 moduloRemainder = -1;
2003 }
2004 if (moduloRemainder < 0 || moduloRemainder >= moduloDivisor) {
2005 moduloRemainder = -1;
2006 }
2007
2008 int gmsRun = 0; 2040 int gmsRun = 0;
2009 int gmIndex = -1; 2041 int gmIndex = -1;
2010 SkString moduloStr; 2042 SkString moduloStr;
2011 2043
2012 // If we will be writing out files, prepare subdirectories. 2044 // If we will be writing out files, prepare subdirectories.
2013 if (FLAGS_writePath.count() == 1) { 2045 if (FLAGS_writePath.count() == 1) {
2014 if (!prepare_subdirectories(FLAGS_writePath[0], gmmain.fUseFileHierarchy , configs)) { 2046 if (!prepare_subdirectories(FLAGS_writePath[0], gmmain.fUseFileHierarchy , configs)) {
2015 return -1; 2047 return -1;
2016 } 2048 }
2017 } 2049 }
2018 if (NULL != gmmain.fMismatchPath) { 2050 if (NULL != gmmain.fMismatchPath) {
2019 if (!prepare_subdirectories(gmmain.fMismatchPath, gmmain.fUseFileHierarc hy, configs)) { 2051 if (!prepare_subdirectories(gmmain.fMismatchPath, gmmain.fUseFileHierarc hy, configs)) {
2020 return -1; 2052 return -1;
2021 } 2053 }
2022 } 2054 }
2023 if (NULL != gmmain.fMissingExpectationsPath) { 2055 if (NULL != gmmain.fMissingExpectationsPath) {
2024 if (!prepare_subdirectories(gmmain.fMissingExpectationsPath, gmmain.fUse FileHierarchy, 2056 if (!prepare_subdirectories(gmmain.fMissingExpectationsPath, gmmain.fUse FileHierarchy,
2025 configs)) { 2057 configs)) {
2026 return -1; 2058 return -1;
2027 } 2059 }
2028 } 2060 }
2029 2061
2030 if (FLAGS_pdfJpegQuality < -1 || FLAGS_pdfJpegQuality > 100) { 2062 if (FLAGS_pdfJpegQuality < -1 || FLAGS_pdfJpegQuality > 100) {
ducky 2013/08/02 03:59:04 Is this supposed to do anything, like exit the pro
edisonn 2013/08/02 12:32:41 please add return -1 here. good find.
ducky 2013/08/02 18:14:38 Done.
2031 gm_fprintf(stderr, "%s\n", "pdfJpegQuality must be in [-1 .. 100] range. "); 2063 gm_fprintf(stderr, "%s\n", "pdfJpegQuality must be in [-1 .. 100] range. ");
2032 } 2064 }
2033 2065
2034 Iter iter; 2066 Iter iter;
2035 GM* gm; 2067 GM* gm;
2036 while ((gm = iter.next()) != NULL) { 2068 while ((gm = iter.next()) != NULL) {
2037 SkAutoTDelete<GM> adgm(gm); 2069 SkAutoTDelete<GM> adgm(gm);
2038 ++gmIndex; 2070 ++gmIndex;
2039 if (moduloRemainder >= 0) { 2071 if (moduloRemainder >= 0) {
2040 if ((gmIndex % moduloDivisor) != moduloRemainder) { 2072 if ((gmIndex % moduloDivisor) != moduloRemainder) {
2041 continue; 2073 continue;
2042 } 2074 }
2043 moduloStr.printf("[%d.%d] ", gmIndex, moduloDivisor); 2075 moduloStr.printf("[%d.%d] ", gmIndex, moduloDivisor);
2044 } 2076 }
2045 2077
2046 const char* shortName = gm->shortName(); 2078 const char* shortName = gm->shortName();
2047 2079
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)) { 2080 if (SkCommandLineFlags::ShouldSkip(matchStrs, shortName)) {
2053 continue; 2081 continue;
2054 } 2082 }
2055 2083
2056 gmsRun++; 2084 gmsRun++;
2057 SkISize size = gm->getISize(); 2085 SkISize size = gm->getISize();
2058 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name, 2086 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name,
2059 size.width(), size.height()); 2087 size.width(), size.height());
2060 2088
2061 run_multiple_configs(gmmain, gm, configs, grFactory); 2089 run_multiple_configs(gmmain, gm, configs, grFactory);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2135 if (FLAGS_forceBWtext) { 2163 if (FLAGS_forceBWtext) {
2136 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); 2164 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref();
2137 } 2165 }
2138 } 2166 }
2139 2167
2140 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 2168 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
2141 int main(int argc, char * const argv[]) { 2169 int main(int argc, char * const argv[]) {
2142 return tool_main(argc, (char**) argv); 2170 return tool_main(argc, (char**) argv);
2143 } 2171 }
2144 #endif 2172 #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