On Thu, 5 Dec 2024 18:22:27 GMT, Daniel Gredler <[email protected]> wrote:

>> When `LineBreakMeasurer` is used to break text into lines, internally it 
>> uses `TextMeasurer` and `TextLine` to do the job. In the common case, 
>> `TextLine.getComponents(...)` allocates a `TextLineComponent[]` with room 
>> for a single array entry, and passes it to 
>> `TextLine.createComponentsOnRun(...)`, which fills the array and returns it, 
>> optionally resizing to a larger array if necessary, after which the array is 
>> resized back down to actual size (if necessary).
>> 
>> Unfortunately `TextLine.createComponentsOnRun(...)` is too eager in 
>> allocating larger arrays. In the most common case of a single component, 
>> this means that a single-element array is allocated, then a 9-element array 
>> is allocated (via `expandArray(...)`), and then another single-element array 
>> is allocated (to shrink the array back to actual size). Only one array 
>> allocation is necessary in this common case, and no array copying is needed.
>
> Daniel Gredler has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Fix second array expansion site

LGTM. Ran awt/font and java/awt/font/LineBreakMeasurer tests with fix and they 
work as expected.

@gredler Missed mentioning it earlier, copyright year needs to be updated for 
TextLine.java

-------------

Marked as reviewed by honkar (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/22288#pullrequestreview-2482750639

Reply via email to