Skip to content

SplashXPathScanner: Optionally use small_vector from boost

Currently, each row in the intersections vector is allocated separately, when the first intersection is added.

To avoid these allocations for common simple polygons, boost::container::small_vector<4, T> is used, which stores up to 4 intersections inline. small_vector is a header-only class.

For the documents from #57 (fdo#96728) and #24 (closed) (fdo#78728), the runtime/memory is significantly reduced (according to /usr/bin/time -v): (1) $> pdftoppm -r 18 -aa no runsforever-poppler.pdf (2) $> pdftoppm surf-types.pdf

Before/After runsforever-poppler | surf-types User time (seconds): 2348.08 / 1773.53 | 7.76 / 5.02 Maximum resident set size (kbytes): 46288 / 45896 | 14076 / 13748

Followup to !19 (closed)

Edited by StefanBruens

Merge request reports