diff options
author | Mike Reed <reed@google.com> | 2017-01-11 13:53:17 -0500 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-01-11 19:42:17 +0000 |
commit | d50fd8c18989fd4209dbfe40d24e5060c04f6d8c (patch) | |
tree | 5433faf7abc8c886b7503423e0c4ed791ca430bc | |
parent | 09326e7a92c7db55665e2ee2d5ac7cb1ce258fff (diff) |
remove dead file: PathOpsSkpClipTest.cpp
BUG=skia:
Change-Id: If11dd014b14aa902082f93bf678b9d0f1b2e1c34
Reviewed-on: https://skia-review.googlesource.com/6893
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
-rwxr-xr-x | gyp/pathops_skpclip.gyp | 1 | ||||
-rw-r--r-- | gyp/tests.gypi | 1 | ||||
-rw-r--r-- | public.bzl | 1 | ||||
-rw-r--r-- | tests/PathOpsSkpClipTest.cpp | 1088 |
4 files changed, 0 insertions, 1091 deletions
diff --git a/gyp/pathops_skpclip.gyp b/gyp/pathops_skpclip.gyp index 354caf39aa..95731e8510 100755 --- a/gyp/pathops_skpclip.gyp +++ b/gyp/pathops_skpclip.gyp @@ -27,7 +27,6 @@ ], 'sources': [ '../tests/PathOpsDebug.cpp', - '../tests/PathOpsSkpClipTest.cpp', ], 'conditions': [ [ 'skia_android_framework == 1', { diff --git a/gyp/tests.gypi b/gyp/tests.gypi index 517e25616e..9b976456a7 100644 --- a/gyp/tests.gypi +++ b/gyp/tests.gypi @@ -63,6 +63,5 @@ '../tests/PathOpsCubicLineIntersectionIdeas.cpp', '../tests/PathOpsDebug.cpp', '../tests/PathOpsOpLoopThreadedTest.cpp', - '../tests/PathOpsSkpClipTest.cpp', ], } diff --git a/public.bzl b/public.bzl index a6f9333e24..844d320095 100644 --- a/public.bzl +++ b/public.bzl @@ -435,7 +435,6 @@ DM_SRCS_ALL = struct( ], exclude = [ "tests/FontMgrAndroidParserTest.cpp", # Android-only. - "tests/PathOpsSkpClipTest.cpp", # Alternate main. "tests/skia_test.cpp", # Old main. "tests/SkpSkGrTest.cpp", # Alternate main. "tests/SVGDeviceTest.cpp", diff --git a/tests/PathOpsSkpClipTest.cpp b/tests/PathOpsSkpClipTest.cpp deleted file mode 100644 index 0c866bd379..0000000000 --- a/tests/PathOpsSkpClipTest.cpp +++ /dev/null @@ -1,1088 +0,0 @@ -/* - * Copyright 2013 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "CrashHandler.h" -// #include "OverwriteLine.h" -#include "Resources.h" -#include "SkBitmap.h" -#include "SkCanvas.h" -#include "SkColor.h" -#include "SkColorPriv.h" -#include "SkCommandLineFlags.h" -#include "SkGraphics.h" -#include "SkImageEncoder.h" -#include "SkOSFile.h" -#include "SkPathOpsDebug.h" -#include "SkPicture.h" -#include "SkTSort.h" -#include "SkStream.h" -#include "SkString.h" -#include "SkTArray.h" -#include "SkTDArray.h" -#include "SkTaskGroup.h" -#include "SkTemplates.h" -#include "SkTSearch.h" -#include "SkTime.h" - -#include <stdlib.h> - -/* add local exceptions here */ -/* TODO : add command flag interface */ -const struct SkipOverTest { - int directory; - const char* filename; - bool blamePathOps; -} skipOver[] = { - { 2, "http___www_groupon_sg_.skp", false}, // SkAAClip::Builder::addRun SkASSERT(fBounds.contains(x, y)); - { 6, "http___www_googleventures_com_.skp", true}, // addTCoincident SkASSERT(test->fT < 1); - { 7, "http___www_foxsports_nl_.skp", true}, // (no repro on mac) addT SkASSERT(this != other || fVerb == SkPath::kCubic_Verb) - {13, "http___www_modernqigong_com_.skp", false}, // SkAAClip::Builder::addRun SkASSERT(fBounds.contains(x, y)); - {14, "http___www_devbridge_com_.skp", true}, // checkSmallCoincidence SkASSERT(!next->fSmall || checkMultiple); - {16, "http___www_1023world_net_.skp", false}, // bitmap decode assert (corrupt skp?) - {19, "http___www_alamdi_com_.skp", true}, // cubic/quad intersection - {26, "http___www_liveencounters_net_.skp", true}, // (no repro on mac) checkSmall addT:549 (line, expects cubic) - {28, "http___www_encros_fr_.skp", false}, // SkAAClip::Builder::addRun SkASSERT(fBounds.contains(x, y)); - {37, "http___www_familysurvivalprotocol_wordpress_com_.skp", true}, // bumpSpan SkASSERT(span->fOppValue >= 0); - {39, "http___sufeinet_com_.skp", false}, // bitmap decode assert (corrupt skp?) - {41, "http___www_rano360_com_.skp", true}, // checkSmallCoincidence SkASSERT(!next->fSmall || checkMultiple); - {44, "http___www_firstunitedbank_com_.skp", true}, // addTCancel SkASSERT(oIndex > 0); - {46, "http___www_shinydemos_com_.skp", true}, // addSimpleAngle SkASSERT(index == count() - 2); - {48, "http___www_familysurvivalprotocol_com_.skp", true}, // bumpSpan SkASSERT "span->fOppValue >= 0" - {57, "http___www_lptemp_com_.skp", true}, // addTCoincident oPeek = &other->fTs[++oPeekIndex]; - {71, "http___www_1milyonkahraman_org_.skp", true}, // addTCoincident SkASSERT(test->fT < 1); - {88, "http___www_apuntesdelechuza_wordpress_com_.skp", true}, // bumpSpan SkASSERT "span->fOppValue >= 0" - {89, "http___www_mobilizedconsulting_com_.skp", true}, // addTCancel SkASSERT(oIndex > 0); - {93, "http___www_simple_living_in_suffolk_co_uk_.skp", true}, // bumpSpan SkASSERT "span->fOppValue >= 0" -}; - -size_t skipOverCount = sizeof(skipOver) / sizeof(skipOver[0]); - - -/* customize file in/out here */ -/* TODO : add command flag interface */ -#define CHROME_VERSION "1e5dfa4-4a995df" -#define SUMMARY_RUN 1 - -#ifdef SK_BUILD_FOR_WIN - #define DRIVE_SPEC "D:" - #define PATH_SLASH "\\" -#else - #define DRIVE_SPEC "" - #define PATH_SLASH "/" -#endif - -#define IN_DIR_PRE DRIVE_SPEC PATH_SLASH "skps" PATH_SLASH "slave" -#define OUT_DIR_PRE DRIVE_SPEC PATH_SLASH "skpOut" PATH_SLASH "slave" -#define OUT_DIR_SUM DRIVE_SPEC PATH_SLASH "skpOut" PATH_SLASH "summary" -#define DIR_POST PATH_SLASH "All" PATH_SLASH CHROME_VERSION - -static const char outOpDir[] = "opClip"; -static const char outOldDir[] = "oldClip"; -static const char outStatusDir[] = "statusTest"; - -static SkString get_in_path(int dirNo, const char* filename) { - SkString path; - SkASSERT(dirNo); - path.appendf("%s%d%s", IN_DIR_PRE, dirNo, DIR_POST); - if (!sk_exists(path.c_str())) { - SkDebugf("could not read %s\n", path.c_str()); - return SkString(); - } - if (filename) { - path.appendf("%s%s", PATH_SLASH, filename); - if (!sk_exists(path.c_str())) { - SkDebugf("could not read %s\n", path.c_str()); - return SkString(); - } - } - return path; -} - -static void make_recursive_dir(const SkString& path) { - if (sk_exists(path.c_str())) { - return; - } - const char* pathStr = path.c_str(); - int last = (int) path.size(); - do { - while (last > 0 && pathStr[--last] != PATH_SLASH[0]) - ; - SkASSERT(last > 0); - SkString shorter(pathStr, last); - if (sk_mkdir(shorter.c_str())) { - break; - } - } while (true); - do { - while (last < (int) path.size() && pathStr[++last] != PATH_SLASH[0]) - ; - SkString shorter(pathStr, last); - SkAssertResult(sk_mkdir(shorter.c_str())); - } while (last < (int) path.size()); -} - -static SkString get_out_path(int dirNo, const char* dirName) { - SkString path; - SkASSERT(dirNo); - SkASSERT(dirName); - path.appendf("%s%d%s%s%s", OUT_DIR_PRE, dirNo, DIR_POST, PATH_SLASH, dirName); - make_recursive_dir(path); - return path; -} - -static SkString get_sum_path(const char* dirName) { - SkString path; - SkASSERT(dirName); - path.appendf("%s%d%s%s", OUT_DIR_SUM, SUMMARY_RUN, PATH_SLASH, dirName); - SkDebugf("%s\n", path.c_str()); - make_recursive_dir(path); - return path; -} - -static SkString make_png_name(const char* filename) { - SkString pngName = SkString(filename); - pngName.remove(pngName.size() - 3, 3); - pngName.append("png"); - return pngName; -} - -//////////////////////////////////////////////////////// - -enum TestStep { - kCompareBits, - kEncodeFiles, -}; - -enum { - kMaxLength = 256, - kMaxFiles = 128, - kSmallLimit = 1000, -}; - -struct TestResult { - void init(int dirNo) { - fDirNo = dirNo; - sk_bzero(fFilename, sizeof(fFilename)); - fTestStep = kCompareBits; - fScale = 1; - } - - void init(int dirNo, const SkString& filename) { - fDirNo = dirNo; - strcpy(fFilename, filename.c_str()); - fTestStep = kCompareBits; - fScale = 1; - } - - SkString status() { - SkString outStr; - outStr.printf("%s %d %d\n", fFilename, fPixelError, fTime); - return outStr; - } - - SkString progress() { - SkString outStr; - outStr.printf("dir=%d %s ", fDirNo, fFilename); - if (fPixelError) { - outStr.appendf(" err=%d", fPixelError); - } - if (fTime) { - outStr.appendf(" time=%d", fTime); - } - if (fScale != 1) { - outStr.appendf(" scale=%d", fScale); - } - outStr.appendf("\n"); - return outStr; - - } - - void test(int dirNo, const SkString& filename) { - init(dirNo); - strcpy(fFilename, filename.c_str()); - testOne(); - } - - void testOne(); - - char fFilename[kMaxLength]; - TestStep fTestStep; - int fDirNo; - int fPixelError; - SkMSec fTime; - int fScale; -}; - -class SortByPixel : public TestResult { -public: - bool operator<(const SortByPixel& rh) const { - return fPixelError < rh.fPixelError; - } -}; - -class SortByTime : public TestResult { -public: - bool operator<(const SortByTime& rh) const { - return fTime < rh.fTime; - } -}; - -class SortByName : public TestResult { -public: - bool operator<(const SortByName& rh) const { - return strcmp(fFilename, rh.fFilename) < 0; - } -}; - -struct TestState { - void init(int dirNo) { - fResult.init(dirNo); - } - - SkTDArray<SortByPixel> fPixelWorst; - SkTDArray<SortByTime> fSlowest; - TestResult fResult; -}; - -struct TestRunner { - ~TestRunner(); - void render(); - SkTDArray<class TestRunnable*> fRunnables; -}; - -class TestRunnable { -public: - void operator()() { - SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024); - (*fTestFun)(&fState); - } - - TestState fState; - void (*fTestFun)(TestState*); -}; - - -class TestRunnableDir : public TestRunnable { -public: - TestRunnableDir(void (*testFun)(TestState*), int dirNo, TestRunner* runner) { - fState.init(dirNo); - fTestFun = testFun; - } - -}; - -class TestRunnableFile : public TestRunnable { -public: - TestRunnableFile(void (*testFun)(TestState*), int dirNo, const char* name, TestRunner* runner) { - fState.init(dirNo); - strcpy(fState.fResult.fFilename, name); - fTestFun = testFun; - } -}; - -class TestRunnableEncode : public TestRunnableFile { -public: - TestRunnableEncode(void (*testFun)(TestState*), int dirNo, const char* name, TestRunner* runner) - : TestRunnableFile(testFun, dirNo, name, runner) { - fState.fResult.fTestStep = kEncodeFiles; - } -}; - -TestRunner::~TestRunner() { - for (int index = 0; index < fRunnables.count(); index++) { - delete fRunnables[index]; - } -} - -void TestRunner::render() { - SkTaskGroup().batch(fRunnables.count(), [&](int i) { - (*fRunnables[i])(); - }); -} - -//////////////////////////////////////////////// - - -static int similarBits(const SkBitmap& gr, const SkBitmap& sk) { - const int kRowCount = 3; - const int kThreshold = 3; - int width = SkTMin(gr.width(), sk.width()); - if (width < kRowCount) { - return true; - } - int height = SkTMin(gr.height(), sk.height()); - if (height < kRowCount) { - return true; - } - int errorTotal = 0; - SkTArray<int, true> errorRows; - errorRows.push_back_n(width * kRowCount); - SkAutoLockPixels autoGr(gr); - SkAutoLockPixels autoSk(sk); - for (int y = 0; y < height; ++y) { - SkPMColor* grRow = gr.getAddr32(0, y); - SkPMColor* skRow = sk.getAddr32(0, y); - int* base = &errorRows[0]; - int* cOut = &errorRows[y % kRowCount]; - for (int x = 0; x < width; ++x) { - SkPMColor grColor = grRow[x]; - SkPMColor skColor = skRow[x]; - int dr = SkGetPackedR32(grColor) - SkGetPackedR32(skColor); - int dg = SkGetPackedG32(grColor) - SkGetPackedG32(skColor); - int db = SkGetPackedB32(grColor) - SkGetPackedB32(skColor); - int error = cOut[x] = SkTMax(SkAbs32(dr), SkTMax(SkAbs32(dg), SkAbs32(db))); - if (error < kThreshold || x < 2) { - continue; - } - if (base[x - 2] < kThreshold - || base[width + x - 2] < kThreshold - || base[width * 2 + x - 2] < kThreshold - || base[x - 1] < kThreshold - || base[width + x - 1] < kThreshold - || base[width * 2 + x - 1] < kThreshold - || base[x] < kThreshold - || base[width + x] < kThreshold - || base[width * 2 + x] < kThreshold) { - continue; - } - errorTotal += error; - } - } - return errorTotal; -} - -static bool addError(TestState* data, const TestResult& testResult) { - if (testResult.fPixelError <= 0 && testResult.fTime <= 0) { - return false; - } - int worstCount = data->fPixelWorst.count(); - int pixelError = testResult.fPixelError; - if (pixelError > 0) { - for (int index = 0; index < worstCount; ++index) { - if (pixelError > data->fPixelWorst[index].fPixelError) { - data->fPixelWorst[index] = *(SortByPixel*) &testResult; - return true; - } - } - } - int slowCount = data->fSlowest.count(); - SkMSec time = testResult.fTime; - if (time > 0) { - for (int index = 0; index < slowCount; ++index) { - if (time > data->fSlowest[index].fTime) { - data->fSlowest[index] = *(SortByTime*) &testResult; - return true; - } - } - } - if (pixelError > 0 && worstCount < kMaxFiles) { - *data->fPixelWorst.append() = *(SortByPixel*) &testResult; - return true; - } - if (time > 0 && slowCount < kMaxFiles) { - *data->fSlowest.append() = *(SortByTime*) &testResult; - return true; - } - return false; -} - -static SkMSec timePict(SkPicture* pic, SkCanvas* canvas) { - canvas->save(); - SkScalar pWidth = pic->cullRect().width(); - SkScalar pHeight = pic->cullRect().height(); - const SkScalar maxDimension = 1000.0f; - const int slices = 3; - SkScalar xInterval = SkTMax(pWidth - maxDimension, 0.0f) / (slices - 1); - SkScalar yInterval = SkTMax(pHeight - maxDimension, 0.0f) / (slices - 1); - SkRect rect = {0, 0, SkTMin(maxDimension, pWidth), SkTMin(maxDimension, pHeight) }; - canvas->clipRect(rect); - double start = SkTime::GetMSecs(); - for (int x = 0; x < slices; ++x) { - for (int y = 0; y < slices; ++y) { - pic->playback(canvas); - canvas->translate(0, yInterval); - } - canvas->translate(xInterval, -yInterval * slices); - } - double end = SkTime::GetMSecs(); - canvas->restore(); - return static_cast<SkMSec>(end - start); -} - -static void drawPict(SkPicture* pic, SkCanvas* canvas, int scale) { - canvas->clear(SK_ColorWHITE); - if (scale != 1) { - canvas->save(); - canvas->scale(1.0f / scale, 1.0f / scale); - } - pic->playback(canvas); - if (scale != 1) { - canvas->restore(); - } -} - -static void writePict(const SkBitmap& bitmap, const char* outDir, const char* pngName) { - SkString outFile = get_sum_path(outDir); - outFile.appendf("%s%s", PATH_SLASH, pngName); - if (!sk_tool_utils::EncodeImageToFile(outFile.c_str(), bitmap, SkEncodedImageFormat::kPNG, 100)) { - SkDebugf("unable to encode gr %s (width=%d height=%d)\n", pngName, - bitmap.width(), bitmap.height()); - } -} - -void TestResult::testOne() { - sk_sp<SkPicture> pic; - { - #if DEBUG_SHOW_TEST_NAME - if (fTestStep == kCompareBits) { - SkString testName(fFilename); - const char http[] = "http"; - if (testName.startsWith(http)) { - testName.remove(0, sizeof(http) - 1); - } - while (testName.startsWith("_")) { - testName.remove(0, 1); - } - const char dotSkp[] = ".skp"; - if (testName.endsWith(dotSkp)) { - size_t len = testName.size(); - testName.remove(len - (sizeof(dotSkp) - 1), sizeof(dotSkp) - 1); - } - testName.prepend("skp"); - testName.append("1"); - strncpy(DEBUG_FILENAME_STRING, testName.c_str(), DEBUG_FILENAME_STRING_LENGTH); - } else if (fTestStep == kEncodeFiles) { - strncpy(DEBUG_FILENAME_STRING, "", DEBUG_FILENAME_STRING_LENGTH); - } - #endif - SkString path = get_in_path(fDirNo, fFilename); - SkFILEStream stream(path.c_str()); - if (!stream.isValid()) { - SkDebugf("invalid stream %s\n", path.c_str()); - return; - } - pic = SkPicture::MakeFromStream(&stream); - if (!pic) { - SkDebugf("unable to decode %s\n", fFilename); - return; - } - SkScalar width = pic->cullRect().width(); - SkScalar height = pic->cullRect().height(); - SkBitmap oldBitmap, opBitmap; - fScale = 1; - while (width / fScale > 32767 || height / fScale > 32767) { - ++fScale; - } - do { - int dimX = SkScalarCeilToInt(width / fScale); - int dimY = SkScalarCeilToInt(height / fScale); - if (oldBitmap.tryAllocN32Pixels(dimX, dimY) && opBitmap.tryAllocN32Pixels(dimX, dimY)) { - break; - } - SkDebugf("-%d-", fScale); - } while (++fScale < 256); - if (fScale >= 256) { - SkDebugf("unable to allocate bitmap for %s (w=%f h=%f)\n", fFilename, - width, height); - return; - } - oldBitmap.eraseColor(SK_ColorWHITE); - SkCanvas oldCanvas(oldBitmap); - oldCanvas.setAllowSimplifyClip(false); - opBitmap.eraseColor(SK_ColorWHITE); - SkCanvas opCanvas(opBitmap); - opCanvas.setAllowSimplifyClip(true); - drawPict(pic.get(), &oldCanvas, fScale); - drawPict(pic.get(), &opCanvas, fScale); - if (fTestStep == kCompareBits) { - fPixelError = similarBits(oldBitmap, opBitmap); - SkMSec oldTime = timePict(pic.get(), &oldCanvas); - SkMSec opTime = timePict(pic.get(), &opCanvas); - fTime = SkTMax(static_cast<SkMSec>(0), oldTime - opTime); - } else if (fTestStep == kEncodeFiles) { - SkString pngStr = make_png_name(fFilename); - const char* pngName = pngStr.c_str(); - writePict(oldBitmap, outOldDir, pngName); - writePict(opBitmap, outOpDir, pngName); - } - } -} - -DEFINE_string2(match, m, "PathOpsSkpClipThreaded", - "[~][^]substring[$] [...] of test name to run.\n" - "Multiple matches may be separated by spaces.\n" - "~ causes a matching test to always be skipped\n" - "^ requires the start of the test to match\n" - "$ requires the end of the test to match\n" - "^ and $ requires an exact match\n" - "If a test does not match any list entry,\n" - "it is skipped unless some list entry starts with ~"); -DEFINE_string2(dir, d, nullptr, "range of directories (e.g., 1-100)"); -DEFINE_string2(skp, s, nullptr, "skp to test"); -DEFINE_bool2(single, z, false, "run tests on a single thread internally."); -DEFINE_int32(testIndex, 0, "override local test index (PathOpsSkpClipOneOff only)."); -DEFINE_bool2(verbose, v, false, "enable verbose output."); - -static bool verbose() { - return FLAGS_verbose; -} - -class Dirs { -public: - Dirs() { - reset(); - sk_bzero(fRun, sizeof(fRun)); - fSet = false; - } - - int first() const { - int index = 0; - while (++index < kMaxDir) { - if (fRun[index]) { - return index; - } - } - SkASSERT(0); - return -1; - } - - int last() const { - int index = kMaxDir; - while (--index > 0 && !fRun[index]) - ; - return index; - } - - int next() { - while (++fIndex < kMaxDir) { - if (fRun[fIndex]) { - return fIndex; - } - } - return -1; - } - - void reset() { - fIndex = -1; - } - - void set(int start, int end) { - while (start < end) { - fRun[start++] = 1; - } - fSet = true; - } - - void setDefault() { - if (!fSet) { - set(1, 100); - } - } - -private: - enum { - kMaxDir = 101 - }; - char fRun[kMaxDir]; - int fIndex; - bool fSet; -} gDirs; - -class Filenames { -public: - Filenames() - : fIndex(-1) { - } - - const char* next() { - while (fNames && ++fIndex < fNames->count()) { - return (*fNames)[fIndex]; - } - return nullptr; - } - - void set(const SkCommandLineFlags::StringArray& names) { - fNames = &names; - } - -private: - int fIndex; - const SkCommandLineFlags::StringArray* fNames; -} gNames; - -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; -} - -static void testSkpClip(TestState* data) { - data->fResult.testOne(); - SkString statName(data->fResult.fFilename); - SkASSERT(statName.endsWith(".skp")); - statName.remove(statName.size() - 4, 4); - statName.appendf(".%d.%d.skp", data->fResult.fPixelError, data->fResult.fTime); - SkString statusFile = get_out_path(data->fResult.fDirNo, outStatusDir); - if (!statusFile.size()) { - SkDebugf("failed to create %s", statusFile.c_str()); - return; - } - statusFile.appendf("%s%s", PATH_SLASH, statName.c_str()); - FILE* file = sk_fopen(statusFile.c_str(), kWrite_SkFILE_Flag); - if (!file) { - SkDebugf("failed to create %s", statusFile.c_str()); - return; - } - sk_fclose(file); - if (verbose()) { - if (data->fResult.fPixelError || data->fResult.fTime) { - SkDebugf("%s", data->fResult.progress().c_str()); - } else { - SkDebugf("."); - } - } -} - -bool Less(const SortByName& a, const SortByName& b); -bool Less(const SortByName& a, const SortByName& b) { - return a < b; -} - -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 void testSkpClipEncode(TestState* data) { - data->fResult.testOne(); - if (verbose()) { - SkDebugf("+"); - } -} - -static void encodeFound(TestState& state) { - if (verbose()) { - if (state.fPixelWorst.count()) { - SkTDArray<SortByPixel*> worst; - for (int index = 0; index < state.fPixelWorst.count(); ++index) { - *worst.append() = &state.fPixelWorst[index]; - } - SkTQSort<SortByPixel>(worst.begin(), worst.end() - 1); - for (int index = 0; index < state.fPixelWorst.count(); ++index) { - const TestResult& result = *worst[index]; - SkDebugf("%d %s pixelError=%d\n", result.fDirNo, result.fFilename, result.fPixelError); - } - } - if (state.fSlowest.count()) { - SkTDArray<SortByTime*> slowest; - for (int index = 0; index < state.fSlowest.count(); ++index) { - *slowest.append() = &state.fSlowest[index]; - } - if (slowest.count() > 0) { - SkTQSort<SortByTime>(slowest.begin(), slowest.end() - 1); - for (int index = 0; index < slowest.count(); ++index) { - const TestResult& result = *slowest[index]; - SkDebugf("%d %s time=%d\n", result.fDirNo, result.fFilename, result.fTime); - } - } - } - } - TestRunner testRunner; - for (int index = 0; index < state.fPixelWorst.count(); ++index) { - const TestResult& result = state.fPixelWorst[index]; - SkString filename(result.fFilename); - if (!filename.endsWith(".skp")) { - filename.append(".skp"); - } - *testRunner.fRunnables.append() = new TestRunnableEncode(&testSkpClipEncode, result.fDirNo, - filename.c_str(), &testRunner); - } - testRunner.render(); -} - -class Test { -public: - Test() {} - virtual ~Test() {} - - const char* getName() { onGetName(&fName); return fName.c_str(); } - void run() { onRun(); } - -protected: - virtual void onGetName(SkString*) = 0; - virtual void onRun() = 0; - -private: - SkString fName; -}; - -typedef SkTRegistry<Test*(*)(void*)> TestRegistry; - -#define DEF_TEST(name) \ - static void test_##name(); \ - class name##Class : public Test { \ - public: \ - static Test* Factory(void*) { return new name##Class; } \ - \ - protected: \ - void onGetName(SkString* name) override { name->set(#name); } \ - void onRun() override { test_##name(); } \ - }; \ - static TestRegistry gReg_##name##Class(name##Class::Factory); \ - static void test_##name() - -DEF_TEST(PathOpsSkpClip) { - gDirs.setDefault(); - SkTArray<TestResult, true> errors; - TestState state; - state.init(0); - int dirNo; - gDirs.reset(); - while ((dirNo = gDirs.next()) > 0) { - if (verbose()) { - SkDebugf("dirNo=%d\n", dirNo); - } - state.fResult.fDirNo = dirNo; - if (!doOneDir(&state, false)) { - break; - } - } - encodeFound(state); -} - -static void testSkpClipMain(TestState* data) { - (void) doOneDir(data, true); -} - -DEF_TEST(PathOpsSkpClipThreaded) { - gDirs.setDefault(); - TestRunner testRunner; - int dirNo; - gDirs.reset(); - while ((dirNo = gDirs.next()) > 0) { - *testRunner.fRunnables.append() = new TestRunnableDir(&testSkpClipMain, dirNo, &testRunner); - } - testRunner.render(); - TestState state; - state.init(0); - gDirs.reset(); - while ((dirNo = gDirs.next()) > 0) { - TestState& testState = testRunner.fRunnables[dirNo - 1]->fState; - SkASSERT(testState.fResult.fDirNo == dirNo); - for (int inner = 0; inner < testState.fPixelWorst.count(); ++inner) { - addError(&state, testState.fPixelWorst[inner]); - } - for (int inner = 0; inner < testState.fSlowest.count(); ++inner) { - addError(&state, testState.fSlowest[inner]); - } - } - encodeFound(state); -} - -static bool buildTests(SkTDArray<TestResult>* tests, SkTDArray<SortByName*>* sorted) { - int firstDirNo = gDirs.first(); - int dirNo; - while ((dirNo = gDirs.next()) > 0) { - if (!buildTestDir(dirNo, firstDirNo, tests, sorted)) { - return false; - } - } - return true; -} - -DEF_TEST(PathOpsSkpClipUberThreaded) { - gDirs.setDefault(); - const int firstDirNo = gDirs.next(); - const int lastDirNo = gDirs.last(); - int dirCount = lastDirNo - firstDirNo + 1; - std::unique_ptr<SkTDArray<TestResult>[]> tests(new SkTDArray<TestResult>[dirCount]); - std::unique_ptr<SkTDArray<SortByName*>[]> sorted(new SkTDArray<SortByName*>[dirCount]); - if (!buildTests(tests.get(), sorted.get())) { - return; - } - TestRunner testRunner; - int dirNo; - gDirs.reset(); - while ((dirNo = gDirs.next()) > 0) { - SkString dirName = get_in_path(dirNo, nullptr); - if (!dirName.size()) { - continue; - } - 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.get()[dirNo - firstDirNo].count(); - if (SkTSearch<SortByName, Less>(sorted.get()[dirNo - firstDirNo].begin(), - count, &name, sizeof(&name)) < 0) { - *testRunner.fRunnables.append() = new TestRunnableFile( - &testSkpClip, dirNo, filename.c_str(), &testRunner); - } - } - checkEarlyExit: - ; - } - - } - testRunner.render(); - std::unique_ptr<SkTDArray<TestResult>[]> results(new SkTDArray<TestResult>[dirCount]); - if (!buildTests(results.get(), nullptr)) { - return; - } - SkTDArray<TestResult> allResults; - for (int dirNo = firstDirNo; dirNo <= lastDirNo; ++dirNo) { - SkTDArray<TestResult>& array = results.get()[dirNo - firstDirNo]; - allResults.append(array.count(), array.begin()); - } - int allCount = allResults.count(); - SkTDArray<SortByPixel*> pixels; - SkTDArray<SortByTime*> times; - for (int index = 0; index < allCount; ++index) { - *pixels.append() = (SortByPixel*) &allResults[index]; - *times.append() = (SortByTime*) &allResults[index]; - } - TestState state; - if (pixels.count()) { - SkTQSort<SortByPixel>(pixels.begin(), pixels.end() - 1); - for (int inner = 0; inner < kMaxFiles; ++inner) { - *state.fPixelWorst.append() = *pixels[allCount - inner - 1]; - } - } - if (times.count()) { - SkTQSort<SortByTime>(times.begin(), times.end() - 1); - for (int inner = 0; inner < kMaxFiles; ++inner) { - *state.fSlowest.append() = *times[allCount - inner - 1]; - } - } - encodeFound(state); -} - -DEF_TEST(PathOpsSkpClipOneOff) { - const int testIndex = FLAGS_testIndex; - int dirNo = gDirs.next(); - if (dirNo < 0) { - dirNo = skipOver[testIndex].directory; - } - const char* skp = gNames.next(); - if (!skp) { - skp = skipOver[testIndex].filename; - } - SkAssertResult(get_in_path(dirNo, skp).size()); - SkString filename(skp); - TestResult state; - state.test(dirNo, filename); - if (verbose()) { - SkDebugf("%s", state.status().c_str()); - } - state.fTestStep = kEncodeFiles; - state.testOne(); -} - -DEF_TEST(PathOpsTestSkipped) { - for (size_t index = 0; index < skipOverCount; ++index) { - const SkipOverTest& skip = skipOver[index]; - if (!skip.blamePathOps) { - continue; - } - int dirNo = skip.directory; - const char* skp = skip.filename; - SkAssertResult(get_in_path(dirNo, skp).size()); - SkString filename(skp); - TestResult state; - state.test(dirNo, filename); - if (verbose()) { - SkDebugf("%s", state.status().c_str()); - } - state.fTestStep = kEncodeFiles; - state.testOne(); - } -} - -DEF_TEST(PathOpsCopyFails) { - FLAGS_verbose = true; - for (size_t index = 0; index < skipOverCount; ++index) { - int dirNo = skipOver[index].directory; - SkDebugf("mkdir -p " IN_DIR_PRE "%d" DIR_POST "\n", dirNo); - } - for (size_t index = 0; index < skipOverCount; ++index) { - int dirNo = skipOver[index].directory; - const char* filename = skipOver[index].filename; - SkDebugf("rsync -av cary-linux.cnc:/tera" PATH_SLASH "skps" PATH_SLASH "slave" - "%d" DIR_POST "/%s " IN_DIR_PRE "%d" DIR_POST "\n", dirNo, filename, dirNo); - } -} - -template TestRegistry* TestRegistry::gHead; - -class Iter { -public: - Iter() { this->reset(); } - void reset() { fReg = TestRegistry::Head(); } - - Test* next() { - if (fReg) { - TestRegistry::Factory fact = fReg->factory(); - fReg = fReg->next(); - Test* test = fact(nullptr); - return test; - } - return nullptr; - } - -private: - const TestRegistry* fReg; -}; - -int tool_main(int argc, char** argv); -int tool_main(int argc, char** argv) { - SetupCrashHandler(); - SkCommandLineFlags::SetUsage(""); - SkCommandLineFlags::Parse(argc, argv); - SkGraphics::Init(); - SkString header("PathOps SkpClip:"); - if (!FLAGS_match.isEmpty()) { - header.appendf(" --match"); - for (int index = 0; index < FLAGS_match.count(); ++index) { - header.appendf(" %s", FLAGS_match[index]); - } - } - if (!FLAGS_dir.isEmpty()) { - int count = FLAGS_dir.count(); - for (int i = 0; i < count; ++i) { - const char* range = FLAGS_dir[i]; - const char* dash = strchr(range, '-'); - if (!dash) { - dash = strchr(range, ','); - } - int first = atoi(range); - int last = dash ? atoi(dash + 1) : first; - if (!first || !last) { - SkDebugf("couldn't parse --dir %s\n", range); - return 1; - } - gDirs.set(first, last); - } - } - if (!FLAGS_skp.isEmpty()) { - gNames.set(FLAGS_skp); - } -#ifdef SK_DEBUG - header.append(" SK_DEBUG"); -#else - header.append(" SK_RELEASE"); -#endif - if (FLAGS_verbose) { - header.appendf("\n"); - } - SkDebugf("%s", header.c_str()); - Iter iter; - Test* test; - while ((test = iter.next()) != nullptr) { - std::unique_ptr<Test> owned(test); - if (!SkCommandLineFlags::ShouldSkip(FLAGS_match, test->getName())) { - test->run(); - } - } - return 0; -} - -#if !defined(SK_BUILD_FOR_IOS) -int main(int argc, char * const argv[]) { - return tool_main(argc, (char**) argv); -} -#endif |