• StefanBruens's avatar
    SplashXPathScanner: Optionally use small_vector from boost · 355fd8d5
    StefanBruens authored
    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 (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
    355fd8d5