1 /*
2  * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  *   - Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  *
11  *   - Redistributions in binary form must reproduce the above copyright
12  *     notice, this list of conditions and the following disclaimer in the
13  *     documentation and/or other materials provided with the distribution.
14  *
15  *   - Neither the name of Oracle nor the names of its
16  *     contributors may be used to endorse or promote products derived
17  *     from this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 /*
33  * This source code is provided to illustrate the usage of a given feature
34  * or technique and has been deliberately simplified. Additional steps
35  * required for a production-quality application, such as security checks,
36  * input validation and proper error handling, might not be present in
37  * this sample code.
38  */
39 
40 package j2dbench.tests.cmm;
41 
42 import java.awt.color.ColorSpace;
43 import java.awt.color.ICC_ColorSpace;
44 import java.awt.color.ICC_Profile;
45 import java.io.IOException;
46 import java.io.InputStream;
47 
48 import j2dbench.Group;
49 import j2dbench.Option;
50 import j2dbench.Result;
51 import j2dbench.Test;
52 import j2dbench.TestEnvironment;
53 
54 public class CMMTests extends Test {
55 
56     protected static Group cmmRoot;
57     protected static Group cmmOptRoot;
58     protected static Option csList;
59     protected static Option usePlatformProfiles;
60 
init()61     public static void init() {
62         cmmRoot = new Group("cmm", "Color Management Benchmarks");
63         cmmRoot.setTabbed();
64 
65         cmmOptRoot = new Group(cmmRoot, "opts", "General Options");
66 
67         /*
68         usePlatformProfiles =
69                 new Option.Enable(cmmOptRoot, "csPlatform",
70                         "Use Platform Profiles", false);
71         */
72         int[] colorspaces = new int[] {
73             ColorSpace.CS_sRGB,
74             ColorSpace.CS_GRAY,
75             ColorSpace.CS_LINEAR_RGB,
76             ColorSpace.CS_CIEXYZ
77         };
78 
79         String[] csNames = new String[]{
80             "CS_sRGB",
81             "CS_GRAY",
82             "CS_LINEAR_RGB",
83             "CS_CIEXYZ"
84         };
85 
86         csList = new Option.IntList(cmmOptRoot,
87                 "profiles", "Color Profiles",
88                 colorspaces, csNames, csNames, 0x8);
89 
90         ColorConversionTests.init();
91         ProfileTests.init();
92     }
93 
getColorSpace(TestEnvironment env)94     protected static ColorSpace getColorSpace(TestEnvironment env) {
95         ColorSpace cs;
96         boolean usePlatform = true; //(Boolean)env.getModifier(usePlatformProfiles);
97 
98         int cs_code = env.getIntValue(csList);
99         if (usePlatform) {
100             cs = ColorSpace.getInstance(cs_code);
101         } else {
102             String resource = "profiles/";
103             switch (cs_code) {
104                 case ColorSpace.CS_CIEXYZ:
105                     resource += "CIEXYZ.pf";
106                     break;
107                 case ColorSpace.CS_GRAY:
108                     resource += "GRAY.pf";
109                     break;
110                 case ColorSpace.CS_LINEAR_RGB:
111                     resource += "LINEAR_RGB.pf";
112                     break;
113                 case ColorSpace.CS_PYCC:
114                     resource += "PYCC.pf";
115                     break;
116                 case ColorSpace.CS_sRGB:
117                     resource += "sRGB.pf";
118                     break;
119                 default:
120                     throw new RuntimeException("Unknown color space: " + cs_code);
121             }
122 
123             try {
124                 InputStream is = CMMTests.class.getResourceAsStream(resource);
125                 ICC_Profile p = ICC_Profile.getInstance(is);
126 
127                 cs = new ICC_ColorSpace(p);
128             } catch (IOException e) {
129                 throw new RuntimeException("Unable load profile from resource " + resource, e);
130             }
131         }
132         return cs;
133     }
134 
CMMTests(Group parent, String nodeName, String description)135     protected CMMTests(Group parent, String nodeName, String description) {
136         super(parent, nodeName, description);
137         addDependencies(cmmOptRoot, true);
138     }
139 
initTest(TestEnvironment te, Result result)140     public Object initTest(TestEnvironment te, Result result) {
141         throw new UnsupportedOperationException("Not supported yet.");
142     }
143 
runTest(Object o, int i)144     public void runTest(Object o, int i) {
145         throw new UnsupportedOperationException("Not supported yet.");
146     }
147 
cleanupTest(TestEnvironment te, Object o)148     public void cleanupTest(TestEnvironment te, Object o) {
149         throw new UnsupportedOperationException("Not supported yet.");
150     }
151 }
152