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

Side by Side Diff: gm/gmmain.cpp

Issue 129203002: GM: run mode comparisons for all raster configs. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: make RecordSkippedTest() skip ALL renderModes for raster backends Created 6 years, 11 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
« no previous file with comments | « no previous file | gm/tests/outputs/pipe-playback-failure/output-expected/json-summary.txt » ('j') | 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 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 while ((mode = iter.next(NULL)) != NULL) { 311 while ((mode = iter.next(NULL)) != NULL) {
312 SkString modeAsString = SkString(mode); 312 SkString modeAsString = SkString(mode);
313 // TODO(epoger): It seems a bit silly that all of these modes were 313 // TODO(epoger): It seems a bit silly that all of these modes were
314 // recorded with a leading "-" which we have to remove here 314 // recorded with a leading "-" which we have to remove here
315 // (except for mode "", which means plain old original mode). 315 // (except for mode "", which means plain old original mode).
316 // But that's how renderModeDescriptor has been passed into 316 // But that's how renderModeDescriptor has been passed into
317 // compare_test_results_to_reference_bitmap() historically, 317 // compare_test_results_to_reference_bitmap() historically,
318 // and changing that now may affect other parts of our code. 318 // and changing that now may affect other parts of our code.
319 if (modeAsString.startsWith("-")) { 319 if (modeAsString.startsWith("-")) {
320 modeAsString.remove(0, 1); 320 modeAsString.remove(0, 1);
321 modes.push_back(modeAsString);
322 } 321 }
epoger 2014/01/10 20:53:27 There's one renderMode whose name doesn't start wi
322 modes.push_back(modeAsString);
323 } 323 }
324 } 324 }
325 325
326 /** 326 /**
327 * Returns true if failures on this test should be ignored. 327 * Returns true if failures on this test should be ignored.
328 */ 328 */
329 bool ShouldIgnoreTest(const SkString &name) const { 329 bool ShouldIgnoreTest(const SkString &name) const {
330 for (int i = 0; i < fIgnorableTestSubstrings.count(); i++) { 330 for (int i = 0; i < fIgnorableTestSubstrings.count(); i++) {
331 if (name.contains(fIgnorableTestSubstrings[i].c_str())) { 331 if (name.contains(fIgnorableTestSubstrings[i].c_str())) {
332 return true; 332 return true;
333 } 333 }
334 } 334 }
335 return false; 335 return false;
336 } 336 }
337 337
338 /** 338 /**
339 * Calls RecordTestResults to record that we skipped a test.
340 *
341 * Depending on the backend, this may mean that we skipped a single rendermo de, or all
342 * rendermodes; see http://skbug.com/1994 and https://codereview.chromium.or g/129203002/
343 */
344 void RecordSkippedTest(const SkString& shortNamePlusConfig,
345 const char renderModeDescriptor [], Backend backend) {
346 if (kRaster_Backend == backend) {
347 // Skipping a test on kRaster_Backend means that we will skip ALL re nderModes
348 // (as opposed to other backends, on which we only run the default r enderMode).
349 //
350 // We cannot call RecordTestResults yet, because we won't know the f ull set of
351 // renderModes until we have run all tests.
352 fTestsSkippedOnAllRenderModes.push_back(shortNamePlusConfig);
353 } else {
354 this->RecordTestResults(kIntentionallySkipped_ErrorType, shortNamePl usConfig,
355 renderModeDescriptor);
356 }
357 }
358
359 /**
339 * Records the results of this test in fTestsRun and fFailedTests. 360 * Records the results of this test in fTestsRun and fFailedTests.
340 * 361 *
341 * We even record successes, and errors that we regard as 362 * We even record successes, and errors that we regard as
342 * "ignorable"; we can filter them out later. 363 * "ignorable"; we can filter them out later.
343 */ 364 */
344 void RecordTestResults(const ErrorCombination& errorCombination, 365 void RecordTestResults(const ErrorCombination& errorCombination,
345 const SkString& shortNamePlusConfig, 366 const SkString& shortNamePlusConfig,
346 const char renderModeDescriptor []) { 367 const char renderModeDescriptor []) {
347 // Things to do regardless of errorCombination. 368 // Things to do regardless of errorCombination.
348 fTestsRun++; 369 fTestsRun++;
(...skipping 884 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 1254
1234 bool fUseFileHierarchy, fWriteChecksumBasedFilenames; 1255 bool fUseFileHierarchy, fWriteChecksumBasedFilenames;
1235 ErrorCombination fIgnorableErrorTypes; 1256 ErrorCombination fIgnorableErrorTypes;
1236 SkTArray<SkString> fIgnorableTestSubstrings; 1257 SkTArray<SkString> fIgnorableTestSubstrings;
1237 1258
1238 const char* fMismatchPath; 1259 const char* fMismatchPath;
1239 const char* fMissingExpectationsPath; 1260 const char* fMissingExpectationsPath;
1240 1261
1241 // collection of tests that have failed with each ErrorType 1262 // collection of tests that have failed with each ErrorType
1242 SkTArray<SkString> fFailedTests[kLast_ErrorType+1]; 1263 SkTArray<SkString> fFailedTests[kLast_ErrorType+1];
1264 SkTArray<SkString> fTestsSkippedOnAllRenderModes;
1243 int fTestsRun; 1265 int fTestsRun;
1244 SkTDict<int> fRenderModesEncountered; 1266 SkTDict<int> fRenderModesEncountered;
1245 1267
1246 // Where to read expectations (expected image hash digests, etc.) from. 1268 // Where to read expectations (expected image hash digests, etc.) from.
1247 // If unset, we don't do comparisons. 1269 // If unset, we don't do comparisons.
1248 SkAutoTUnref<ExpectationsSource> fExpectationsSource; 1270 SkAutoTUnref<ExpectationsSource> fExpectationsSource;
1249 1271
1250 // JSON summaries that we generate as we go (just for output). 1272 // JSON summaries that we generate as we go (just for output).
1251 Json::Value fJsonExpectedResults; 1273 Json::Value fJsonExpectedResults;
1252 Json::Value fJsonActualResults_Failed; 1274 Json::Value fJsonActualResults_Failed;
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 } 1530 }
1509 1531
1510 template <typename T> void appendUnique(SkTDArray<T>* array, const T& value) { 1532 template <typename T> void appendUnique(SkTDArray<T>* array, const T& value) {
1511 int index = array->find(value); 1533 int index = array->find(value);
1512 if (index < 0) { 1534 if (index < 0) {
1513 *array->append() = value; 1535 *array->append() = value;
1514 } 1536 }
1515 } 1537 }
1516 1538
1517 /** 1539 /**
1518 * Run this test in a number of different configs (8888, 565, PDF,
1519 * etc.), confirming that the resulting bitmaps match expectations
1520 * (which may be different for each config).
1521 *
1522 * Returns all errors encountered while doing so.
1523 */
1524 ErrorCombination run_multiple_configs(GMMain &gmmain, GM *gm,
1525 const SkTDArray<size_t> &configs,
1526 const SkTDArray<const PDFRasterizerData*> &pdfRasterizers,
1527 GrContextFactory *grFactory);
1528 ErrorCombination run_multiple_configs(GMMain &gmmain, GM *gm,
1529 const SkTDArray<size_t> &configs,
1530 const SkTDArray<const PDFRasterizerData*> &pdfRasterizers,
1531 GrContextFactory *grFactory) {
1532 const char renderModeDescriptor[] = "";
1533 ErrorCombination errorsForAllConfigs;
1534 uint32_t gmFlags = gm->getFlags();
1535
1536 for (int i = 0; i < configs.count(); i++) {
1537 ConfigData config = gRec[configs[i]];
1538 const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(g m->shortName(),
1539 c onfig.fName);
1540
1541 // Skip any tests that we don't even need to try.
1542 // If any of these were skipped on a per-GM basis, record them as
1543 // kIntentionallySkipped.
1544 if (kPDF_Backend == config.fBackend) {
1545 if (gmFlags & GM::kSkipPDF_Flag) {
1546 gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortN amePlusConfig,
1547 renderModeDescriptor);
1548 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1549 continue;
1550 }
1551 }
1552 if ((gmFlags & GM::kSkip565_Flag) &&
1553 (kRaster_Backend == config.fBackend) &&
1554 (SkBitmap::kRGB_565_Config == config.fConfig)) {
1555 gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNameP lusConfig,
1556 renderModeDescriptor);
1557 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1558 continue;
1559 }
1560 if (((gmFlags & GM::kSkipGPU_Flag) && kGPU_Backend == config.fBackend) | |
1561 ((gmFlags & GM::kGPUOnly_Flag) && kGPU_Backend != config.fBackend)) {
1562 gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, shortNameP lusConfig,
1563 renderModeDescriptor);
1564 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1565 continue;
1566 }
1567
1568 // Now we know that we want to run this test and record its
1569 // success or failure.
1570 ErrorCombination errorsForThisConfig;
1571 GrSurface* gpuTarget = NULL;
1572 #if SK_SUPPORT_GPU
1573 SkAutoTUnref<GrSurface> auGpuTarget;
1574 if ((errorsForThisConfig.isEmpty()) && (kGPU_Backend == config.fBackend) ) {
1575 if (FLAGS_resetGpuContext) {
1576 grFactory->destroyContexts();
1577 }
1578 GrContext* gr = grFactory->get(config.fGLContextType);
1579 bool grSuccess = false;
1580 if (gr) {
1581 // create a render target to back the device
1582 GrTextureDesc desc;
1583 desc.fConfig = kSkia8888_GrPixelConfig;
1584 desc.fFlags = kRenderTarget_GrTextureFlagBit;
1585 desc.fWidth = gm->getISize().width();
1586 desc.fHeight = gm->getISize().height();
1587 desc.fSampleCnt = config.fSampleCnt;
1588 auGpuTarget.reset(gr->createUncachedTexture(desc, NULL, 0));
1589 if (NULL != auGpuTarget) {
1590 gpuTarget = auGpuTarget;
1591 grSuccess = true;
1592 // Set the user specified cache limits if non-default.
1593 size_t bytes;
1594 int count;
1595 gr->getTextureCacheLimits(&count, &bytes);
1596 if (DEFAULT_CACHE_VALUE != gGpuCacheSizeBytes) {
1597 bytes = static_cast<size_t>(gGpuCacheSizeBytes);
1598 }
1599 if (DEFAULT_CACHE_VALUE != gGpuCacheSizeCount) {
1600 count = gGpuCacheSizeCount;
1601 }
1602 gr->setTextureCacheLimits(count, bytes);
1603 }
1604 }
1605 if (!grSuccess) {
1606 errorsForThisConfig.add(kNoGpuContext_ErrorType);
1607 }
1608 }
1609 #endif
1610
1611 SkBitmap comparisonBitmap;
1612
1613 const char* writePath;
1614 if (FLAGS_writePath.count() == 1) {
1615 writePath = FLAGS_writePath[0];
1616 } else {
1617 writePath = NULL;
1618 }
1619
1620 if (errorsForThisConfig.isEmpty()) {
1621 errorsForThisConfig.add(gmmain.test_drawing(gm, config, pdfRasterize rs,
1622 writePath, gpuTarget,
1623 &comparisonBitmap));
1624 gmmain.RecordTestResults(errorsForThisConfig, shortNamePlusConfig, " ");
1625 }
1626
1627 if (FLAGS_deferred && errorsForThisConfig.isEmpty() &&
1628 (kGPU_Backend == config.fBackend || kRaster_Backend == config.fBacke nd)) {
1629 errorsForThisConfig.add(gmmain.test_deferred_drawing(gm, config, com parisonBitmap,
1630 gpuTarget));
1631 }
1632
1633 errorsForAllConfigs.add(errorsForThisConfig);
1634 }
1635 return errorsForAllConfigs;
1636 }
1637
1638 /**
1639 * Run this test in a number of different drawing modes (pipe, 1540 * Run this test in a number of different drawing modes (pipe,
1640 * deferred, tiled, etc.), confirming that the resulting bitmaps all 1541 * deferred, tiled, etc.), confirming that the resulting bitmaps all
1641 * *exactly* match comparisonBitmap. 1542 * *exactly* match comparisonBitmap.
1642 * 1543 *
1643 * Returns all errors encountered while doing so. 1544 * Returns all errors encountered while doing so.
1644 */ 1545 */
1645 ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co mpareConfig, 1546 ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co mpareConfig,
1646 const SkBitmap &comparisonBitmap, 1547 const SkBitmap &comparisonBitmap,
1647 const SkTDArray<SkScalar> &tileGridReplaySca les); 1548 const SkTDArray<SkScalar> &tileGridReplaySca les);
1648 ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co mpareConfig, 1549 ErrorCombination run_multiple_modes(GMMain &gmmain, GM *gm, const ConfigData &co mpareConfig,
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
1761 errorsForAllModes.add(gmmain.test_pipe_playback(gm, compareConfig, compa risonBitmap, 1662 errorsForAllModes.add(gmmain.test_pipe_playback(gm, compareConfig, compa risonBitmap,
1762 FLAGS_simulatePipePlayba ckFailure)); 1663 FLAGS_simulatePipePlayba ckFailure));
1763 if (FLAGS_tiledPipe) { 1664 if (FLAGS_tiledPipe) {
1764 errorsForAllModes.add(gmmain.test_tiled_pipe_playback(gm, compareCon fig, 1665 errorsForAllModes.add(gmmain.test_tiled_pipe_playback(gm, compareCon fig,
1765 comparisonBitm ap)); 1666 comparisonBitm ap));
1766 } 1667 }
1767 } 1668 }
1768 return errorsForAllModes; 1669 return errorsForAllModes;
1769 } 1670 }
1770 1671
1672
1673 /**
1674 * Run this test in a number of different configs (8888, 565, PDF,
1675 * etc.), confirming that the resulting bitmaps match expectations
1676 * (which may be different for each config).
1677 *
1678 * Returns all errors encountered while doing so.
1679 */
1680 ErrorCombination run_multiple_configs(GMMain &gmmain, GM *gm,
1681 const SkTDArray<size_t> &configs,
1682 const SkTDArray<const PDFRasterizerData*> &pdfRasterizers,
1683 const SkTDArray<SkScalar> &tileGridReplayS cales,
1684 GrContextFactory *grFactory);
1685 ErrorCombination run_multiple_configs(GMMain &gmmain, GM *gm,
1686 const SkTDArray<size_t> &configs,
1687 const SkTDArray<const PDFRasterizerData*> &pdfRasterizers,
1688 const SkTDArray<SkScalar> &tileGridReplayS cales,
1689 GrContextFactory *grFactory) {
1690 const char renderModeDescriptor[] = "";
1691 ErrorCombination errorsForAllConfigs;
1692 uint32_t gmFlags = gm->getFlags();
1693
1694 for (int i = 0; i < configs.count(); i++) {
1695 ConfigData config = gRec[configs[i]];
1696 const SkString shortNamePlusConfig = gmmain.make_shortname_plus_config(g m->shortName(),
1697 c onfig.fName);
1698
1699 // Skip any tests that we don't even need to try.
1700 // If any of these were skipped on a per-GM basis, record them as
1701 // kIntentionallySkipped.
1702 if (kPDF_Backend == config.fBackend) {
1703 if (gmFlags & GM::kSkipPDF_Flag) {
1704 gmmain.RecordSkippedTest(shortNamePlusConfig,
1705 renderModeDescriptor,
1706 config.fBackend);
1707 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1708 continue;
1709 }
1710 }
1711 if ((gmFlags & GM::kSkip565_Flag) &&
1712 (kRaster_Backend == config.fBackend) &&
1713 (SkBitmap::kRGB_565_Config == config.fConfig)) {
1714 gmmain.RecordSkippedTest(shortNamePlusConfig,
1715 renderModeDescriptor,
1716 config.fBackend);
1717 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1718 continue;
1719 }
1720 if (((gmFlags & GM::kSkipGPU_Flag) && kGPU_Backend == config.fBackend) | |
1721 ((gmFlags & GM::kGPUOnly_Flag) && kGPU_Backend != config.fBackend)) {
1722 gmmain.RecordSkippedTest(shortNamePlusConfig,
1723 renderModeDescriptor,
1724 config.fBackend);
1725 errorsForAllConfigs.add(kIntentionallySkipped_ErrorType);
1726 continue;
1727 }
1728
1729 // Now we know that we want to run this test and record its
1730 // success or failure.
1731 ErrorCombination errorsForThisConfig;
1732 GrSurface* gpuTarget = NULL;
1733 #if SK_SUPPORT_GPU
1734 SkAutoTUnref<GrSurface> auGpuTarget;
1735 if ((errorsForThisConfig.isEmpty()) && (kGPU_Backend == config.fBackend) ) {
1736 if (FLAGS_resetGpuContext) {
1737 grFactory->destroyContexts();
1738 }
1739 GrContext* gr = grFactory->get(config.fGLContextType);
1740 bool grSuccess = false;
1741 if (gr) {
1742 // create a render target to back the device
1743 GrTextureDesc desc;
1744 desc.fConfig = kSkia8888_GrPixelConfig;
1745 desc.fFlags = kRenderTarget_GrTextureFlagBit;
1746 desc.fWidth = gm->getISize().width();
1747 desc.fHeight = gm->getISize().height();
1748 desc.fSampleCnt = config.fSampleCnt;
1749 auGpuTarget.reset(gr->createUncachedTexture(desc, NULL, 0));
1750 if (NULL != auGpuTarget) {
1751 gpuTarget = auGpuTarget;
1752 grSuccess = true;
1753 // Set the user specified cache limits if non-default.
1754 size_t bytes;
1755 int count;
1756 gr->getTextureCacheLimits(&count, &bytes);
1757 if (DEFAULT_CACHE_VALUE != gGpuCacheSizeBytes) {
1758 bytes = static_cast<size_t>(gGpuCacheSizeBytes);
1759 }
1760 if (DEFAULT_CACHE_VALUE != gGpuCacheSizeCount) {
1761 count = gGpuCacheSizeCount;
1762 }
1763 gr->setTextureCacheLimits(count, bytes);
1764 }
1765 }
1766 if (!grSuccess) {
1767 errorsForThisConfig.add(kNoGpuContext_ErrorType);
1768 }
1769 }
1770 #endif
1771
1772 SkBitmap comparisonBitmap;
1773
1774 const char* writePath;
1775 if (FLAGS_writePath.count() == 1) {
1776 writePath = FLAGS_writePath[0];
1777 } else {
1778 writePath = NULL;
1779 }
1780
1781 if (errorsForThisConfig.isEmpty()) {
1782 errorsForThisConfig.add(gmmain.test_drawing(gm, config, pdfRasterize rs,
1783 writePath, gpuTarget,
1784 &comparisonBitmap));
1785 gmmain.RecordTestResults(errorsForThisConfig, shortNamePlusConfig, " ");
1786 }
1787
1788 // TODO: run only if gmmain.test_drawing succeeded.
1789 if (kRaster_Backend == config.fBackend) {
1790 run_multiple_modes(gmmain, gm, config, comparisonBitmap, tileGridRep layScales);
1791 }
1792
1793 if (FLAGS_deferred && errorsForThisConfig.isEmpty() &&
1794 (kGPU_Backend == config.fBackend || kRaster_Backend == config.fBacke nd)) {
1795 errorsForThisConfig.add(gmmain.test_deferred_drawing(gm, config, com parisonBitmap,
1796 gpuTarget));
1797 }
1798
1799 errorsForAllConfigs.add(errorsForThisConfig);
1800 }
1801 return errorsForAllConfigs;
1802 }
1803
1804
1771 /** 1805 /**
1772 * Read individual lines from a file, pushing them into the given array. 1806 * Read individual lines from a file, pushing them into the given array.
1773 * 1807 *
1774 * @param filename path to the file to read 1808 * @param filename path to the file to read
1775 * @param lines array of strings to add the lines to 1809 * @param lines array of strings to add the lines to
1776 * @returns true if able to read lines from the file 1810 * @returns true if able to read lines from the file
1777 */ 1811 */
1778 static bool read_lines_from_file(const char* filename, SkTArray<SkString> &lines ) { 1812 static bool read_lines_from_file(const char* filename, SkTArray<SkString> &lines ) {
1779 SkAutoTUnref<SkStream> streamWrapper(SkStream::NewFromFile(filename)); 1813 SkAutoTUnref<SkStream> streamWrapper(SkStream::NewFromFile(filename));
1780 SkStream *stream = streamWrapper.get(); 1814 SkStream *stream = streamWrapper.get();
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after
2278 2312
2279 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, shortName)) { 2313 if (SkCommandLineFlags::ShouldSkip(FLAGS_match, shortName)) {
2280 continue; 2314 continue;
2281 } 2315 }
2282 2316
2283 gmsRun++; 2317 gmsRun++;
2284 SkISize size = gm->getISize(); 2318 SkISize size = gm->getISize();
2285 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name, 2319 gm_fprintf(stdout, "%sdrawing... %s [%d %d]\n", moduloStr.c_str(), short Name,
2286 size.width(), size.height()); 2320 size.width(), size.height());
2287 2321
2288 run_multiple_configs(gmmain, gm, configs, pdfRasterizers, grFactory); 2322 run_multiple_configs(gmmain, gm, configs, pdfRasterizers, tileGridReplay Scales, grFactory);
2289
2290 SkBitmap comparisonBitmap;
2291 const ConfigData compareConfig =
2292 { SkBitmap::kARGB_8888_Config, kRaster_Backend, kDontCare_GLContextT ype, 0, kRW_ConfigFlag, "comparison", false };
2293 gmmain.generate_image(gm, compareConfig, NULL, &comparisonBitmap, false) ;
2294
2295 // TODO(epoger): only run this if gmmain.generate_image() succeeded?
2296 // Otherwise, what are we comparing against?
2297 run_multiple_modes(gmmain, gm, compareConfig, comparisonBitmap, tileGrid ReplayScales);
2298 } 2323 }
2299 2324
2300 SkTArray<SkString> modes; 2325 SkTArray<SkString> modes;
2301 gmmain.GetRenderModesEncountered(modes); 2326 gmmain.GetRenderModesEncountered(modes);
2327 int modeCount = modes.count();
2328
2329 // Now that we have run all the tests and thus know the full set of renderMo des that we
2330 // tried to run, we can call RecordTestResults() to record the cases in whic h we skipped
2331 // ALL renderModes.
2332 // See http://skbug.com/1994 and https://codereview.chromium.org/129203002/
2333 int testCount = gmmain.fTestsSkippedOnAllRenderModes.count();
2334 for (int testNum = 0; testNum < testCount; ++testNum) {
2335 SkString *shortNamePlusConfig = &gmmain.fTestsSkippedOnAllRenderModes[te stNum];
2336 for (int modeNum = 0; modeNum < modeCount; ++modeNum) {
2337 gmmain.RecordTestResults(kIntentionallySkipped_ErrorType, *shortName PlusConfig,
2338 modes[modeNum].c_str());
2339 }
2340 }
2341
2302 bool reportError = false; 2342 bool reportError = false;
2303 if (gmmain.NumSignificantErrors() > 0) { 2343 if (gmmain.NumSignificantErrors() > 0) {
2304 reportError = true; 2344 reportError = true;
2305 } 2345 }
2306 int expectedNumberOfTests = gmsRun * (configs.count() + modes.count()); 2346
2347 // We test every GM against every config, and for every raster config also t est every mode.
2348 int rasterConfigs = 0;
2349 for (int i = 0; i < configs.count(); i++) {
2350 if (gRec[configs[i]].fBackend == kRaster_Backend) {
2351 rasterConfigs++;
2352 }
2353 }
2354 // For raster configs, we run all renderModes; for non-raster configs, just default renderMode
2355 const int expectedNumberOfTests = rasterConfigs * gmsRun * modeCount
2356 + (configs.count() - rasterConfigs) * gmsRun ;
2307 2357
2308 // Output summary to stdout. 2358 // Output summary to stdout.
2309 if (FLAGS_verbose) { 2359 if (FLAGS_verbose) {
2310 gm_fprintf(stdout, "Ran %d GMs\n", gmsRun); 2360 gm_fprintf(stdout, "Ran %d GMs\n", gmsRun);
2311 gm_fprintf(stdout, "... over %2d configs [%s]\n", configs.count(), 2361 gm_fprintf(stdout, "... over %2d configs [%s]\n", configs.count(),
2312 list_all_config_names(configs).c_str()); 2362 list_all_config_names(configs).c_str());
2313 gm_fprintf(stdout, "... and %2d modes [%s]\n", modes.count(), list_al l(modes).c_str()); 2363 gm_fprintf(stdout, "... and %2d modes [%s]\n", modeCount, list_all(mo des).c_str());
2314 gm_fprintf(stdout, "... so there should be a total of %d tests.\n", expe ctedNumberOfTests); 2364 gm_fprintf(stdout, "... so there should be a total of %d tests.\n", expe ctedNumberOfTests);
2315 } 2365 }
2316 gmmain.ListErrors(FLAGS_verbose); 2366 gmmain.ListErrors(FLAGS_verbose);
2317 2367
2318 // TODO(epoger): Enable this check for Android, too, once we resolve 2368 // TODO(epoger): Enable this check for Android, too, once we resolve
2319 // https://code.google.com/p/skia/issues/detail?id=1222 2369 // https://code.google.com/p/skia/issues/detail?id=1222
2320 // ('GM is unexpectedly skipping tests on Android') 2370 // ('GM is unexpectedly skipping tests on Android')
2321 #ifndef SK_BUILD_FOR_ANDROID 2371 #ifndef SK_BUILD_FOR_ANDROID
2322 if (expectedNumberOfTests != gmmain.fTestsRun) { 2372 if (expectedNumberOfTests != gmmain.fTestsRun) {
2323 gm_fprintf(stderr, "expected %d tests, but ran or skipped %d tests\n", 2373 gm_fprintf(stderr, "expected %d tests, but ran or skipped %d tests\n",
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2362 if (FLAGS_forceBWtext) { 2412 if (FLAGS_forceBWtext) {
2363 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref(); 2413 canvas->setDrawFilter(SkNEW(BWTextDrawFilter))->unref();
2364 } 2414 }
2365 } 2415 }
2366 2416
2367 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL) 2417 #if !defined(SK_BUILD_FOR_IOS) && !defined(SK_BUILD_FOR_NACL)
2368 int main(int argc, char * const argv[]) { 2418 int main(int argc, char * const argv[]) {
2369 return tool_main(argc, (char**) argv); 2419 return tool_main(argc, (char**) argv);
2370 } 2420 }
2371 #endif 2421 #endif
OLDNEW
« no previous file with comments | « no previous file | gm/tests/outputs/pipe-playback-failure/output-expected/json-summary.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698