You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2012/03/06 18:51:14 UTC

svn commit: r1297609 - /myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java

Author: lu4242
Date: Tue Mar  6 17:51:13 2012
New Revision: 1297609

URL: http://svn.apache.org/viewvc?rev=1297609&view=rev
Log:
MYFACES-3144 [PERF] Cache renderer in UIComponentBase

Modified:
    myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java

Modified: myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java?rev=1297609&r1=1297608&r2=1297609&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java (original)
+++ myfaces/core/branches/2.0.x/api/src/main/java/javax/faces/component/UIComponentBase.java Tue Mar  6 17:51:13 2012
@@ -122,6 +122,8 @@ public abstract class UIComponentBase ex
     private transient Map<String, List<ClientBehavior>> _unmodifiableBehaviorsMap = null;
     
     private transient FacesContext _facesContext;
+    private transient Boolean _cachedIsRendered;
+    private transient Renderer _cachedRenderer;
     
     public UIComponentBase()
     {
@@ -467,14 +469,80 @@ public abstract class UIComponentBase ex
             throw new NullPointerException("context");
         }
         
+        setCachedRenderer(null);
         Renderer renderer = getRenderer(context);
         if (renderer != null)
         {
-            renderer.decode(context, this);
+            setCachedRenderer(renderer);
+            try
+            {
+                renderer.decode(context, this);
+            }
+            finally
+            {
+                setCachedRenderer(null);
+            }
         }
 
     }
 
+    public void encodeAll(FacesContext context) throws IOException
+    {
+        if (context == null)
+        {
+            throw new NullPointerException();
+        }
+
+        pushComponentToEL(context, this);
+        try
+        {
+            setCachedIsRendered(null);
+            boolean rendered = isRendered(); 
+            setCachedIsRendered(rendered);
+            if (!rendered)
+            {
+                setCachedIsRendered(null);
+                return;
+            }
+            setCachedRenderer(null);
+            setCachedRenderer(getRenderer(context));
+        }
+        finally
+        {
+            popComponentFromEL(context);
+        }
+
+        try
+        {
+            //if (isRendered()) {
+            this.encodeBegin(context);
+
+            // rendering children
+            if (this.getRendersChildren())
+            {
+                this.encodeChildren(context);
+            } // let children render itself
+            else
+            {
+                if (this.getChildCount() > 0)
+                {
+                    for (int i = 0; i < this.getChildCount(); i++)
+                    {
+                        UIComponent comp = this.getChildren().get(i);
+                        comp.encodeAll(context);
+                    }
+                }
+            }
+            this.encodeEnd(context);
+            //}
+        }
+        finally
+        {
+            setCachedIsRendered(null);
+            setCachedRenderer(null);
+        }
+    }
+
     @Override
     public void encodeBegin(FacesContext context) throws IOException
     {
@@ -1103,6 +1171,10 @@ public abstract class UIComponentBase ex
     @JSFProperty
     public boolean isRendered()
     {
+        if (_cachedIsRendered != null)
+        {
+            return Boolean.TRUE.equals(_cachedIsRendered);
+        }
         return (Boolean) getStateHelper().eval(PropertyKeys.rendered, DEFAULT_RENDERED);
     }
 
@@ -1210,6 +1282,11 @@ public abstract class UIComponentBase ex
         {
             throw new NullPointerException("context");
         }
+        Renderer renderer = getCachedRenderer();
+        if (renderer != null)
+        {
+            return renderer;
+        }
         String rendererType = getRendererType();
         if (rendererType == null)
         {
@@ -1217,7 +1294,7 @@ public abstract class UIComponentBase ex
         }
         
         RenderKit renderKit = context.getRenderKit();
-        Renderer renderer = renderKit.getRenderer(getFamily(), rendererType);
+        renderer = renderKit.getRenderer(getFamily(), rendererType);
         if (renderer == null)
         {
             String location = getComponentLocation(this);
@@ -2300,6 +2377,26 @@ public abstract class UIComponentBase ex
         _facesContext = facesContext;
     }
     
+    Renderer getCachedRenderer()
+    {
+        return _cachedRenderer;
+    }
+    
+    void setCachedRenderer(Renderer renderer)
+    {
+        _cachedRenderer = renderer;
+    }
+
+    Boolean isCachedIsRendered()
+    {
+        return _cachedIsRendered;
+    }
+    
+    void setCachedIsRendered(Boolean rendered)
+    {
+       _cachedIsRendered = rendered;
+    }
+    
     <T> T getExpressionValue(String attribute, T explizitValue, T defaultValueIfExpressionNull)
     {
         return _ComponentUtils.getExpressionValue(this, attribute, explizitValue, defaultValueIfExpressionNull);
@@ -2382,7 +2479,8 @@ public abstract class UIComponentBase ex
     @Override
     public void setRendered(boolean rendered)
     {
-        getStateHelper().put(PropertyKeys.rendered, rendered ); 
+        getStateHelper().put(PropertyKeys.rendered, rendered );
+        setCachedIsRendered(null);
     }
 
     @Override
@@ -2395,6 +2493,7 @@ public abstract class UIComponentBase ex
             //should be included on the delta
             this._isRendererTypeSet = true;
         }
+        setCachedRenderer(null);
     }
 
     // ------------------ GENERATED CODE END ---------------------------------------