Integrated: 8294488: Delete KCMS transforms wrappers

Sergey Bylokhov serb at openjdk.org
Fri Nov 4 21:01:09 UTC 2022


On Wed, 28 Sep 2022 03:12:55 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:

> This is a request to cleanup the shared code for the colors conversions. That code still uses some wrappers which can be simplified and/or deleted after KCMS removal. For example, each conversion from one color space to another creates 3 wrappers - for the first color profile, the second color profile, and one to combine the first two. But for the lcms library we only need the list of color profiles and rendering intent -> only one transform object can be used.
> 
> The new constructor for the LCMSTransform is [added](https://github.com/openjdk/jdk/pull/10459/files#diff-7448ea8346eb08c6ec1a518e3c3399d7d078a514c07956ee7e8e2b5be3d082e1R77) and now used everywhere:
> `LCMSTransform(int renderingIntent, ICC_Profile... profiles)` 
> It will wrap the `cmsCreateMultiprofileTransform` [function ](https://github.com/openjdk/jdk/pull/10459/files#diff-eed6ddb15e9c5bdab9fc3b3930d5d959966165d9622ddd293e8572489adea98bR202) in LCMS library:
> 
> I tried to preserve the current behavior, and as a result, two "workarounds" are used for the next bugs.
>  * [JDK-8216369](https://bugs.openjdk.org/browse/JDK-8216369): after the cleanup it became obvious that we use a hardcoded value for the first rendering [intent](https://github.com/openjdk/jdk/pull/10459/files#diff-e3d6eea060882cab00827c00e1a83b0e0a5b2a31fa9a9aa2122841bbd57c4a6dR473). There is a code to fetch the intent from the color profile but I postponed use it for now because some of our built-in profiles use different default intents.
>  * [JDK-8272860](https://bugs.openjdk.org/browse/JDK-8272860): the old code always fetched some information from the color profile header as result we cache the headers for any profiles we used. This cache workaround the JDK-8272860 while the direct access to the profile via LCMS library could fail. The new code intentionally caches the [header](https://github.com/openjdk/jdk/pull/10459/files#diff-7448ea8346eb08c6ec1a518e3c3399d7d078a514c07956ee7e8e2b5be3d082e1R91).
> 
> Notes:
> * The old wrappers used a rendering intent for each intermediate transform, the LCMS use only one intent
> * The old wrappers could throw the cmm exception if the rendering intent was not supported. The LCMS ignores unsupported intents and uses some [default](https://github.com/LuaDist/lcms/blob/master/doc/TUTORIAL.TXT#L1094)
>  * The old wrappers had a way to specify the input and output profiles, the LCMS library uses the first profile as input and the last profile as output. Those parameters are [removed](https://github.com/openjdk/jdk/pull/10459/files#diff-81b49f067b32296497e9e727bda25efe0b7f84fb2c05645eb6b272bfc32469f1L38)
>  * If at some point the new CMS library will be added it will be easy to integrate it using XXCMS plugin, instead of using some specific library logic in the shared code

This pull request has now been integrated.

Changeset: d8573b2c
Author:    Sergey Bylokhov <serb at openjdk.org>
Committer: Phil Race <prr at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/d8573b2c5bd235a3cc6442b6bda8d1bd2da495a0
Stats:     282 lines in 9 files changed: 18 ins; 175 del; 89 mod

8294488: Delete KCMS transforms wrappers

Reviewed-by: prr

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

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



More information about the client-libs-dev mailing list