Index: tests/PathOpsSkpClipTest.cpp |
diff --git a/tests/PathOpsSkpClipTest.cpp b/tests/PathOpsSkpClipTest.cpp |
index c0f028c55f0b563b8c1723fea11a8b23192b5b91..da505451da2dd61166ed13372872e03c8d220779 100755 |
--- a/tests/PathOpsSkpClipTest.cpp |
+++ b/tests/PathOpsSkpClipTest.cpp |
@@ -27,87 +27,197 @@ |
#else |
#define PATH_SLASH "/" |
#define IN_DIR "/skp/2311328-7fc2228/slave" |
- #define OUT_DIR "/skpOut/2/" |
+ #define OUT_DIR "/skpOut/4/" |
#endif |
const struct { |
int directory; |
const char* filename; |
} skipOverSept[] = { |
- { 9, "http___www_catingueiraonline_com_.skp"}, // infinite loop |
- {13, "http___www_galaxystwo_com_.skp"}, // infinite loop |
- {15, "http___www_giffingtool_com_.skp"}, // joinCoincidence / findT / assert |
- {15, "http___www_thaienews_blogspot_com_.skp"}, // infinite loop |
- {17, "http___www_gruposejaumdivulgador_com_br_.skp"}, // calcCoincidentWinding asserts zeroSpan |
+ { 3, "http___www_americascup_com_.skp"}, // !simple->closed() |
{18, "http___www_argus_presse_fr_.skp"}, // can't find winding of remaining vertical edge |
- {21, "http___www_fashionscandal_com_.skp"}, // infinite loop |
- {21, "http___www_kenlevine_blogspot_com_.skp"}, // infinite loop |
- {25, "http___www_defense_studies_blogspot_com_.skp"}, // infinite loop |
- {27, "http___www_brokeroutpost_com_.skp"}, // suspect infinite loop |
- {28, "http___www_jaimebatistadasilva_blogspot_com_br_.skp"}, // suspect infinite loop |
- {28, "http___www_odia_com_br_.skp"}, // !simple->isClosed() |
- {29, "http___www_hubbyscook_com_.skp"}, // joinCoincidence / findT / assert |
- {30, "http___www_spankystokes_com_.skp"}, // suspect infinite loop |
- {32, "http___www_adalbertoday_blogspot_com_br_.skp"}, // suspect infinite loop |
- {32, "http___www_galery_annisa_com_.skp"}, // suspect infinite loop |
- {33, "http___www_pindosiya_com_.skp"}, // line quad intersection SkIntersections::assert |
- {36, "http___www_educationalcraft_com_.skp"}, // cubic / cubic near end / assert in SkIntersections::insert (missing skp test) |
- {36, "http___www_shaam_org_.skp"}, // suspect infinite loop |
- {36, "http___www_my_pillow_book_blogspot_gr_.skp"}, // suspect infinite loop |
- {39, "http___www_opbeat_com_.skp"}, // suspect infinite loop |
- {40, "http___www_phototransferapp_com_.skp"}, // !simple->isClosed() |
- {41, "http___www_freeismylife_com_.skp"}, // suspect infinite loop |
- {41, "http___www_accordidelmomento_com_.skp"}, // suspect infinite loop |
- {41, "http___www_evolvehq_com_.skp"}, // joinCoincidence / findT / assert |
- {44, "http___www_contextualnewsfeeds_com_.skp"}, // !simple->isClosed() |
+ {31, "http___www_narayana_verlag_de_.skp"}, // !simple->closed() |
+ {36, "http___www_educationalcraft_com_.skp"}, // cubic / cubic near end / assert in SkIntersections::insert |
{44, "http___www_cooksnaps_com_.skp"}, // !simple->isClosed() |
- {44, "http___www_helha_be_.skp"}, // !simple->isClosed() |
- {45, "http___www_blondesmakemoney_blogspot_com_.skp"}, // suspect infinite loop |
- {46, "http___www_cheaphealthygood_blogspot_com_.skp"}, // suspect infinite loop |
- {47, "http___www_ajitvadakayil_blogspot_in_.skp"}, // suspect infinite loop |
- {49, "http___www_karnivool_com_au_.skp"}, // SkOpAngle::setSector SkASSERT(fSectorStart >= 0); |
- {49, "http___www_tunero_de_.skp"}, // computeonesumreverse calls markwinding with 0 winding |
- {49, "http___www_thaienews_blogspot_sg_.skp"}, // suspect infinite loop |
- {50, "http___www_docgelo_com_.skp"}, // rightAngleWinding (probably same as argus_presse) |
+ {48, "http___www_narayana_publishers_com_.skp"}, // !simple->isClosed() |
+ {51, "http___www_freedominthe50states_org_.skp"}, // corrupt dash data |
+ {52, "http___www_aceinfographics_com_.skp"}, // right angle winding assert |
{53, "http___www_lojaanabotafogo_com_br_.skp"}, // rrect validate assert |
- {54, "http___www_odecktestanswer2013_blogspot_in_.skp"}, // suspect infinite loop |
- {54, "http___www_cleristonsilva_com_br_.skp"}, // suspect infinite loop |
- {56, "http___www_simplysaru_com_.skp"}, // joinCoincidence / findT / assert |
- {57, "http___www_koukfamily_blogspot_gr_.skp"}, // suspect infinite loop |
- {57, "http___www_dinar2010_blogspot_com_.skp"}, // suspect infinite loop |
- {58, "http___www_artblart_com_.skp"}, // rightAngleWinding |
- {59, "http___www_accrispin_blogspot_com_.skp"}, // suspect infinite loop |
- {59, "http___www_vicisitudysordidez_blogspot_com_es_.skp"}, // suspect infinite loop |
- {60, "http___www_thehousingbubbleblog_com_.skp"}, // suspect infinite loop |
- {61, "http___www_jessicaslens_wordpress_com_.skp"}, // joinCoincidence / findT / assert |
- {61, "http___www_partsdata_de_.skp"}, // cubic-cubic intersection reduce checkLinear assert |
- {62, "http___www_blondesmakemoney_blogspot_com_au_.skp"}, // suspect infinite loop |
- {62, "http___www_intellibriefs_blogspot_in_.skp"}, // suspect infinite loop |
- {63, "http___www_tankerenemy_com_.skp"}, // suspect infinite loop |
- {65, "http___www_kpopexplorer_net_.skp"}, // joinCoincidence / findT / assert |
- {65, "http___www_bestthingsinbeauty_blogspot_com_.skp"}, // suspect infinite loop |
- {65, "http___www_wartepop_blogspot_com_br_.skp"}, // !simple->isClosed() |
- {65, "http___www_eolake_blogspot_com_.skp"}, // suspect infinite loop |
- {67, "http___www_cacadordemisterio_blogspot_com_br_.skp"}, // suspect infinite loop |
- {69, "http___www_misnotasyapuntes_blogspot_mx_.skp"}, // suspect infinite loop |
- {69, "http___www_awalkintheparknyc_blogspot_com_.skp"}, // suspect infinite loop |
- {71, "http___www_lokado_de_.skp"}, // joinCoincidence / findT / assert |
- {72, "http___www_karlosdesanjuan_blogspot_com_.skp"}, // suspect infinite loop |
- {73, "http___www_cyberlawsinindia_blogspot_in_.skp"}, // suspect infinite loop |
- {73, "http___www_taxiemmovimento_blogspot_com_br_.skp"}, // suspect infinite loop |
- {74, "http___www_giveusliberty1776_blogspot_com_.skp"}, // suspect infinite loop |
- {75, "http___www_e_cynical_blogspot_gr_.skp"}, // suspect infinite loop |
- {76, "http___www_seopack_blogspot_com_.skp"}, // SkOpAngle::setSector SkASSERT(fSectorStart >= 0); |
- {77, "http___www_sunsky_russia_com_.skp"}, // joinCoincidence / findT / assert (no op test, already fixed hopefully) |
- {78, "http___www_bisnisonlineinfo_com_.skp"}, // suspect infinite loop |
- {79, "http___www_danielsgroupcpa_com_.skp"}, // joinCoincidence / findT / assert (no op test, already fixed hopefully) |
- {80, "http___www_clinique_portugal_com_.skp"}, // suspect infinite loop |
- {81, "http___www_europebusines_blogspot_com_.skp"}, // suspect infinite loop |
- {82, "http___www_apopsignomi_blogspot_gr_.skp"}, // suspect infinite loop |
- {85, "http___www_ajitvadakayil_blogspot_com_.skp"}, // suspect infinite loop |
- {86, "http___www_madhousefamilyreviews_blogspot_co_uk_.skp"}, // suspect infinite loop |
+ {57, "http___www_vantageproduction_com_.skp"}, // !isClosed() |
+ {64, "http___www_etiqadd_com_.skp"}, // !simple->closed() |
+ {84, "http___www_swapspacesystems_com_.skp"}, // !simple->closed() |
+ {90, "http___www_tcmevents_org_.skp"}, // !simple->closed() |
+ {96, "http___www_paseoitaigara_com_br_.skp"}, // !simple->closed() |
+ {98, "http___www_mortgagemarketguide_com_.skp"}, // !simple->closed() |
+ {99, "http___www_kitcheninspirations_wordpress_com_.skp"}, // checkSmall / bumpSpan |
}; |
+/* stats |
+97 http___www_brandyandvinca_com_.skp pixelError=3 |
+95 http___www_into_asia_com_.skp pixelError=12 |
+93 http___www_lunarplanner_com_.skp pixelError=14 |
+98 http___www_lovelyitalia_com_.skp pixelError=17 |
+90 http___www_inter_partner_blogspot_com_.skp pixelError=18 |
+99 http___www_maxarea_com_.skp pixelError=26 |
+98 http___www_maroonsnet_org_.skp pixelError=33 |
+92 http___www_belinaart_ru_.skp pixelError=50 |
+100 http___www_chroot_ro_.skp pixelError=62 |
+99 http___www_hsbrands_com_.skp pixelError=98 |
+95 http___www_tournamentindicator_com_.skp pixelError=122 |
+93 http___www_businesses_com_au_.skp pixelError=162 |
+90 http___www_regenesys_net_.skp pixelError=182 |
+88 http___www_1863544208148625103_c18eac63985503fa85b06358959c1ba27fc36f82_blogspot_com_.skp pixelError=186 |
+97 http___www_pregacoesevangelica_com_br_.skp pixelError=240 |
+77 http___www_zhenggang_org_.skp pixelError=284 |
+96 http___slidesharemailer_com_.skp pixelError=522 |
+94 http___www_gensteel_com_.skp pixelError=555 |
+68 http___www_jf_eti_br_.skp pixelError=610 |
+83 http___www_swishiat_com_.skp pixelError=706 |
+96 http___www_matusikmissive_com_au_.skp pixelError=2580 |
+95 http___www_momentumnation_com_.skp pixelError=3938 |
+92 http___www_rssowl_com_.skp pixelError=5113 |
+96 http___www_sexxygirl_tv_.skp pixelError=7605 |
+99 http___www_georgevalah_wordpress_com_.skp pixelError=8386 |
+78 http___www_furbo_org_.skp pixelError=8656 |
+78 http___www_djxhemary_wordpress_com_.skp pixelError=8976 |
+100 http___www_mindcontrolblackassassins_com_.skp pixelError=31950 |
+98 http___bababillgates_free_fr_.skp pixelError=40237 |
+98 http___hepatite_ro_.skp pixelError=44370 |
+86 http___www_somethingwagging_com_.skp pixelError=47794 |
+84 http___www_beverageuniverse_com_.skp pixelError=65450 |
+50 http___www_aveksa_com_.skp pixelError=68194 |
+10 http___www_publiker_pl_.skp pixelError=89997 |
+61 http___www_dominos_co_id_.skp pixelError=476868 |
+87 http___www_du_edu_om_.skp time=46 |
+87 http___www_bigload_de_.skp time=46 |
+100 http___www_home_forum_com_.skp time=48 |
+97 http___www_hotamateurchat_com_.skp time=48 |
+97 http___www_myrsky_com_cn_.skp time=48 |
+98 http___www_techiegeex_com_.skp time=49 |
+82 http___www_fashionoutletsofchicago_com_.skp time=50 |
+77 http___www_dynamischbureau_nl_.skp time=50 |
+82 http___www_mayihelpu_co_in_.skp time=50 |
+84 http___www_vbox7_com_user_history_viewers_.skp time=50 |
+85 http___www_ktokogda_com_.skp time=50 |
+85 http___www_propertyturkeysale_com_.skp time=50 |
+85 http___www_51play_com_.skp time=50 |
+86 http___www_bayalarm_com_.skp time=50 |
+87 http___www_eaglepictures_com_.skp time=50 |
+88 http___www_atlasakvaryum_com_.skp time=50 |
+91 http___www_pioneerchryslerjeep_com_.skp time=50 |
+94 http___www_thepulsemag_com_.skp time=50 |
+95 http___www_dcshoes_com_ph_.skp time=50 |
+96 http___www_montrealmassage_ca_.skp time=50 |
+96 http___www_jkshahclasses_com_.skp time=50 |
+96 http___www_webcamconsult_com_.skp time=51 |
+100 http___www_bsoscblog_com_.skp time=52 |
+95 http___www_flaktwoods_com_.skp time=53 |
+91 http___www_qivivo_com_.skp time=54 |
+90 http___www_unitender_com_.skp time=56 |
+97 http___www_casinogaming_com_.skp time=56 |
+97 http___www_rootdownload_com_.skp time=56 |
+94 http___www_aspa_ev_de_.skp time=57 |
+98 http___www_tenpieknyswiat_pl_.skp time=57 |
+93 http___www_transocean_de_.skp time=58 |
+94 http___www_vdo2_blogspot_com_.skp time=58 |
+94 http___www_asmaissexy_com_br_.skp time=58 |
+100 http___www_prefeiturasjm_com_br_.skp time=60 |
+100 http___www_eduinsuranceclick_blogspot_com_.skp time=60 |
+96 http___www_bobdunsire_com_.skp time=61 |
+96 http___www_omgkettlecorn_com_.skp time=61 |
+85 http___www_fbbsessions_com_.skp time=62 |
+86 http___www_hector_ru_.skp time=62 |
+87 http___www_wereldsupporter_nl_.skp time=62 |
+90 http___www_arello_com_.skp time=62 |
+93 http___www_bayerplastics_com_.skp time=62 |
+93 http___www_superandolamovida_com_ar_.skp time=62 |
+96 http___www_med_rbf_ru_.skp time=62 |
+81 http___www_carnegiescience_edu_.skp time=65 |
+87 http___www_asanewengland_com_.skp time=65 |
+92 http___www_turkce_karakter_appspot_com_.skp time=65 |
+94 http___www_k3a_org_.skp time=65 |
+96 http___www_powermaccenter_com_.skp time=65 |
+98 http___www_avto49_ru_.skp time=67 |
+100 http___www_hetoldeambaecht_nl_.skp time=68 |
+95 http___www_marine_ie_.skp time=69 |
+96 http___www_quebecvapeboutique_com_.skp time=69 |
+95 http___www_brays_ingles_com_.skp time=70 |
+100 http___www_lacondesa_com_.skp time=72 |
+95 http___www_timbarrathai_com_au_.skp time=76 |
+95 http___www_cuissedegrenouille_com_.skp time=76 |
+95 http___www_iwama51_ru_.skp time=76 |
+99 http___www_fotoantologia_it_.skp time=76 |
+92 http___www_indian_architects_com_.skp time=78 |
+92 http___www_totalwomanspa_com_.skp time=78 |
+100 http___www_fachverband_spielhallen_de_.skp time=83 |
+93 http___www_golshanemehr_ir_.skp time=84 |
+95 http___www_maryesses_com_.skp time=84 |
+99 http___www_ddcorp_ca_.skp time=89 |
+90 http___www_brontops_com_.skp time=89 |
+94 http___www_robgolding_com_.skp time=89 |
+91 http___www_tecban_com_br_.skp time=91 |
+98 http___www_costamesakarate_com_.skp time=100 |
+95 http___www_monsexyblog_com_.skp time=103 |
+97 http___www_stornowaygazette_co_uk_.skp time=103 |
+93 http___www_fitforaframe_com_.skp time=104 |
+98 http___www_intentionoftheday_com_.skp time=113 |
+100 http___www_tailgateclothing_com_.skp time=117 |
+95 http___www_senbros_com_.skp time=118 |
+93 http___www_lettoblog_com_.skp time=121 |
+94 http___www_maxineschallenge_com_au_.skp time=125 |
+95 http___www_savvycard_net_.skp time=127 |
+95 http___www_open_ac_mu_.skp time=129 |
+96 http___www_avgindia_in_.skp time=135 |
+97 http___www_stocktonseaview_com_.skp time=135 |
+96 http___www_distroller_com_.skp time=142 |
+94 http___www_travoggalop_dk_.skp time=144 |
+100 http___www_history_im_.skp time=144 |
+94 http___www_playradio_sk_.skp time=145 |
+92 http___www_linglongglass_com_.skp time=151 |
+97 http___www_bizzna_com_.skp time=151 |
+96 http___www_spiros_ws_.skp time=154 |
+91 http___www_rosen_meents_co_il_.skp time=156 |
+81 http___www_hoteldeluxeportland_com_.skp time=158 |
+92 http___www_freetennis_org_.skp time=161 |
+93 http___www_aircharternetwork_com_au_.skp time=161 |
+94 http___www_austinparks_org_.skp time=165 |
+89 http___www_bevvy_co_.skp time=168 |
+91 http___www_sosyalhile_net_.skp time=168 |
+98 http___www_minvih_gob_ve_.skp time=171 |
+89 http___www_streetfoodmtl_com_.skp time=172 |
+92 http___www_loveslatinas_tumblr_com_.skp time=178 |
+93 http___www_madbites_co_in_.skp time=180 |
+94 http___www_rocktarah_ir_.skp time=185 |
+97 http___www_penthouselife_com_.skp time=185 |
+96 http___www_appymonkey_com_.skp time=196 |
+92 http___www_pasargadhotels_com_.skp time=203 |
+99 http___www_marina_mil_pe_.skp time=203 |
+89 http___www_kays_co_uk_.skp time=205 |
+77 http___www_334588_com_.skp time=211 |
+83 http___www_trendbad24_de_.skp time=211 |
+81 http___www_cdnetworks_co_kr_.skp time=216 |
+94 http___www_schellgames_com_.skp time=223 |
+95 http___www_juliaweddingnews_cn_.skp time=230 |
+92 http___www_xcrafters_pl_.skp time=253 |
+93 http___www_pondoo_com_.skp time=253 |
+96 http___www_helsinkicapitalpartners_fi_.skp time=255 |
+88 http___www_nadtexican_com_.skp time=259 |
+85 http___www_canstockphoto_hu_.skp time=266 |
+78 http___www_ecovacs_com_cn_.skp time=271 |
+93 http___www_brookfieldplaceny_com_.skp time=334 |
+93 http___www_fmastrengthtraining_com_.skp time=337 |
+94 http___www_turtleonthebeach_com_.skp time=394 |
+90 http___www_temptationthemovie_com_.skp time=413 |
+95 http___www_patongsawaddi_com_.skp time=491 |
+91 http___www_online_radio_appspot_com_.skp time=511 |
+68 http___www_richardmiller_co_uk_.skp time=528 |
+63 http___www_eschrade_com_.skp time=543 |
+55 http___www_interaction_inf_br_.skp time=625 |
+38 http___www_huskyliners_com_.skp time=632 |
+86 http___granda_net_.skp time=1067 |
+24 http___www_cocacolafm_com_br_.skp time=1081 |
+*/ |
+ |
size_t skipOverSeptCount = sizeof(skipOverSept) / sizeof(skipOverSept[0]); |
enum TestStep { |
@@ -116,7 +226,7 @@ enum TestStep { |
}; |
enum { |
- kMaxLength = 128, |
+ kMaxLength = 256, |
kMaxFiles = 128, |
kSmallLimit = 1000, |
}; |
@@ -190,6 +300,13 @@ public: |
} |
}; |
+class SortByName : public TestResult { |
+public: |
+ bool operator<(const SortByName& rh) const { |
+ return strcmp(fFilename, rh.fFilename) < 0; |
+ } |
+}; |
+ |
struct TestState { |
void init(int dirNo, skiatest::Reporter* reporter) { |
fReporter = reporter; |
@@ -217,11 +334,6 @@ struct TestRunner { |
class TestRunnable : public SkRunnable { |
public: |
- TestRunnable(void (*testFun)(TestState*), int dirNo, TestRunner* runner) { |
- fState.init(dirNo, runner->fReporter); |
- fTestFun = testFun; |
- } |
- |
virtual void run() SK_OVERRIDE { |
SkGraphics::SetTLSFontCacheLimit(1 * 1024 * 1024); |
(*fTestFun)(&fState); |
@@ -231,6 +343,33 @@ public: |
void (*fTestFun)(TestState*); |
}; |
+ |
+class TestRunnableDir : public TestRunnable { |
+public: |
+ TestRunnableDir(void (*testFun)(TestState*), int dirNo, TestRunner* runner) { |
+ fState.init(dirNo, runner->fReporter); |
+ fTestFun = testFun; |
+ } |
+ |
+}; |
+ |
+class TestRunnableFile : public TestRunnable { |
+public: |
+ TestRunnableFile(void (*testFun)(TestState*), int dirNo, const char* name, TestRunner* runner) { |
+ fState.init(dirNo, runner->fReporter); |
+ 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++) { |
SkDELETE(fRunnables[index]); |
@@ -272,6 +411,16 @@ static SkString make_in_dir_name(int dirNo) { |
return dirName; |
} |
+static SkString make_stat_dir_name(int dirNo) { |
+ SkString dirName(outStatusDir); |
+ dirName.appendf("%d", dirNo); |
+ if (!sk_exists(dirName.c_str())) { |
+ SkDebugf("could not read dir %s\n", dirName.c_str()); |
+ return SkString(); |
+ } |
+ return dirName; |
+} |
+ |
static bool make_one_out_dir(const char* outDirStr) { |
SkString outDir = make_filepath(0, outDirStr, ""); |
if (!sk_exists(outDir.c_str())) { |
@@ -675,32 +824,79 @@ static bool initTest() { |
return make_out_dirs(); |
} |
+static bool initUberTest(int firstDirNo, int lastDirNo) { |
+ if (!initTest()) { |
+ return false; |
+ } |
+ for (int index = firstDirNo; index <= lastDirNo; ++index) { |
+ SkString statusDir(outStatusDir); |
+ statusDir.appendf("%d", index); |
+ if (!make_one_out_dir(statusDir.c_str())) { |
+ return false; |
+ } |
+ } |
+ return true; |
+} |
+ |
+ |
+static void testSkpClipEncode(TestState* data) { |
+ data->fResult.testOne(); |
+ if (data->fReporter->verbose()) { |
+ SkDebugf("+"); |
+ } |
+} |
+ |
static void encodeFound(skiatest::Reporter* reporter, TestState& state) { |
if (reporter->verbose()) { |
- 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.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); |
+ } |
} |
- SkTDArray<SortByTime*> slowest; |
- for (int index = 0; index < state.fSlowest.count(); ++index) { |
- *slowest.append() = &state.fSlowest[index]; |
+ 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); |
+ } |
+ } |
} |
- 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); |
+ } |
+ |
+ int threadCount = reporter->allowThreaded() ? SkThreadPool::kThreadPerCore : 1; |
+ TestRunner testRunner(reporter, threadCount); |
+ 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() = SkNEW_ARGS(TestRunnableEncode, |
+ (&testSkpClipEncode, result.fDirNo, filename.c_str(), &testRunner)); |
} |
+ testRunner.render(); |
+#if 0 |
for (int index = 0; index < state.fPixelWorst.count(); ++index) { |
const TestResult& result = state.fPixelWorst[index]; |
- TestResult::Test(result.fDirNo, result.fFilename, kEncodeFiles); |
- if (state.fReporter->verbose()) SkDebugf("+"); |
+ SkString filename(result.fFilename); |
+ if (!filename.endsWith(".skp")) { |
+ filename.append(".skp"); |
+ } |
+ TestResult::Test(result.fDirNo, filename.c_str(), kEncodeFiles); |
+ if (reporter->verbose()) SkDebugf("+"); |
} |
+#endif |
} |
DEF_TEST(PathOpsSkpClip, reporter) { |
@@ -732,19 +928,177 @@ DEF_TEST(PathOpsSkpClipThreaded, reporter) { |
} |
int threadCount = reporter->allowThreaded() ? SkThreadPool::kThreadPerCore : 1; |
TestRunner testRunner(reporter, threadCount); |
- for (int dirNo = 1; dirNo <= 100; ++dirNo) { |
- *testRunner.fRunnables.append() = SkNEW_ARGS(TestRunnable, |
+ const int firstDirNo = 1; |
+ for (int dirNo = firstDirNo; dirNo <= 100; ++dirNo) { |
+ *testRunner.fRunnables.append() = SkNEW_ARGS(TestRunnableDir, |
(&testSkpClipMain, dirNo, &testRunner)); |
} |
testRunner.render(); |
TestState state; |
state.init(0, reporter); |
- for (int dirNo = 1; dirNo <= 100; ++dirNo) { |
+ for (int dirNo = firstDirNo; dirNo <= 100; ++dirNo) { |
TestState& testState = testRunner.fRunnables[dirNo - 1]->fState; |
+ SkASSERT(testState.fResult.fDirNo == dirNo); |
for (int inner = 0; inner < testState.fPixelWorst.count(); ++inner) { |
- SkASSERT(testState.fResult.fDirNo == dirNo); |
addError(&state, testState.fPixelWorst[inner]); |
} |
+ for (int inner = 0; inner < testState.fSlowest.count(); ++inner) { |
+ addError(&state, testState.fSlowest[inner]); |
+ } |
+ } |
+ encodeFound(reporter, state); |
+} |
+ |
+static void testSkpClipUber(TestState* data) { |
+ data->fResult.testOne(); |
+ SkString dirName = make_stat_dir_name(data->fResult.fDirNo); |
+ if (!dirName.size()) { |
+ return; |
+ } |
+ 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 = make_filepath(data->fResult.fDirNo, outStatusDir, statName.c_str()); |
+ SkFILE* file = sk_fopen(statusFile.c_str(), kWrite_SkFILE_Flag); |
+ if (!file) { |
+ SkDebugf("failed to create %s", statusFile.c_str()); |
+ return; |
+ } |
+ sk_fclose(file); |
+ if (data->fReporter->verbose()) { |
+ if (data->fResult.fPixelError || data->fResult.fTime) { |
+ SkDebugf("%s", data->fResult.progress().c_str()); |
+ } else { |
+ SkDebugf("."); |
+ } |
+ } |
+} |
+ |
+static bool buildTests(skiatest::Reporter* reporter, int firstDirNo, int lastDirNo, SkTDArray<TestResult>* tests, |
+ SkTDArray<SortByName*>* sorted) { |
+ for (int dirNo = firstDirNo; dirNo <= lastDirNo; ++dirNo) { |
+ SkString dirName = make_stat_dir_name(dirNo); |
+ 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) { |
+ continue; |
+ } |
+ 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 (reporter->verbose()) { |
+ SkDebugf("+"); |
+ } |
+ } |
+ } |
+ return true; |
+} |
+ |
+bool Less(const SortByName& a, const SortByName& b); |
+bool Less(const SortByName& a, const SortByName& b) { |
+ return a < b; |
+} |
+ |
+DEF_TEST(PathOpsSkpClipUberThreaded, reporter) { |
+ const int firstDirNo = 1; |
+ const int lastDirNo = 100; |
+ if (!initUberTest(firstDirNo, lastDirNo)) { |
+ return; |
+ } |
+ const int dirCount = lastDirNo - firstDirNo + 1; |
+ SkTDArray<TestResult> tests[dirCount]; |
+ SkTDArray<SortByName*> sorted[dirCount]; |
+ if (!buildTests(reporter, firstDirNo, lastDirNo, tests, sorted)) { |
+ return; |
+ } |
+ int threadCount = reporter->allowThreaded() ? SkThreadPool::kThreadPerCore : 1; |
+ TestRunner testRunner(reporter, threadCount); |
+ for (int dirNo = firstDirNo; dirNo <= lastDirNo; ++dirNo) { |
+ SkString dirName = make_in_dir_name(dirNo); |
+ if (!dirName.size()) { |
+ continue; |
+ } |
+ SkOSFile::Iter iter(dirName.c_str(), "skp"); |
+ SkString filename; |
+ while (iter.next(&filename)) { |
+ int count; |
+ SortByName name; |
+ for (size_t index = 0; index < skipOverSeptCount; ++index) { |
+ if (skipOverSept[index].directory == dirNo |
+ && strcmp(filename.c_str(), skipOverSept[index].filename) == 0) { |
+ goto checkEarlyExit; |
+ } |
+ } |
+ name.init(dirNo); |
+ strncpy(name.fFilename, filename.c_str(), filename.size() - 4); // drop .skp |
+ count = sorted[dirNo - firstDirNo].count(); |
+ if (SkTSearch<SortByName, Less>(sorted[dirNo - firstDirNo].begin(), |
+ count, &name, sizeof(&name)) < 0) { |
+ *testRunner.fRunnables.append() = SkNEW_ARGS(TestRunnableFile, |
+ (&testSkpClipUber, dirNo, filename.c_str(), &testRunner)); |
+ } |
+ checkEarlyExit: |
+ ; |
+ } |
+ |
+ } |
+ testRunner.render(); |
+ SkTDArray<TestResult> results[dirCount]; |
+ if (!buildTests(reporter, firstDirNo, lastDirNo, results, NULL)) { |
+ return; |
+ } |
+ SkTDArray<TestResult> allResults; |
+ for (int dirNo = firstDirNo; dirNo <= lastDirNo; ++dirNo) { |
+ SkTDArray<TestResult>& array = results[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(reporter, state); |
} |