1 /*
2  * Copyright (c) 2012, 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 j2dbench.Group;
43 import j2dbench.Result;
44 import j2dbench.TestEnvironment;
45 import java.awt.color.ColorSpace;
46 
47 public class DataConversionTests extends ColorConversionTests {
48 
49     protected static Group dataConvRoot;
50 
init()51     public static void init() {
52         dataConvRoot = new Group(colorConvRoot, "data", "Data Conversoion Tests");
53 
54         new FromRGBTest();
55         new ToRGBTest();
56         new FromCIEXYZTest();
57         new ToCIEXYZTest();
58     }
59 
DataConversionTests(Group parent, String nodeName, String description)60     public DataConversionTests(Group parent, String nodeName, String description) {
61         super(parent, nodeName, description);
62     }
63 
64     protected static class Context {
65 
66         ColorSpace cs;
67         int numComponents;
68         float[] val;
69         float[] rgb;
70         float[] cie;
71         TestEnvironment env;
72         Result res;
73 
Context(TestEnvironment env, Result result, ColorSpace cs)74         public Context(TestEnvironment env, Result result, ColorSpace cs) {
75             this.cs = cs;
76             this.env = env;
77             this.res = result;
78 
79             numComponents = cs.getNumComponents();
80 
81             val = new float[numComponents];
82 
83             for (int i = 0; i < numComponents; i++) {
84                 float min = cs.getMinValue(i);
85                 float max = cs.getMaxValue(i);
86 
87                 val[i] = 0.5f * (max - min);
88             }
89 
90             rgb = new float[]{0.5f, 0.5f, 0.5f};
91             cie = new float[]{0.5f, 0.5f, 0.5f};
92         }
93     }
94 
95     @Override
initTest(TestEnvironment env, Result result)96     public Object initTest(TestEnvironment env, Result result) {
97         ColorSpace cs = getColorSpace(env);
98         return new Context(env, result, cs);
99     }
100 
101     @Override
cleanupTest(TestEnvironment te, Object o)102     public void cleanupTest(TestEnvironment te, Object o) {
103     }
104 
105     private static class FromRGBTest extends DataConversionTests {
106 
FromRGBTest()107         public FromRGBTest() {
108             super(dataConvRoot,
109                     "fromRGB",
110                     "ColorSpace.fromRGB()");
111         }
112 
runTest(Object ctx, int numReps)113         public void runTest(Object ctx, int numReps) {
114             final Context ictx = (Context) ctx;
115             final ColorSpace cs = ictx.cs;
116 
117             final float[] rgb = ictx.rgb;
118             do {
119                 try {
120                     cs.fromRGB(rgb);
121                 } catch (Exception e) {
122                     e.printStackTrace();
123                 }
124             } while (--numReps >= 0);
125         }
126     }
127 
128     private static class FromCIEXYZTest extends DataConversionTests {
129 
FromCIEXYZTest()130         public FromCIEXYZTest() {
131             super(dataConvRoot,
132                     "fromCIEXYZ",
133                     "ColorSpace.fromCIEXYZ()");
134         }
135 
runTest(Object ctx, int numReps)136         public void runTest(Object ctx, int numReps) {
137             final Context ictx = (Context) ctx;
138             final ColorSpace cs = ictx.cs;
139 
140             final float[] val = ictx.cie;
141             do {
142                 try {
143                     cs.fromCIEXYZ(val);
144                 } catch (Exception e) {
145                     e.printStackTrace();
146                 }
147             } while (--numReps >= 0);
148         }
149     }
150 
151     private static class ToCIEXYZTest extends DataConversionTests {
152 
ToCIEXYZTest()153         public ToCIEXYZTest() {
154             super(dataConvRoot,
155                     "toCIEXYZ",
156                     "ColorSpace.toCIEXYZ()");
157         }
158 
runTest(Object ctx, int numReps)159         public void runTest(Object ctx, int numReps) {
160             final Context ictx = (Context) ctx;
161             final ColorSpace cs = ictx.cs;
162 
163             final float[] val = ictx.val;
164 
165             do {
166                 try {
167                     cs.toCIEXYZ(val);
168                 } catch (Exception e) {
169                     e.printStackTrace();
170                 }
171             } while (--numReps >= 0);
172         }
173     }
174 
175     private static class ToRGBTest extends DataConversionTests {
176 
ToRGBTest()177         public ToRGBTest() {
178             super(dataConvRoot,
179                     "toRGB",
180                     "ColorSpace.toRGB()");
181         }
182 
runTest(Object ctx, int numReps)183         public void runTest(Object ctx, int numReps) {
184             final Context ictx = (Context) ctx;
185             final ColorSpace cs = ictx.cs;
186 
187             final float[] val = ictx.val;
188 
189             do {
190                 try {
191                     cs.toRGB(val);
192                 } catch (Exception e) {
193                     e.printStackTrace();
194                 }
195             } while (--numReps >= 0);
196         }
197     }
198 }
199