Index: tests/PathOpsSkpClipTest.cpp |
diff --git a/tests/PathOpsSkpClipTest.cpp b/tests/PathOpsSkpClipTest.cpp |
old mode 100644 |
new mode 100755 |
index 146c42ade793d562811d9b31ea4fdbe6ab9119da..d2fa988c6c32a61b1e00b656e9c012a4bcd3d9b9 |
--- a/tests/PathOpsSkpClipTest.cpp |
+++ b/tests/PathOpsSkpClipTest.cpp |
@@ -1,6 +1,7 @@ |
#include "PathOpsExtendedTest.h" |
#include "PathOpsThreadedCommon.h" |
#include "SkBitmap.h" |
+#include "SkColor.h" |
#include "SkDevice.h" |
#include "SkCanvas.h" |
#include "SkImageDecoder.h" |
@@ -11,29 +12,47 @@ |
#include "SkString.h" |
#ifdef SK_BUILD_FOR_WIN |
-#define PATH_SLASH "\\" |
-#define IN_DIR "D:" PATH_SLASH "skp" |
-#define OUT_DIR "D:" PATH_SLASH |
+ #define PATH_SLASH "\\" |
+ #define IN_DIR "D:" PATH_SLASH "skp" |
+ #define OUT_DIR "D:" PATH_SLASH |
#else |
-#define PATH_SLASH "/" |
-#define IN_DIR "/Volumes/Untitled" PATH_SLASH |
-#define OUT_DIR PATH_SLASH |
+ #define PATH_SLASH "/" |
+ #if 1 |
+ #define IN_DIR "/usr/local/google/home/caryclark/new10k" PATH_SLASH |
+ #define OUT_DIR "/usr/local/google/home/caryclark/out10k" PATH_SLASH |
+ #else |
+ #define IN_DIR "/usr/local/google/home/caryclark/6-18-13" PATH_SLASH |
+ #define OUT_DIR "/usr/local/google/home/caryclark" PATH_SLASH |
+ #endif |
#endif |
static const char pictDir[] = IN_DIR ; |
static const char outSkpClipDir[] = OUT_DIR "skpClip"; |
static const char outOldClipDir[] = OUT_DIR "oldClip"; |
-static void make_filepath(SkString* path, const char* dir, const SkString& name) { |
+static SkString make_filepath(const char* dir, const SkString& name) { |
+ SkString path(dir); |
size_t len = strlen(dir); |
- path->set(dir); |
if (len > 0 && dir[len - 1] != PATH_SLASH[0]) { |
- path->append(PATH_SLASH); |
+ path.append(PATH_SLASH); |
} |
- path->append(name); |
+ path.append(name); |
+ return path; |
+} |
+ |
+static SkString make_png_name(const SkString& filename) { |
+ SkString pngName = SkString(filename); |
+ pngName.remove(pngName.size() - 3, 3); |
+ pngName.append("png"); |
+ return pngName; |
} |
static void testOne(const SkString& filename) { |
+ if (filename == SkString("http___migracioncolombia_gov_co.skp") |
+ || filename == SkString("http___miuki_info.skp") |
+ ) { |
+ return; |
+ } |
#if DEBUG_SHOW_TEST_NAME |
SkString testName(filename); |
const char http[] = "http"; |
@@ -52,8 +71,7 @@ static void testOne(const SkString& filename) { |
testName.append("1"); |
strncpy(DEBUG_FILENAME_STRING, testName.c_str(), DEBUG_FILENAME_STRING_LENGTH); |
#endif |
- SkString path; |
- make_filepath(&path, pictDir, filename); |
+ SkString path = make_filepath(pictDir, filename); |
SkFILEStream stream(path.c_str()); |
if (!stream.isValid()) { |
return; |
@@ -65,60 +83,157 @@ static void testOne(const SkString& filename) { |
} |
int width = pic->width(); |
int height = pic->height(); |
+ |
SkBitmap bitmap; |
- bitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height); |
- bool success = bitmap.allocPixels(); |
- if (!success) { |
- SkDebugf("unable to allocate bitmap for %s\n", filename.c_str()); |
+ int scale = 1; |
+ do { |
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, (width + scale - 1) / scale, |
+ (height + scale - 1) / scale); |
+ bool success = bitmap.allocPixels(); |
+ bitmap.eraseColor(SK_ColorWHITE); |
+ if (success) { |
+ break; |
+ } |
+ SkDebugf("-%d-", scale); |
+ } while ((scale *= 2) < 32); |
+ if (scale >= 32) { |
+ SkDebugf("unable to allocate bitmap for %s (w=%d h=%d)\n", filename.c_str(), |
+ width, height); |
return; |
} |
SkCanvas canvas(bitmap); |
- SkString pngName(filename); |
- pngName.remove(pngName.size() - 3, 3); |
- pngName.append("png"); |
+ canvas.scale(1.0f / scale, 1.0f / scale); |
+ SkString pngName = make_png_name(filename); |
for (int i = 0; i < 2; ++i) { |
bool useOp = i ? true : false; |
canvas.setAllowSimplifyClip(useOp); |
pic->draw(&canvas); |
- SkString outFile; |
- make_filepath(&outFile, useOp ? outSkpClipDir : outOldClipDir, pngName); |
- SkImageEncoder::EncodeFile(outFile.c_str(), bitmap, SkImageEncoder::kPNG_Type, 100); |
+ SkString outFile = make_filepath(useOp ? outSkpClipDir : outOldClipDir, pngName); |
+ if (!SkImageEncoder::EncodeFile(outFile.c_str(), bitmap, SkImageEncoder::kPNG_Type, |
+ 100)) { |
+ SkDebugf("unable to encode %s (width=%d height=%d)\n", pngName.c_str(), |
+ bitmap.width(), bitmap.height()); |
+ } |
} |
SkDELETE(pic); |
} |
-const char skipBefore[] = "http___kkiste_to.skp"; |
+const char* tryFixed[] = { |
+ 0 |
+}; |
+ |
+size_t tryFixedCount = sizeof(tryFixed) / sizeof(tryFixed[0]); |
+ |
+const char* skipOver[] = { |
+ "http___carpetplanet_ru.skp", // cubic/cubic intersect |
+ "http___carrot_is.skp", // bridgeOp() SkASSERT(unsortable || !current->done()); |
+ |
+/*!*/"http___dotsrc_org.skp", // asserts in png decode |
+ "http___frauen_magazin_com.skp", // bridgeOp() SkASSERT(unsortable || !current->done()); |
+ "http___i_gino_com.skp", // unexpected cubic/quad coincidence |
+ // {61, 857, 61, 789.06897, 116.068977, 734, 184, 734} |
+ // {184, 734, 133.051727, 734, 97.0258636, 770.025879} |
+ "http___ilkoora_com.skp", // assert wind sum != min32 from markDoneBinary / findNextOp #28k |
+/*!*/"http___migracioncolombia_gov_co.skp", // crashes on picture decode |
+ "http___mm4everfriends_com.skp", // bumpSpan/addTCoincident (from calcPartialCoincidentWinding) |
+ "http___mtrk_uz.skp", // checkEnds() assert #36.3k |
+ "http___pchappy_com_au.skp", // bridgeOp() assert unsortable || ! empty #37.2k |
+ "http___sciality_com.skp", // bridgeOp() SkASSERT(unsortable || !current->done()); #32.4k |
+/*!*/"http___sozialticker_com.skp", // asserts in png decode |
+ "http___sudoestenegocios_com.skp", // assert fT < 1 in addTCoincident |
+ "http___thesuburbanite_com.skp", // bridgeOp() SkASSERT(unsortable || !current->done()); |
+ |
+ "http___fluentin3months_com.skp", // calcCommonCoincidentWinding from calcPartialCoincidentWinding #38.3k |
+ "http___teachersbadi_blogspot_in.skp", // calcCommonCoincidentWinding from calcPartialCoincidentWinding #53.4k |
+ "http___wsms_ru.skp", // assert wind sum != min32 from markDoneBinary / findNextOp #49.5k |
+ "http___voycer_de.skp", // calcCommonCoincidentWinding from calcPartialCoincidentWinding #47k |
+ "http___77hz_jp.skp", // addTCancel from calcCoincidentWinding #47.1k |
+ |
+ "http___hostloco_com.skp", // t < 0 AddIntersectsT |
+/*!*/"http___oggicronaca_it.skp", // asserts in png decode |
+ "http___sergeychunkevich_com.skp", // t < 0 AddIntersectsT |
+ "http___tracksflow_com.skp", // assert otherEnd >= 0 from nextChase |
+ "http___autobutler_dk.skp", // t < 0 AddIntersectsT |
+ "http___onlinecollege_org.skp", // bridgeOp() assert unsortable || ! empty #100.1k |
+ "http___national_com_au.skp", // bridgeOp() assert unsortable || ! empty #110.2k |
+/*!*/"http___anitadongre_com.skp", // exceptionally large width and height |
+ "http___rentacheat_com.skp", // bridgeOp() assert unsortable || ! empty #110.8k |
+/*!*/"http___gruesse_de.skp", // asserts in png decode |
+/*!*/"http___crn_in.png", // width=1250047 |
+ "http___breakmystyle_com.skp", // assert qPt == lPt in quad intersection |
+ "http___naoxrane_ru.skp", // assert t4+...t0 == 0 in quartic roots #128.3k |
+ "http___tcmevents_org.skp", // assert in addTCoincident (from calcPartialCoincidentWinding) #143.3k |
+/*!*/"http___listbuildingcashsecrets_com.skp", // asserts in png decode #152.7k |
+/*!*/"http___skyscraperpage_com.skp", // asserts in png decode #155.5k |
+ "http___mlk_com.skp", // bridgeOp() assert unsortable || ! empty #158.7k |
+ "http___sd_graphic_net.skp", // bridgeOp() assert unsortable || ! empty #163.3k |
+ "http___kopepasah_com.skp", // checkEnds() assert #188.2k |
+/*!*/"http___darkreloaded_com.skp", // asserts in png decode #188.4k |
+ "http___redbullskatearcade_es.skp", // bridgeOp() assert unsortable || ! empty #192.5k |
+ "http___partainasdemo250_org.skp", // bridgeOp() assert unsortable || ! empty #200.2k |
+ |
+// these failures are from the new 10k set |
+ "http___www_freerepublic_com_.skp", // assert in opangle < |
+ "http___www_lavoixdunord_fr_.skp", // bridgeOp() assert unsortable || ! empty |
+ "http___www_booking_com_.skp", // bridgeOp() assert unsortable || ! empty |
+ "http___www_fj_p_com_.skp", // markWinding assert from findChaseOp |
+ "http___www_leadpages_net_.skp", // assert in opangle < |
+ "http___www_despegar_com_mx_.skp", // bridgeOp() assert unsortable || ! empty |
+}; |
+ |
+size_t skipOverCount = sizeof(skipOver) / sizeof(skipOver[0]); |
static void PathOpsSkpClipTest(skiatest::Reporter* reporter) { |
SkOSFile::Iter iter(pictDir, "skp"); |
SkString filename; |
int testCount = 0; |
while (iter.next(&filename)) { |
- if (strcmp(filename.c_str(), skipBefore) < 0) { |
+ SkString pngName = make_png_name(filename); |
+ SkString oldPng = make_filepath(outOldClipDir, pngName); |
+ SkString newPng = make_filepath(outSkpClipDir, pngName); |
+ if (sk_exists(oldPng.c_str()) && sk_exists(newPng.c_str())) { |
+ reporter->bumpTestCount(); |
continue; |
} |
+ for (size_t index = 0; index < skipOverCount; ++index) { |
+ if (skipOver[index] && strcmp(filename.c_str(), skipOver[index]) == 0) { |
+ reporter->bumpTestCount(); |
+ goto skipOver; |
+ } |
+ } |
testOne(filename); |
if (reporter->verbose()) { |
SkDebugf("."); |
if (++testCount % 100 == 0) { |
- SkDebugf("\n"); |
+ SkDebugf("%d\n", testCount); |
} |
} |
+skipOver: |
reporter->bumpTestCount(); |
} |
} |
-static void testSkpClipMain(PathOpsThreadState* data) { |
- SkString str(data->fSerialNo); |
- testOne(str); |
- if (data->fReporter->verbose()) { |
+static void bumpCount(skiatest::Reporter* reporter, bool skipping) { |
+ if (reporter->verbose()) { |
+ static int threadTestCount; |
+ if (!skipping) { |
SkDebugf("."); |
- static int threadTestCount; |
- sk_atomic_inc(&threadTestCount); |
- if (threadTestCount % 100 == 0) { |
- SkDebugf("\n"); |
- } |
} |
+ sk_atomic_inc(&threadTestCount); |
+ if (!skipping && threadTestCount % 100 == 0) { |
+ SkDebugf("%d\n", threadTestCount); |
+ } |
+ if (skipping && threadTestCount % 10000 == 0) { |
+ SkDebugf("%d\n", threadTestCount); |
+ } |
+ } |
+} |
+ |
+static void testSkpClipMain(PathOpsThreadState* data) { |
+ SkString str(data->fSerialNo); |
+ testOne(str); |
+ bumpCount(data->fReporter, false); |
+ data->fReporter->bumpTestCount(); |
} |
static void PathOpsSkpClipThreadedTest(skiatest::Reporter* reporter) { |
@@ -127,24 +242,52 @@ static void PathOpsSkpClipThreadedTest(skiatest::Reporter* reporter) { |
SkOSFile::Iter iter(pictDir, "skp"); |
SkString filename; |
while (iter.next(&filename)) { |
- if (strcmp(filename.c_str(), skipBefore) < 0) { |
+ SkString pngName = make_png_name(filename); |
+ SkString oldPng = make_filepath(outOldClipDir, pngName); |
+ SkString newPng = make_filepath(outSkpClipDir, pngName); |
+ if (sk_exists(oldPng.c_str()) && sk_exists(newPng.c_str())) { |
+ bumpCount(reporter, true); |
continue; |
} |
+ for (size_t index = 0; index < skipOverCount; ++index) { |
+ if (skipOver[index] && strcmp(filename.c_str(), skipOver[index]) == 0) { |
+ bumpCount(reporter, true); |
+ goto skipOver; |
+ } |
+ } |
*testRunner.fRunnables.append() = SkNEW_ARGS(PathOpsThreadedRunnable, |
(&testSkpClipMain, filename.c_str(), &testRunner)); |
- reporter->bumpTestCount(); |
+skipOver: |
+ ; |
} |
testRunner.render(); |
} |
+static void PathOpsSkpClipFixedTest(skiatest::Reporter* reporter) { |
+ for (size_t index = 0; index < tryFixedCount; ) { |
+ SkString filename(tryFixed[index]); |
+ testOne(filename); |
+ ++index; |
+ if (reporter->verbose()) { |
+ SkDebugf("."); |
+ if (index % 100 == 0) { |
+ SkDebugf("\n"); |
+ } |
+ } |
+ reporter->bumpTestCount(); |
+ } |
+} |
+ |
static void PathOpsSkpClipOneOffTest(skiatest::Reporter* reporter) { |
- SkString filename(skipBefore); |
+ SkString filename("http___78_cn_.skp"); |
testOne(filename); |
} |
#include "TestClassDef.h" |
DEFINE_TESTCLASS_SHORT(PathOpsSkpClipTest) |
+DEFINE_TESTCLASS_SHORT(PathOpsSkpClipFixedTest) |
+ |
DEFINE_TESTCLASS_SHORT(PathOpsSkpClipOneOffTest) |
DEFINE_TESTCLASS_SHORT(PathOpsSkpClipThreadedTest) |