On Sun, 28 Dec 2025 02:22:16 GMT, Jeremy Wood <[email protected]> wrote:

> When decoding an uninterlaced 8-bit PNG image, the PNGImageDecoder is 
> basically copying one byte at a time.
> 
> This PR uses System.arraycopy instead, and it shows approx a 10% improvement.
> 
> This graph shows the time it takes different decoders to convert a byte array 
> into a BufferedImage as the size of the PNG image increases:
> 
> <img width="596" height="366" alt="Screenshot 2025-12-27 at 9 14 19 PM" 
> src="https://github.com/user-attachments/assets/73583cb2-eda0-47a8-b818-735a1835f1e8";
>  />
> 
> (This originally came to my attention when looking at an image in Java 1.8. 
> There the ImageConsumer model took approx 400% longer than ImageIO. I was 
> happy to see in recent JDKs that gap narrowed significantly, but there was 
> still a noticeable 10% discrepancy.)
> 
> I haven't tried submitting a performance enhancement PR before; I'm not sure 
> if this issue meets this group's threshold for being worth addressing. And if 
> it does: I'm not sure how to structure a unit test for it.

Do you have a JMH test for the attached graph that can be used to replicate 
locally? If you've not used JMH before, or haven't used it in the context of 
OpenJDK, you can check existing performance tests in the `test/micro` 
directory, or see this example (not part of OpenJDK, just something I've used 
in the past to test things locally): 
https://gist.github.com/gredler/e8ff9d52440cd103cd5b7766defff5b8

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

PR Comment: https://git.openjdk.org/jdk/pull/29004#issuecomment-3694911088

Reply via email to