8296905: Replace the native LCMS#getProfileID() method with the accessor

Reviewed-by: prr
This commit is contained in:
Sergey Bylokhov 2022-11-30 01:00:44 +00:00
parent e10778acce
commit defe0607e3
5 changed files with 42 additions and 38 deletions
src/java.desktop/share
classes
native/liblcms

@ -52,6 +52,7 @@ import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.StringTokenizer;
import sun.awt.AWTAccessor;
import sun.java2d.cmm.CMSManager;
import sun.java2d.cmm.PCMM;
import sun.java2d.cmm.Profile;
@ -134,6 +135,10 @@ public sealed class ICC_Profile implements Serializable
"GRAY.pf", ColorSpace.TYPE_GRAY, 1, CLASS_DISPLAY));
}
static {
AWTAccessor.setICC_ProfileAccessor(ICC_Profile::cmmProfile);
}
/**
* Profile class is input.
*/

@ -27,6 +27,7 @@ package sun.awt;
import javax.accessibility.AccessibleContext;
import java.awt.*;
import java.awt.color.ICC_Profile;
import java.awt.event.FocusEvent.Cause;
import java.awt.dnd.DragSourceContext;
import java.awt.dnd.DropTargetContext;
@ -50,6 +51,8 @@ import java.util.ResourceBundle;
import java.util.Vector;
import javax.accessibility.AccessibleBundle;
import sun.java2d.cmm.Profile;
/**
* The AWTAccessor utility class.
* The main purpose of this class is to enable accessing
@ -67,6 +70,16 @@ public final class AWTAccessor {
private AWTAccessor() {
}
/*
* An interface of accessor for the java.awt.color.ICC_Profile class.
*/
public interface ICC_ProfileAccessor {
/*
* Activates and returns the deferred standard profiles.
*/
Profile cmmProfile(ICC_Profile profile);
}
/*
* An interface of accessor for the java.awt.Component class.
*/
@ -831,6 +844,7 @@ public final class AWTAccessor {
* Accessor instances are initialized in the static initializers of
* corresponding AWT classes by using setters defined below.
*/
private static ICC_ProfileAccessor iccProfileAccessor;
private static ComponentAccessor componentAccessor;
private static ContainerAccessor containerAccessor;
private static WindowAccessor windowAccessor;
@ -863,6 +877,25 @@ public final class AWTAccessor {
private static DragSourceContextAccessor dragSourceContextAccessor;
private static DropTargetContextAccessor dropTargetContextAccessor;
/*
* Set an accessor object for the java.awt.color.ICC_Profile class.
*/
public static void setICC_ProfileAccessor(ICC_ProfileAccessor ipa) {
iccProfileAccessor = ipa;
}
/*
* Retrieve the accessor object for the java.awt.color.ICC_Profile class.
*/
public static ICC_ProfileAccessor getICC_ProfileAccessor() {
var access = iccProfileAccessor;
if (access == null) {
ensureClassInitialized(ICC_Profile.class);
access = iccProfileAccessor;
}
return access;
}
/*
* Set an accessor object for the java.awt.Component class.
*/

@ -53,7 +53,7 @@ final class LCMS implements PCMM {
return null;
}
private static LCMSProfile getLcmsProfile(Profile p) {
static LCMSProfile getLcmsProfile(Profile p) {
if (p instanceof LCMSProfile) {
return (LCMSProfile)p;
}
@ -95,8 +95,6 @@ final class LCMS implements PCMM {
}
}
static synchronized native LCMSProfile getProfileID(ICC_Profile profile);
/* Helper method used from LCMSColorTransfrom */
static long createTransform(
LCMSProfile[] profiles, int renderingIntent,

@ -46,6 +46,7 @@ import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import java.lang.ref.Reference;
import sun.awt.AWTAccessor;
import sun.java2d.cmm.ColorTransform;
import static sun.java2d.cmm.lcms.LCMSImageLayout.ImageLayoutException;
@ -85,9 +86,10 @@ final class LCMSTransform implements ColorTransform {
* @param profiles the list of color profiles
*/
LCMSTransform(int renderingIntent, ICC_Profile... profiles) {
var acc = AWTAccessor.getICC_ProfileAccessor();
lcmsProfiles = new LCMSProfile[profiles.length];
for (int i = 0; i < profiles.length; i++) {
lcmsProfiles[i] = LCMS.getProfileID(profiles[i]);
lcmsProfiles[i] = LCMS.getLcmsProfile(acc.cmmProfile(profiles[i]));
profiles[i].getNumComponents(); // force header initialization
}
this.renderingIntent = (renderingIntent == ColorTransform.Any) ?

@ -557,40 +557,6 @@ JNIEXPORT void JNICALL Java_sun_java2d_cmm_lcms_LCMS_colorConvert
releaseILData(env, outputBuffer, dstDType, dstData, 0);
}
/*
* Class: sun_java2d_cmm_lcms_LCMS
* Method: getProfileID
* Signature: (Ljava/awt/color/ICC_Profile;)Lsun/java2d/cmm/lcms/LCMSProfile;
*/
JNIEXPORT jobject JNICALL Java_sun_java2d_cmm_lcms_LCMS_getProfileID
(JNIEnv *env, jclass cls, jobject pf)
{
if (pf == NULL) {
return NULL;
}
jclass pcls = (*env)->GetObjectClass(env, pf);
if (pcls == NULL) {
return NULL;
}
jmethodID mid = (*env)->GetMethodID(env, pcls, "cmmProfile",
"()Lsun/java2d/cmm/Profile;");
if (mid == NULL) {
return NULL;
}
jobject cmmProfile = (*env)->CallObjectMethod(env, pf, mid);
if ((*env)->ExceptionCheck(env)) {
return NULL;
}
jclass lcmsPCls = (*env)->FindClass(env, "sun/java2d/cmm/lcms/LCMSProfile");
if (lcmsPCls == NULL) {
return NULL;
}
if ((*env)->IsInstanceOf(env, cmmProfile, lcmsPCls)) {
return cmmProfile;
}
return NULL;
}
static cmsBool _getHeaderInfo(cmsHPROFILE pf, jbyte* pBuffer, jint bufferSize)
{
cmsUInt32Number pfSize = 0;