Repository: tapestry-5
Updated Branches:
  refs/heads/master 9b5e19035 -> d871f66b3


TAP5-2332: Optimize 
org.apache.tapestry5.internal.transform.EventHandlerMethodParameterSource.get(ComponentEvent,
 int) (~+30% reqs/second)


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/d871f66b
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/d871f66b
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/d871f66b

Branch: refs/heads/master
Commit: d871f66b38188bdc6a94290729a93279465fd81b
Parents: 9b5e190
Author: Jochen Kemnade <[email protected]>
Authored: Sun Dec 7 13:03:19 2014 +0100
Committer: Jochen Kemnade <[email protected]>
Committed: Sun Dec 7 13:03:19 2014 +0100

----------------------------------------------------------------------
 .../EventHandlerMethodParameterSource.java      | 27 ++++++++++++++------
 1 file changed, 19 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/d871f66b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EventHandlerMethodParameterSource.java
----------------------------------------------------------------------
diff --git 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EventHandlerMethodParameterSource.java
 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EventHandlerMethodParameterSource.java
index a1a60ff..fd3a91b 100644
--- 
a/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EventHandlerMethodParameterSource.java
+++ 
b/tapestry-core/src/main/java/org/apache/tapestry5/internal/transform/EventHandlerMethodParameterSource.java
@@ -27,6 +27,23 @@ import org.apache.tapestry5.runtime.ComponentEvent;
  */
 public class EventHandlerMethodParameterSource
 {
+    private static final class ParameterExtractor implements Invokable<Object> 
{
+        private final EventHandlerMethodParameterProvider[] providers;
+        private final int index;
+        private final ComponentEvent event;
+
+        private ParameterExtractor(EventHandlerMethodParameterProvider[] 
providers, int index, ComponentEvent event) {
+            this.providers = providers;
+            this.index = index;
+            this.event = event;
+        }
+
+        public Object invoke()
+        {
+            return providers[index].valueForEventHandlerMethodParameter(event);
+        }
+    }
+
     private final String methodIdentifier;
 
     private final OperationTracker operationTracker;
@@ -46,13 +63,7 @@ public class EventHandlerMethodParameterSource
         // Hopefully this will not be too much overhead; it's really nice to 
be able to track what parameter
         // caused a failure.
 
-        return operationTracker.invoke(String.format("Obtaining value for 
parameter #%d of %s", index + 1, methodIdentifier),
-                new Invokable<Object>()
-                {
-                    public Object invoke()
-                    {
-                        return 
providers[index].valueForEventHandlerMethodParameter(event);
-                    }
-                });
+        return operationTracker.invoke("Obtaining value for parameter #" + 
(index + 1) + " of "+ methodIdentifier,
+                new ParameterExtractor(providers, index, event));
     }
 }

Reply via email to