Revision: 1118
Author: dhanji
Date: Mon Oct 12 16:03:32 2009
Log: Some speedups in the filter and servlet pipelines.
http://code.google.com/p/google-guice/source/detail?r=1118

Modified:
  /trunk/servlet/src/com/google/inject/servlet/FilterChainInvocation.java
  /trunk/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java
  /trunk/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java

=======================================
--- /trunk/servlet/src/com/google/inject/servlet/FilterChainInvocation.java     
 
Mon Dec 29 22:32:41 2008
+++ /trunk/servlet/src/com/google/inject/servlet/FilterChainInvocation.java     
 
Mon Oct 12 16:03:32 2009
@@ -16,7 +16,6 @@
  package com.google.inject.servlet;

  import java.io.IOException;
-import java.util.List;
  import javax.servlet.FilterChain;
  import javax.servlet.ServletException;
  import javax.servlet.ServletRequest;
@@ -35,14 +34,14 @@
   * @since 1.0
   */
  class FilterChainInvocation implements FilterChain {
-  private final List<FilterDefinition> filterDefinitions;
+  private final FilterDefinition[] filterDefinitions;
    private final FilterChain proceedingChain;
    private final ManagedServletPipeline servletPipeline;

    //state variable tracks current link in filterchain
    private int index = -1;

-  public FilterChainInvocation(List<FilterDefinition> filterDefinitions,
+  public FilterChainInvocation(FilterDefinition[] filterDefinitions,
        ManagedServletPipeline servletPipeline, FilterChain proceedingChain)  
{

      this.filterDefinitions = filterDefinitions;
@@ -55,8 +54,8 @@
      index++;

      //dispatch down the chain while there are more filters
-    if (index < filterDefinitions.size()) {
-      filterDefinitions.get(index).doFilter(servletRequest,  
servletResponse, this);
+    if (index < filterDefinitions.length) {
+      filterDefinitions[index].doFilter(servletRequest, servletResponse,  
this);
      } else {

        //we've reached the end of the filterchain, let's try to dispatch to  
a servlet
=======================================
--- /trunk/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java     
 
Wed May 13 13:34:06 2009
+++ /trunk/servlet/src/com/google/inject/servlet/ManagedFilterPipeline.java     
 
Mon Oct 12 16:03:32 2009
@@ -26,7 +26,6 @@
  import com.google.inject.internal.Maps;
  import com.google.inject.internal.Sets;
  import java.io.IOException;
-import java.util.Collections;
  import java.util.List;
  import java.util.Set;
  import javax.servlet.Filter;
@@ -47,7 +46,7 @@
   */
  @Singleton
  class ManagedFilterPipeline implements FilterPipeline{
-  private final List<FilterDefinition> filterDefinitions;
+  private final FilterDefinition[] filterDefinitions;
    private final ManagedServletPipeline servletPipeline;
    private final Provider<ServletContext> servletContext;

@@ -66,7 +65,7 @@
      this.servletPipeline = servletPipeline;
      this.servletContext = servletContext;

-    this.filterDefinitions =  
Collections.unmodifiableList(collectFilterDefinitions(injector));
+    this.filterDefinitions = collectFilterDefinitions(injector);
    }

    /**
@@ -76,7 +75,7 @@
     * We have a guarantee that {...@link  
com.google.inject.Injector#getBindings()} returns a map
     * that preserves insertion order in entry-set iterators.
     */
-  private List<FilterDefinition> collectFilterDefinitions(Injector  
injector) {
+  private FilterDefinition[] collectFilterDefinitions(Injector injector) {
      List<FilterDefinition> filterDefinitions = Lists.newArrayList();
      for (Binding<?> entry : injector.findBindingsByType(FILTER_DEFS)) {

@@ -85,7 +84,8 @@
        filterDefinitions.addAll(injector.getInstance(defsKey));
      }

-    return filterDefinitions;
+    // Convert to a fixed size array for speed.
+    return filterDefinitions.toArray(new  
FilterDefinition[filterDefinitions.size()]);
    }

    public synchronized void initPipeline(ServletContext servletContext)
=======================================
---  
/trunk/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java        
 
Sat Sep  5 23:22:08 2009
+++  
/trunk/servlet/src/com/google/inject/servlet/ManagedServletPipeline.java        
 
Mon Oct 12 16:03:32 2009
@@ -26,7 +26,6 @@
  import com.google.inject.internal.Preconditions;
  import com.google.inject.internal.Sets;
  import java.io.IOException;
-import java.util.Collections;
  import java.util.List;
  import java.util.Set;
  import javax.servlet.RequestDispatcher;
@@ -46,17 +45,17 @@
   */
  @Singleton
  class ManagedServletPipeline {
-  private final List<ServletDefinition> servletDefinitions;
+  private final ServletDefinition[] servletDefinitions;
    private static final TypeLiteral<List<ServletDefinition>> SERVLET_DEFS =
        new TypeLiteral<List<ServletDefinition>>() {};

    @Inject
    public ManagedServletPipeline(Injector injector) {
-    this.servletDefinitions =  
Collections.unmodifiableList(collectServletDefinitions(injector));
+    this.servletDefinitions = collectServletDefinitions(injector);
    }

    boolean hasServletsMapped() {
-    return !servletDefinitions.isEmpty();
+    return servletDefinitions.length > 0;
    }

    /**
@@ -66,7 +65,7 @@
     * We have a guarantee that {...@link  
com.google.inject.Injector#getBindings()} returns a map
     * that preserves insertion order in entry-set iterators.
     */
-  private List<ServletDefinition> collectServletDefinitions(Injector  
injector) {
+  private ServletDefinition[] collectServletDefinitions(Injector injector)  
{
      List<ServletDefinition> servletDefinitions = Lists.newArrayList();
      for (Binding<?> entry : injector.findBindingsByType(SERVLET_DEFS)) {

@@ -75,7 +74,8 @@
          servletDefinitions.addAll(injector.getInstance(defsKey));
      }

-    return servletDefinitions;
+    // Copy to a fixed size array for speed.
+    return servletDefinitions.toArray(new  
ServletDefinition[servletDefinitions.size()]);
    }

    public void init(ServletContext servletContext, Injector injector)  
throws ServletException {

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-guice-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to