static void Test(int dirNo, const char* filename, TestStep testStep, bool verbose) { TestResult test; test.init(dirNo); test.fTestStep = testStep; strcpy(test.fFilename, filename); test.testOne(); if (verbose) { SkDebugf("%s", test.status().c_str()); } }
static bool doOneDir(TestState* state, bool threaded) { int dirNo = state->fResult.fDirNo; SkString dirName = get_in_path(dirNo, nullptr); if (!dirName.size()) { return false; } SkTDArray<TestResult> tests[1]; SkTDArray<SortByName*> sorted[1]; if (!buildTestDir(dirNo, dirNo, tests, sorted)) { return false; } SkOSFile::Iter iter(dirName.c_str(), "skp"); SkString filename; while (iter.next(&filename)) { for (size_t index = 0; index < skipOverCount; ++index) { if (skipOver[index].directory == dirNo && strcmp(filename.c_str(), skipOver[index].filename) == 0) { goto checkEarlyExit; } } { SortByName name; name.init(dirNo); strncpy(name.fFilename, filename.c_str(), filename.size() - 4); // drop .skp int count = sorted[0].count(); int idx = SkTSearch<SortByName, Less>(sorted[0].begin(), count, &name, sizeof(&name)); if (idx >= 0) { SortByName* found = sorted[0][idx]; (void) addError(state, *found); continue; } TestResult test; test.init(dirNo, filename); state->fResult = test; testSkpClip(state); #if 0 // artificially limit to a few while debugging code static int debugLimit = 0; if (++debugLimit == 5) { return true; } #endif } checkEarlyExit: ; } return true; }
static bool buildTestDir(int dirNo, int firstDirNo, SkTDArray<TestResult>* tests, SkTDArray<SortByName*>* sorted) { SkString dirName = get_out_path(dirNo, outStatusDir); if (!dirName.size()) { return false; } SkOSFile::Iter iter(dirName.c_str(), "skp"); SkString filename; while (iter.next(&filename)) { TestResult test; test.init(dirNo); SkString spaceFile(filename); char* spaces = spaceFile.writable_str(); int spaceSize = (int) spaceFile.size(); for (int index = 0; index < spaceSize; ++index) { if (spaces[index] == '.') { spaces[index] = ' '; } } int success = sscanf(spaces, "%s %d %d skp", test.fFilename, &test.fPixelError, &test.fTime); if (success < 3) { SkDebugf("failed to scan %s matched=%d\n", filename.c_str(), success); return false; } *tests[dirNo - firstDirNo].append() = test; } if (!sorted) { return true; } SkTDArray<TestResult>& testSet = tests[dirNo - firstDirNo]; int count = testSet.count(); for (int index = 0; index < count; ++index) { *sorted[dirNo - firstDirNo].append() = (SortByName*) &testSet[index]; } if (sorted[dirNo - firstDirNo].count()) { SkTQSort<SortByName>(sorted[dirNo - firstDirNo].begin(), sorted[dirNo - firstDirNo].end() - 1); if (verbose()) { SkDebugf("+"); } } return true; }