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
40package j2dbench.tests.cmm;
41
42import java.awt.color.ColorSpace;
43import java.awt.color.ICC_ColorSpace;
44import java.awt.color.ICC_Profile;
45import java.io.IOException;
46import java.io.InputStream;
47
48import j2dbench.Group;
49import j2dbench.Option;
50import j2dbench.Result;
51import j2dbench.Test;
52import j2dbench.TestEnvironment;
53
54public 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
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
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
135    protected CMMTests(Group parent, String nodeName, String description) {
136        super(parent, nodeName, description);
137        addDependencies(cmmOptRoot, true);
138    }
139
140    public Object initTest(TestEnvironment te, Result result) {
141        throw new UnsupportedOperationException("Not supported yet.");
142    }
143
144    public void runTest(Object o, int i) {
145        throw new UnsupportedOperationException("Not supported yet.");
146    }
147
148    public void cleanupTest(TestEnvironment te, Object o) {
149        throw new UnsupportedOperationException("Not supported yet.");
150    }
151}
152