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
-~----------~----~----~----~------~----~------~--~---