RFR: 8374377: PNGImageDecoder Slow For 8-bit PNGs [v3]
Jeremy Wood
jwood at openjdk.org
Fri Jan 2 02:34:55 UTC 2026
> 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.
Jeremy Wood has updated the pull request incrementally with one additional commit since the last revision:
8374377: test correctness of non-interlaced PNGs too
Also this removes the performance comparison. (As of this writing there's a separate `test/micro/org/openjdk/bench/sun/awt/image/PNGImageDecoder_8bit_uninterlaced.java` file used to demonstrate that this change is more performant.)
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/29004/files
- new: https://git.openjdk.org/jdk/pull/29004/files/c91a1f44..313cf437
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=29004&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=29004&range=01-02
Stats: 118 lines in 1 file changed: 37 ins; 64 del; 17 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
More information about the client-libs-dev
mailing list