History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/sun/java2d/loops/GraphicsPrimitiveProxy.java (1 of 18352 files). Show all

Unified · Split

java/pkg/sun/java2d/loops/GraphicsPrimitiveProxy.java+114−0
@@ -0,0 +1,114 @@
1+/*
2+ * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
3+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+ *
5+ * This code is free software; you can redistribute it and/or modify it
6+ * under the terms of the GNU General Public License version 2 only, as
7+ * published by the Free Software Foundation. Oracle designates this
8+ * particular file as subject to the "Classpath" exception as provided
9+ * by Oracle in the LICENSE file that accompanied this code.
10+ *
11+ * This code is distributed in the hope that it will be useful, but WITHOUT
12+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14+ * version 2 for more details (a copy is included in the LICENSE file that
15+ * accompanied this code).
16+ *
17+ * You should have received a copy of the GNU General Public License version
18+ * 2 along with this work; if not, write to the Free Software Foundation,
19+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20+ *
21+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22+ * or visit www.oracle.com if you need additional information or have any
23+ * questions.
24+ */
25+
26+package sun.java2d.loops;
27+
28+/**
29+ * GraphicsPrimitiveProxy
30+ *
31+ * Acts as a proxy for instances of GraphicsPrimitive, enabling lazy
32+ * classloading of these primitives. This leads to a substantial
33+ * savings in start-up time and footprint. In the typical case,
34+ * it has been found that a small number of GraphicsPrimitive instance
35+ * actually end up getting instantiated.
36+ * <p>
37+ * Note that the makePrimitive method should never be invoked on
38+ * a GraphicsPrimitiveProxy object since they are instantiated as
39+ * soon as they are found in the primitive list and never returned
40+ * to the caller.
41+ */
42+public class GraphicsPrimitiveProxy extends GraphicsPrimitive {
43+
44+ private Class owner;
45+ private String relativeClassName;
46+
47+ /**
48+ * Create a GraphicsPrimitiveProxy for a primitive with a no-argument
49+ * constructor.
50+ *
51+ * @param owner The owner class for this primitive. The primitive
52+ * must be in the same package as this owner.
53+ * @param relativeClassName The name of the class this is a proxy for.
54+ * This should not include the package.
55+ */
56+ public GraphicsPrimitiveProxy(Class owner, String relativeClassName,
57+ String methodSignature,
58+ int primID,
59+ SurfaceType srctype,
60+ CompositeType comptype,
61+ SurfaceType dsttype)
62+ {
63+ super(methodSignature, primID, srctype, comptype, dsttype);
64+ this.owner = owner;
65+ this.relativeClassName = relativeClassName;
66+ }
67+
68+ public GraphicsPrimitive makePrimitive(SurfaceType srctype,
69+ CompositeType comptype,
70+ SurfaceType dsttype) {
71+ // This should never happen.
72+ throw new InternalError("makePrimitive called on a Proxy!");
73+ }
74+
75+ //
76+ // Come up with the real instance. Called from
77+ // GraphicsPrimitiveMgr.locate()
78+ //
79+ GraphicsPrimitive instantiate() {
80+ String name = getPackageName(owner.getName()) + "."
81+ + relativeClassName;
82+ try {
83+ Class clazz = Class.forName(name);
84+ GraphicsPrimitive p = (GraphicsPrimitive) clazz.newInstance();
85+ if (!satisfiesSameAs(p)) {
86+ throw new RuntimeException("Primitive " + p
87+ + " incompatible with proxy for "
88+ + name);
89+ }
90+ return p;
91+ } catch (ClassNotFoundException ex) {
92+ throw new RuntimeException(ex.toString());
93+ } catch (InstantiationException ex) {
94+ throw new RuntimeException(ex.toString());
95+ } catch (IllegalAccessException ex) {
96+ throw new RuntimeException(ex.toString());
97+ }
98+ // A RuntimeException should never happen in a deployed JDK, because
99+ // the regression test GraphicsPrimitiveProxyTest will catch any
100+ // of these errors.
101+ }
102+
103+ private static String getPackageName(String className) {
104+ int lastDotIdx = className.lastIndexOf('.');
105+ if (lastDotIdx < 0) {
106+ return className;
107+ }
108+ return className.substring(0, lastDotIdx);
109+ }
110+
111+ public GraphicsPrimitive traceWrap() {
112+ return instantiate().traceWrap();
113+ }
114+}