On Fri, Jun 23, 2023 at 10:07 AM Mark Thomas <ma...@apache.org> wrote:
>
> On 23/06/2023 08:34, Rémy Maucherat wrote:
> > On Thu, Jun 22, 2023 at 8:55 PM <ma...@apache.org> wrote:
> >>
> >> This is an automated email from the ASF dual-hosted git repository.
> >>
> >> markt pushed a commit to branch main
> >> in repository https://gitbox.apache.org/repos/asf/tomcat.git
> >>
> >>
> >> The following commit(s) were added to refs/heads/main by this push:
> >>       new 944951302e Add control of byte decoding errors to ByteChunk and 
> >> StringCache
> >> 944951302e is described below
> >>
> >> commit 944951302e2f478879411dbff353f5818ad44121
> >> Author: Mark Thomas <ma...@apache.org>
> >> AuthorDate: Wed Jun 14 12:25:21 2023 +0100
> >>
> >>      Add control of byte decoding errors to ByteChunk and StringCache
>
> <snip/>
>
> >> +    /**
> >> +     * Converts the current content of the byte buffer to a String using 
> >> the configured character set.
> >> +     *
> >> +     * @param malformedInputAction      Action to take if the input is 
> >> malformed
> >> +     * @param unmappableCharacterAction Action to take if a byte sequence 
> >> can't be mapped to a character
> >> +     *
> >> +     * @return The result of converting the bytes to a String
> >> +     *
> >> +     * @throws CharacterCodingException If an error occurs during the 
> >> conversion
> >> +     */
> >> +    public String toStringInternal(CodingErrorAction 
> >> malformedInputAction, CodingErrorAction unmappableCharacterAction)
> >> +            throws CharacterCodingException {
> >>           if (charset == null) {
> >>               charset = DEFAULT_CHARSET;
> >>           }
> >>           // new String(byte[], int, int, Charset) takes a defensive copy 
> >> of the
> >>           // entire byte array. This is expensive if only a small subset 
> >> of the
> >>           // bytes will be used. The code below is from Apache Harmony.
> >> -        CharBuffer cb = charset.decode(ByteBuffer.wrap(buff, start, end - 
> >> start));
> >> +        CharBuffer cb = 
> >> charset.newDecoder().onMalformedInput(malformedInputAction)
> >> +                
> >> .onUnmappableCharacter(unmappableCharacterAction).decode(ByteBuffer.wrap(buff,
> >>  start, end - start));
> >
> > Looking at the code, this is not equivalent, like charset.decode uses
> > thread locals and so on. I will make a change so that charset.decode
> > is used if is REPLACE REPLACE, if you don't mind. I'm pretty sure
> > benching would show no performance difference though.
>
> Seems reasonable to me.

BTW, for actual microbenchmarks, the OpenJDK people recommend using
https://github.com/openjdk/jmh rather than whatever hack. Does anyone
have any experience with it ?
Since it is Maven based, microbenchmarks would need to be added in a
separate mavenized location rather than the testsuite.

Rémy

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to