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.

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

Commit messages:
 - 8374377: Use System.arraycopy when possible

Changes: https://git.openjdk.org/jdk/pull/29004/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=29004&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8374377
  Stats: 291 lines in 2 files changed: 287 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/29004.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/29004/head:pull/29004

PR: https://git.openjdk.org/jdk/pull/29004

Reply via email to