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]

Reply via email to