mkwan 2003/06/23 08:58:18
Modified: java/src/org/apache/xalan/xsltc DOM.java
java/src/org/apache/xalan/xsltc/compiler SyntaxTreeNode.java
java/src/org/apache/xalan/xsltc/dom DOMAdapter.java
MultiDOM.java SAXImpl.java
SimpleResultTreeImpl.java
Log:
Performance improvement for XSLTC
Don't add a simple or adaptive RTF to the DTMManager if the nodeset
extension is not used. The DOMAdapters are also not created in
this case. This is a noticeable improvement for stylesheets that use
many small RTFs but do not use the nodeset extension.
Revision Changes Path
1.15 +2 -1 xml-xalan/java/src/org/apache/xalan/xsltc/DOM.java
Index: DOM.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/DOM.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- DOM.java 1 Apr 2003 20:35:37 -0000 1.14
+++ DOM.java 23 Jun 2003 15:58:17 -0000 1.15
@@ -134,6 +134,7 @@
public int getNodeIdent(final int nodehandle);
public int getNodeHandle(final int nodeId);
public DOM getResultTreeFrag(int initialSize, int rtfType);
+ public DOM getResultTreeFrag(int initialSize, int rtfType, boolean
addToDTMManager);
public SerializationHandler getOutputDomBuilder();
public int getNSType(int node);
public int getDocument();
1.27 +5 -5
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SyntaxTreeNode.java
Index: SyntaxTreeNode.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/SyntaxTreeNode.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- SyntaxTreeNode.java 1 Apr 2003 21:09:00 -0000 1.26
+++ SyntaxTreeNode.java 23 Jun 2003 15:58:17 -0000 1.27
@@ -662,11 +662,11 @@
il.append(methodGen.loadDOM());
int index = cpg.addInterfaceMethodref(DOM_INTF,
"getResultTreeFrag",
- "(II)" + DOM_INTF_SIG);
+ "(IIZ)" + DOM_INTF_SIG);
il.append(new PUSH(cpg, RTF_INITIAL_SIZE));
il.append(new PUSH(cpg, rtfType));
- il.append(new INVOKEINTERFACE(index,3));
-
+ il.append(new PUSH(cpg, stylesheet.callsNodeset()));
+ il.append(new INVOKEINTERFACE(index,4));
il.append(DUP);
@@ -692,7 +692,7 @@
// Check if we need to wrap the DOMImpl object in a DOMAdapter object.
// DOMAdapter is not needed if the RTF is a simple RTF and the nodeset()
// function is not used.
- if ((!isSimple || stylesheet.callsNodeset())
+ if (stylesheet.callsNodeset()
&& !DOM_CLASS.equals(DOM_IMPL_CLASS)) {
// new org.apache.xalan.xsltc.dom.DOMAdapter(DOMImpl,String[]);
index = cpg.addMethodref(DOM_ADAPTER_CLASS,
1.19 +15 -1
xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java
Index: DOMAdapter.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMAdapter.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- DOMAdapter.java 1 Apr 2003 21:39:16 -0000 1.18
+++ DOMAdapter.java 23 Jun 2003 15:58:17 -0000 1.19
@@ -441,6 +441,20 @@
}
/**
+ * Return a instance of a DOM class to be used as an RTF
+ */
+ public DOM getResultTreeFrag(int initSize, int rtfType, boolean
addToManager)
+ {
+ if (_saxImpl != null) {
+ return _saxImpl.getResultTreeFrag(initSize, rtfType, addToManager);
+ }
+ else {
+ return _dom.getResultTreeFrag(initSize, rtfType, addToManager);
+ }
+ }
+
+
+ /**
* Returns a SerializationHandler class wrapped in a SAX adapter.
*/
public SerializationHandler getOutputDomBuilder()
1.28 +6 -1
xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java
Index: MultiDOM.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -r1.27 -r1.28
--- MultiDOM.java 16 Jun 2003 19:15:42 -0000 1.27
+++ MultiDOM.java 23 Jun 2003 15:58:17 -0000 1.28
@@ -655,6 +655,11 @@
return _main.getResultTreeFrag(initSize, rtfType);
}
+ public DOM getResultTreeFrag(int initSize, int rtfType, boolean
addToManager)
+ {
+ return _main.getResultTreeFrag(initSize, rtfType, addToManager);
+ }
+
public DOM getMain()
{
return _main;
1.8 +37 -13
xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java
Index: SAXImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SAXImpl.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SAXImpl.java 23 Jun 2003 15:23:39 -0000 1.7
+++ SAXImpl.java 23 Jun 2003 15:58:18 -0000 1.8
@@ -1478,26 +1478,50 @@
*/
public DOM getResultTreeFrag(int initSize, int rtfType)
{
+ return getResultTreeFrag(initSize, rtfType, true);
+ }
+
+ /**
+ * Return a instance of a DOM class to be used as an RTF
+ *
+ * @param initSize The initial size of the DOM.
+ * @param rtfType The type of the RTF
+ * @param addToManager true if the RTF should be registered with the
DTMManager.
+ * @return The DOM object which represents the RTF.
+ */
+ public DOM getResultTreeFrag(int initSize, int rtfType, boolean
addToManager)
+ {
if (rtfType == DOM.SIMPLE_RTF) {
- int dtmPos = _dtmManager.getFirstFreeDTMID();
- SimpleResultTreeImpl rtf = new SimpleResultTreeImpl(_dtmManager,
- dtmPos <<
DTMManager.IDENT_DTM_NODE_BITS);
- _dtmManager.addDTM(rtf, dtmPos, 0);
- return rtf;
+ if (addToManager) {
+ int dtmPos = _dtmManager.getFirstFreeDTMID();
+ SimpleResultTreeImpl rtf = new SimpleResultTreeImpl(_dtmManager,
+ dtmPos <<
DTMManager.IDENT_DTM_NODE_BITS);
+ _dtmManager.addDTM(rtf, dtmPos, 0);
+ return rtf;
+ }
+ else {
+ return new SimpleResultTreeImpl(_dtmManager, 0);
+ }
}
else if (rtfType == DOM.ADAPTIVE_RTF) {
- int dtmPos = _dtmManager.getFirstFreeDTMID();
- AdaptiveResultTreeImpl rtf = new AdaptiveResultTreeImpl(_dtmManager,
+ if (addToManager) {
+ int dtmPos = _dtmManager.getFirstFreeDTMID();
+ AdaptiveResultTreeImpl rtf = new
AdaptiveResultTreeImpl(_dtmManager,
dtmPos << DTMManager.IDENT_DTM_NODE_BITS,
m_wsfilter, initSize, m_buildIdIndex);
- _dtmManager.addDTM(rtf, dtmPos, 0);
- return rtf;
+ _dtmManager.addDTM(rtf, dtmPos, 0);
+ return rtf;
+ }
+ else {
+ return new AdaptiveResultTreeImpl(_dtmManager, 0,
+ m_wsfilter, initSize, m_buildIdIndex);
+ }
}
else {
- return (SAXImpl) _dtmManager.getDTM(null, true, m_wsfilter,
- true, false, false,
- initSize, m_buildIdIndex);
+ return (DOM) _dtmManager.getDTM(null, true, m_wsfilter,
+ true, false, false,
+ initSize, m_buildIdIndex);
}
}
1.5 +5 -0
xml-xalan/java/src/org/apache/xalan/xsltc/dom/SimpleResultTreeImpl.java
Index: SimpleResultTreeImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SimpleResultTreeImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- SimpleResultTreeImpl.java 23 Jun 2003 15:23:39 -0000 1.4
+++ SimpleResultTreeImpl.java 23 Jun 2003 15:58:18 -0000 1.5
@@ -621,6 +621,11 @@
return null;
}
+ public DOM getResultTreeFrag(int initialSize, int rtfType, boolean
addToManager)
+ {
+ return null;
+ }
+
public SerializationHandler getOutputDomBuilder()
{
return this;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]