Add the re-fit on delete feature to the Path tool
Closes #2651
Performance Benchmark Results
compile_demo_art_iai::compile_group::compile_to_proto with_setup_0:load_from_name(isometric-fountain)
Instructions: 25,114,306 (master) -> 25,118,902 (HEAD) : $$\color{red}+0.02\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 310,612| 309,222 -0.45%
D1mw 99,788| 97,588 -2.20%
DLmr 28,941| 28,802 -0.48%
DLmw 49,977| 42,245 -15.47%
Dr 6,084,845| 6,086,252 +0.02%
Dw 4,301,961| 4,302,837 +0.02%
EstimatedCycles 39,720,742| 39,468,535 -0.63%
I1mr 46,150| 44,076 -4.49%
ILmr 863| 853 -1.16%
Ir 25,114,306| 25,118,902 +0.02%
L1hits 35,044,562| 35,057,105 +0.04%
LLhits 376,769| 378,986 +0.59%
RamHits 79,781| 71,900 -9.88%
TotalRW 35,501,112| 35,507,991 +0.02%
compile_demo_art_iai::compile_group::compile_to_proto with_setup_1:load_from_name(painted-dreams)
Instructions: 13,088,521 (master) -> 13,083,509 (HEAD) : $$\color{lime}-0.04\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 156,762| 155,598 -0.74%
D1mw 49,415| 49,621 +0.42%
DLmr 918| 777 -15.36%
DLmw 15,844| 12,850 -18.90%
Dr 3,172,749| 3,171,360 -0.04%
Dw 2,233,731| 2,232,965 -0.03%
EstimatedCycles 19,935,111| 19,827,584 -0.54%
I1mr 22,653| 22,101 -2.44%
ILmr 731| 722 -1.23%
Ir 13,088,521| 13,083,509 -0.04%
L1hits 18,266,171| 18,260,514 -0.03%
LLhits 211,337| 212,971 +0.77%
RamHits 17,493| 14,349 -17.97%
TotalRW 18,495,001| 18,487,834 -0.04%
compile_demo_art_iai::compile_group::compile_to_proto with_setup_2:load_from_name(procedural-string-lights)
Instructions: 2,205,714 (master) -> 2,166,128 (HEAD) : $$\color{lime}-1.79\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 22,740| 22,438 -1.33%
D1mw 10,755| 10,586 -1.57%
DLmr 22| 21 -4.55%
DLmw 1,583| 2,476 +56.41%
Dr 510,313| 500,832 -1.86%
Dw 372,191| 365,324 -1.85%
EstimatedCycles 3,311,772| 3,280,122 -0.96%
I1mr 4,971| 4,883 -1.77%
ILmr 718| 710 -1.11%
Ir 2,205,714| 2,166,128 -1.79%
L1hits 3,049,752| 2,994,377 -1.82%
LLhits 36,143| 34,700 -3.99%
RamHits 2,323| 3,207 +38.05%
TotalRW 3,088,218| 3,032,284 -1.81%
compile_demo_art_iai::compile_group::compile_to_proto with_setup_3:load_from_name(parametric-dunescape)
Instructions: 14,467,730 (master) -> 12,557,721 (HEAD) : $$\color{lime}-13.20\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 187,083| 155,288 -17.00%
D1mw 66,536| 50,902 -23.50%
DLmr 67| 43 -35.82%
DLmw 16,966| 11,937 -29.64%
Dr 3,472,460| 3,012,438 -13.25%
Dw 2,479,965| 2,145,850 -13.47%
EstimatedCycles 22,051,067| 19,000,887 -13.83%
I1mr 19,949| 18,887 -5.32%
ILmr 855| 839 -1.87%
Ir 14,467,730| 12,557,721 -13.20%
L1hits 20,146,587| 17,490,932 -13.18%
LLhits 255,680| 212,258 -16.98%
RamHits 17,888| 12,819 -28.34%
TotalRW 20,420,155| 17,716,009 -13.24%
compile_demo_art_iai::compile_group::compile_to_proto with_setup_4:load_from_name(red-dress)
Instructions: 30,717,005 (master) -> 30,054,384 (HEAD) : $$\color{lime}-2.16\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 392,646| 382,024 -2.71%
D1mw 132,150| 126,035 -4.63%
DLmr 42,472| 40,942 -3.60%
DLmw 63,886| 62,976 -1.42%
Dr 7,381,918| 7,223,312 -2.15%
Dw 5,230,397| 5,116,029 -2.19%
EstimatedCycles 48,846,148| 47,763,495 -2.22%
I1mr 50,171| 48,436 -3.46%
ILmr 874| 875 +0.11%
Ir 30,717,005| 30,054,384 -2.16%
L1hits 42,754,353| 41,837,230 -2.15%
LLhits 467,735| 451,702 -3.43%
RamHits 107,232| 104,793 -2.27%
TotalRW 43,329,320| 42,393,725 -2.16%
compile_demo_art_iai::compile_group::compile_to_proto with_setup_5:load_from_name(valley-of-spires)
Instructions: 19,067,735 (master) -> 19,068,291 (HEAD) : $$\color{red}+0.00\%$$
Detailed metrics
Baselines: master| HEAD
D1mr 235,942| 234,843 -0.47%
D1mw 76,338| 76,866 +0.69%
DLmr 12,420| 11,591 -6.67%
DLmw 28,828| 25,770 -10.61%
Dr 4,604,301| 4,605,228 +0.02%
Dw 3,256,019| 3,256,538 +0.02%
EstimatedCycles 29,575,545| 29,455,115 -0.41%
I1mr 34,375| 33,543 -2.42%
ILmr 781| 774 -0.90%
Ir 19,067,735| 19,068,291 +0.00%
L1hits 26,581,400| 26,584,805 +0.01%
LLhits 304,626| 307,117 +0.82%
RamHits 42,029| 38,135 -9.27%
TotalRW 26,928,055| 26,930,057 +0.01%
Please resolve conflicts, thanks!
Unfortunately, in my testing, this doesn't seem to work very well in even the simple case of un-splitting a path. It also seems to fail quite badly when one of the segment ends is a zero-length handle.