I'll do, after I am back from holidays ;-) ------------------------------------------------------------------------ PREINING, Norbert http://www.preining.info JAIST, Japan TeX Live & Debian Developer GPG: 0x860CDC13 fp: F7D8 A928 26E3 16A1 9FA0 ACF0 6CAC A448 860C DC13 ------------------------------------------------------------------------
> On 2014/08/12, at 0:23, Behdad Esfahbod <[email protected]> wrote: > > That certainly isn't working as intended. I tested the cache locally (not in > the context of XeTeX) and it works fine. > > Can you dig into hb_shape_plan_matches() and see why it's never matching? > > >> On 14-08-11 06:01 AM, Norbert Preining wrote: >> Hi >> >> I think I found the bug: >> >>> On Mon, 11 Aug 2014, Norbert Preining wrote: >>> This is about 100 times faster .... total runtime on that document, with >>> debug output, real 1.845s. >> >> >> I recompiled harfbuzz with some debug statements in the >> function, and it turned out that when I do that: >> (in src/hb-shape-plan.cc, function hb_shape_plan_create_cached >> ... >> retry: >> fprintf(stderr, "DEBUG harfbuzz: after retry label\n"); >> hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) >> hb_atomic_ptr_get (&face->shape_plans); >> for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = >> node->next) { >> fprintf(stderr, "DEBUG harfbuzz node for loop\n"); >> if (hb_shape_plan_matches (node->shape_plan, &proposal)) { >> fprintf(stderr, "DEBUG harfbuzz return from node loop\n"); >> return hb_shape_plan_reference (node->shape_plan); >> } >> } >> ... >> >> THat the loop is getting longer and longer and longer and longer. >> For each iteration it loops one more time!! I only send you >> the start of the log output: >> ..... >> DEBUG [1407750920] <0> return from hb_shape_plan_create_cached >> DEBUG [1407750920] hbFace=47040112, segment_props.script=1281455214, >> segment_props.direction=4, segment-props.language=47792128, >> engine->nFeatures=0, shaperList=¨1N >> DEBUG harfbuzz: after retry label >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz: before shape_plan_create >> DEBUG harfbuzz: before calloc >> DEBUG [1407750920] <0> return from hb_shape_plan_create_cached >> DEBUG [1407750920] hbFace=47040112, segment_props.script=1281455214, >> segment_props.direction=4, segment-props.language=47792128, >> engine->nFeatures=0, shaperList=¨1N >> DEBUG harfbuzz: after retry label >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz: before shape_plan_create >> DEBUG harfbuzz: before calloc >> DEBUG [1407750920] <0> return from hb_shape_plan_create_cached >> DEBUG [1407750920] hbFace=47040112, segment_props.script=1281455214, >> segment_props.direction=4, segment-props.language=47792128, >> engine->nFeatures=0, shaperList=¨1N >> DEBUG harfbuzz: after retry label >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz node for loop >> DEBUG harfbuzz: before shape_plan_create >> DEBUG harfbuzz: before calloc >> DEBUG [1407750920] <0> return from hb_shape_plan_create_cached >> >> >> SO with every char another loop element is added. >> >> Still on the first page, I already had: >> [~/foo] grep loop xelatexslow-debug-output.log | wc -l >> 6249880 >> ... >> >> >> That explains why it is getting soooo slow ... >> >> >> I cannot dig into the code now, but this is for sure not >> planned ;-) >> >> >> Norbert >> >> ------------------------------------------------------------------------ >> PREINING, Norbert http://www.preining.info >> JAIST, Japan TeX Live & Debian Developer >> GPG: 0x860CDC13 fp: F7D8 A928 26E3 16A1 9FA0 ACF0 6CAC A448 860C DC13 >> ------------------------------------------------------------------------ > > -- > behdad > http://behdad.org/

