Skip to content

Volume Charts iced lyon performance

Pedro Tacla Yamada edited this page Jul 19, 2021 · 1 revision

iced performance for volume graph

15% memory usage to render at 60fps. Most time spent on tessellation inside lyon.

Benchmarking

Benchmarks in plugin_host_gui_criterion. Specific benchmark is "tessellate".

Tessellate benchmark for 40k points version 0.17

tessellate              time:   [157.70 ms 158.70 ms 159.70 ms]                       
                        change: [-4.6951% -2.4368% -0.3103%] (p = 0.03 < 0.05)
                        Change within noise threshold.

Tessellate benchmark for 40k points version 0.16

tessellate              time:   [141.95 ms 144.58 ms 147.61 ms]                       
                        change: [-10.551% -8.8967% -6.9494%] (p = 0.00 < 0.05)
                        Performance has improved.

0.17 Disabled intersection handling

tessellate              time:   [85.958 ms 87.224 ms 88.544 ms]                       
                        change: [+5.6628% +7.2165% +9.1133%] (p = 0.00 < 0.05)
                        Performance has regressed.

0.16 Disabled intersection handling

tessellate              time:   [112.95 ms 126.27 ms 142.38 ms]                       
                        change: [+29.593% +44.761% +66.481%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
  4 (4.00%) high mild
  8 (8.00%) high severe

Improving performance:

  • Around 2x improvement over 0.17 from disabling intersection checking, which should work for our use-case
  • We could implement more low-level drawing
  • With version 0.16, t

Decision to do nothing

  • Will disable intersection handling
  • Will not do any further optimisation to drawing because 15% seems like a reasonable CPU use for now
  • I can just reduce the nº of points for this application

Further ideas

  • Caching the FillTessellator object between frames. On synthetic testing this yields around 5% improvement; I see on sampling the app there're a lot of allocations going inside of fill

Clone this wiki locally