<i18n dev> RFR: 8300818: Reduce complexity of padding with DateTimeFormatter [v2]
Sergey Tsypanov
stsypanov at openjdk.org
Sun Jan 22 13:31:05 UTC 2023
On Sun, 22 Jan 2023 11:36:34 GMT, Claes Redestad <redestad at openjdk.org> wrote:
>> Sergey Tsypanov has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains two additional commits since the last revision:
>>
>> - Merge branch 'master' into dtfb
>> - Improve padding of DateTimeFormatter
>
> src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java line 2611:
>
>> 2609: "Cannot print as output of " + len + " characters exceeds pad width of " + padWidth);
>> 2610: }
>> 2611: buf.insert(preLen, String.valueOf(padChar).repeat(padWidth - len));
>
> Have you checked with a microbenchmark that this added allocation can be elided by JITs and that there's a significant speed-up with your changes? I don't have the necessary domain expertise to assert anything here but I suspect padding widths are typically short. Such as 2 or 4 (for day/month and year fields) so a micro should examine there's no regression for little to no padding. Unlike the original code you call `insert` even if `padWidth - len == 0`. This might be optimized away by JITs, but it'd be good to verify which is best.
The modified code is called only when a user explicitly calls `padNext(int, char)`, i.e. if I modified the example snippet as
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
.appendLiteral("Date:")
//.padNext(20, ' ')
.append(DateTimeFormatter.ISO_DATE)
.toFormatter();
String text = dtf.format(LocalDateTime.now());
there's no regression.
Right now I cannot build ad-hoc JDK with my changes and check it with JMH, so I'd convert this to draft until I can verify it
-------------
PR: https://git.openjdk.org/jdk/pull/12131
More information about the i18n-dev
mailing list