Reviewers: Dan Eble, Message: The percentages between different have looked fairly repeatable, but as a less invasive measure is to just tweak the final 'if'
Description: make_draw_bezier_boxes: save work if thickness == 0.0 This drop make_draw_bezier_boxes from 0.73% to 0.44% in the profile for MSDM Please review this at https://codereview.appspot.com/551730043/ Affected files (+24, -5 lines): M lily/stencil-integral.cc Index: lily/stencil-integral.cc diff --git a/lily/stencil-integral.cc b/lily/stencil-integral.cc index 189cdcdc881ec0c1c417a4a783b4675446ec4207..e43bbee6cd14756bcf0b6e4a575c68b3abd4a136 100644 --- a/lily/stencil-integral.cc +++ b/lily/stencil-integral.cc @@ -480,12 +480,20 @@ make_draw_bezier_boxes (vector<Box> &boxes, + (temp3 - temp2).length ()) / QUANTIZATION_UNIT); - Offset d0 = curve.dir_at_point (0.0); - Offset d1 = curve.dir_at_point (1.0); + Offset d0; + Offset d1; + + Offset normal; + if (th > 0) + { + d0 = curve.dir_at_point (0.0); + normal = get_normal ((th / 2) * d0); + } - Offset normal = get_normal ((th / 2) * d0); for (DOWN_and_UP (d)) { + if (th == 0.0 && d == UP) + break; points[d].push_back ( scm_transform (trans, curve.control_[0] + d * normal)); } @@ -497,14 +505,23 @@ make_draw_bezier_boxes (vector<Box> &boxes, for (DOWN_and_UP (d)) { + if (th == 0.0 && d == UP) + break; points[d].push_back ( scm_transform (trans, curve.curve_point (pt) + d * norm)); } } - normal = get_normal ((th / 2) * d1); + if (th > 0) + { + d1 = curve.dir_at_point (1.0); + normal = get_normal ((th / 2) * d1); + } + for (DOWN_and_UP (d)) { + if (th == 0.0 && d == UP) + break; points[d].push_back ( scm_transform (trans, curve.control_[3] + d * normal)); } @@ -514,13 +531,15 @@ make_draw_bezier_boxes (vector<Box> &boxes, Box b; for (DOWN_and_UP (d)) { + if (th == 0.0 && d == UP) + break; b.add_point (points[d][i]); b.add_point (points[d][i + 1]); } boxes.push_back (b); } - if (th >= 0) + if (th > 0) { // beg line cap create_path_cap (boxes, buildings, trans, curve.control_[0], th / 2, -d0);