Mercurial > hg > openjdk > jigsaw > jdk
changeset 7260:03ee8c648624
8011622: Use lcms as the default color management module in jdk8
Reviewed-by: prr, vadim
author | bae |
---|---|
date | Mon, 15 Apr 2013 18:10:55 +0400 |
parents | b59b1f5a98dd |
children | 271d5bf7d61f |
files | make/sun/cmm/Makefile make/sun/cmm/kcms/Makefile make/sun/cmm/lcms/Makefile makefiles/CompileNativeLibraries.gmk makefiles/CopyIntoClasses.gmk src/share/classes/sun/java2d/cmm/CMMServiceProvider.java src/share/classes/sun/java2d/cmm/CMSManager.java src/share/classes/sun/java2d/cmm/lcms/LCMS.java src/share/classes/sun/java2d/cmm/lcms/LcmsServiceProvider.java src/share/classes/sun/java2d/cmm/lcms/META-INF/services/sun.java2d.cmm.CMMServiceProvider src/share/classes/sun/java2d/cmm/lcms/META-INF/services/sun.java2d.cmm.PCMM |
diffstat | 11 files changed, 121 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/make/sun/cmm/Makefile Mon Apr 15 16:57:01 2013 +0400 +++ b/make/sun/cmm/Makefile Mon Apr 15 18:10:55 2013 +0400 @@ -27,8 +27,9 @@ PRODUCT = sun include $(BUILDDIR)/common/Defs.gmk +SUBDIRS += lcms + ifdef OPENJDK - SUBDIRS += lcms ICCPROFILE_SRC_DIR = $(SHARE_SRC)/lib/cmm/lcms else # !OPENJDK SUBDIRS += kcms
--- a/make/sun/cmm/kcms/Makefile Mon Apr 15 16:57:01 2013 +0400 +++ b/make/sun/cmm/kcms/Makefile Mon Apr 15 18:10:55 2013 +0400 @@ -57,7 +57,7 @@ SERVICEDIR = $(CLASSBINDIR)/META-INF/services FILES_copy = \ - $(SERVICEDIR)/sun.java2d.cmm.PCMM + $(SERVICEDIR)/sun.java2d.cmm.CMMServiceProvider build: copy-files
--- a/make/sun/cmm/lcms/Makefile Mon Apr 15 16:57:01 2013 +0400 +++ b/make/sun/cmm/lcms/Makefile Mon Apr 15 18:10:55 2013 +0400 @@ -58,7 +58,7 @@ SERVICEDIR = $(CLASSBINDIR)/META-INF/services FILES_copy = \ - $(SERVICEDIR)/sun.java2d.cmm.PCMM + $(SERVICEDIR)/sun.java2d.cmm.CMMServiceProvider build: copy-files
--- a/makefiles/CompileNativeLibraries.gmk Mon Apr 15 16:57:01 2013 +0400 +++ b/makefiles/CompileNativeLibraries.gmk Mon Apr 15 18:10:55 2013 +0400 @@ -1213,7 +1213,6 @@ ########################################################################################## -ifdef OPENJDK # TODO: Update awt lib path when awt is converted $(eval $(call SetupNativeCompilation,BUILD_LIBLCMS,\ LIBRARY:=lcms,\ @@ -1246,7 +1245,6 @@ BUILD_LIBRARIES += $(BUILD_LIBLCMS) $(BUILD_LIBLCMS) : $(BUILD_LIBAWT) -endif ##########################################################################################
--- a/makefiles/CopyIntoClasses.gmk Mon Apr 15 16:57:01 2013 +0400 +++ b/makefiles/CopyIntoClasses.gmk Mon Apr 15 18:10:55 2013 +0400 @@ -185,10 +185,10 @@ ifdef OPENJDK SRC_SERVICES_FILES:=$(filter-out %sun/dc/META-INF/services/sun.java2d.pipe.RenderingEngine,$(SRC_SERVICES_FILES)) - SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/kcms/META-INF/services/sun.java2d.cmm.PCMM,$(SRC_SERVICES_FILES)) + SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/kcms/META-INF/services/sun.java2d.cmm.CMMServiceProvider,$(SRC_SERVICES_FILES)) else SRC_SERVICES_FILES:=$(filter-out %sun/java2d/pisces/META-INF/services/sun.java2d.pipe.RenderingEngine,$(SRC_SERVICES_FILES)) - SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/lcms/META-INF/services/sun.java2d.cmm.PCMM,$(SRC_SERVICES_FILES)) + SRC_SERVICES_FILES:=$(filter-out %sun/java2d/cmm/lcms/META-INF/services/sun.java2d.cmm.CMMServiceProvider,$(SRC_SERVICES_FILES)) endif # The number of services files are relatively few. If the increase in numbers, then
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/java2d/cmm/CMMServiceProvider.java Mon Apr 15 18:10:55 2013 +0400 @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.java2d.cmm; + +public abstract class CMMServiceProvider { + public final PCMM getColorManagementModule() { + if (CMSManager.canCreateModule()) { + return getModule(); + } + return null; + } + + protected abstract PCMM getModule(); +}
--- a/src/share/classes/sun/java2d/cmm/CMSManager.java Mon Apr 15 16:57:01 2013 +0400 +++ b/src/share/classes/sun/java2d/cmm/CMSManager.java Mon Apr 15 18:10:55 2013 +0400 @@ -52,26 +52,29 @@ return cmmImpl; } - cmmImpl = (PCMM)AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - String cmmClass = System.getProperty( - "sun.java2d.cmm", "sun.java2d.cmm.kcms.CMM"); + CMMServiceProvider spi = AccessController.doPrivileged( + new PrivilegedAction<CMMServiceProvider>() { + public CMMServiceProvider run() { + String cmmClass = System.getProperty( + "sun.java2d.cmm", "sun.java2d.cmm.lcms.LcmsServiceProvider"); - ServiceLoader<PCMM> cmmLoader - = ServiceLoader.loadInstalled(PCMM.class); + ServiceLoader<CMMServiceProvider> cmmLoader + = ServiceLoader.loadInstalled(CMMServiceProvider.class); - PCMM service = null; + CMMServiceProvider spi = null; - for (PCMM cmm : cmmLoader) { - service = cmm; + for (CMMServiceProvider cmm : cmmLoader) { + spi = cmm; if (cmm.getClass().getName().equals(cmmClass)) { break; } } - return service; + return spi; } }); + cmmImpl = spi.getColorManagementModule(); + if (cmmImpl == null) { throw new CMMException("Cannot initialize Color Management System."+ "No CM module found"); @@ -86,6 +89,10 @@ return cmmImpl; } + static synchronized boolean canCreateModule() { + return (cmmImpl == null); + } + /* CMM trace routines */ public static class CMMTracer implements PCMM {
--- a/src/share/classes/sun/java2d/cmm/lcms/LCMS.java Mon Apr 15 16:57:01 2013 +0400 +++ b/src/share/classes/sun/java2d/cmm/lcms/LCMS.java Mon Apr 15 18:10:55 2013 +0400 @@ -148,22 +148,32 @@ public static native void initLCMS(Class Trans, Class IL, Class Pf); - /* the class initializer which loads the CMM */ - static { + private LCMS() {}; + + private static LCMS theLcms = null; + + static synchronized PCMM getModule() { + if (theLcms != null) { + return theLcms; + } + java.security.AccessController.doPrivileged( - new java.security.PrivilegedAction() { - public Object run() { - /* We need to load awt here because of usage trace and - * disposer frameworks - */ - System.loadLibrary("awt"); - System.loadLibrary("lcms"); - return null; - } - } - ); + new java.security.PrivilegedAction() { + public Object run() { + /* We need to load awt here because of usage trace and + * disposer frameworks + */ + System.loadLibrary("awt"); + System.loadLibrary("lcms"); + return null; + } + }); initLCMS(LCMSTransform.class, LCMSImageLayout.class, ICC_Profile.class); + + theLcms = new LCMS(); + + return theLcms; } private static class TagData {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/sun/java2d/cmm/lcms/LcmsServiceProvider.java Mon Apr 15 18:10:55 2013 +0400 @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package sun.java2d.cmm.lcms; + +import sun.java2d.cmm.CMMServiceProvider; +import sun.java2d.cmm.PCMM; + +public final class LcmsServiceProvider extends CMMServiceProvider { + @Override + protected PCMM getModule() { + return LCMS.getModule(); + } +}