Skip to content
  • StefanBruens's avatar
    SplashXPathScanner: Optionally use small_vector from boost · 355fd8d5
    StefanBruens authored and Albert Astals Cid's avatar Albert Astals Cid committed
    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