BRepExtrema_DistShapeShape wire intesections and face cut performance?

Use OCCT to iteratively calculate machined material to calculate a tool path for CAM module in FreCAD. As many iterations is needed performance is rather important. First try take long time to calculate.

Algorithm:
1. Calculate intersection point between tool represented by a TopoDS_Wire and outline of stock material represented by a TopoDS_Wire from the TopoDS_Face representing material. Use BRepExtrema_DistShapeShape for this but found it take quite long time to make the calculations of the intersections then quite many iterations are needed.
2. Then tool position is updated.
3. Then a cut between stock material represented by a TodoDS_Face and tool represented by a TopoDS_Face is done. Stock material is updated and it goes back to 1. again until desired shape i reached. This is a rough description without all details.

I found BRepExtrema_DistShapeShape is a lot more time consuming than cut between faces. Not sure but guess the interference points between the shapes is calculated then doing the cut between TopoDS_Face and in such case copy this function/class and doing the changes to make both things at once might be an option.
Another option might be Geom2d_Geometry as shapes are two dimensional so guess calculations will be faster. As I understand it there is however neither wires nor face using Geom2d_Geometry. Implementing wires collecting Geom2d_Geometry in for example linked lists might be rather straightforward. Intersection points between two such Geom2d_Geometry should also be straight forward. Cut between faces is however harder even though the intersection do help a little bit wire need to be cut, rebuilt with other shape and interior wires deleted.