This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit abf1fc228e06565b8c3867e0f4aa917bc7d3e1c3
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Wed Jan 3 09:25:35 2024 +0000

    Refactor performance tests to separate class
    
    Removes 2 more skipped tests from a default test run
---
 test/org/apache/el/parser/TestELParser.java        | 61 ----------------
 .../apache/el/parser/TestELParserPerformance.java  | 82 ++++++++++++++++++++++
 2 files changed, 82 insertions(+), 61 deletions(-)

diff --git a/test/org/apache/el/parser/TestELParser.java 
b/test/org/apache/el/parser/TestELParser.java
index c9cf4041ba..884f7abbac 100644
--- a/test/org/apache/el/parser/TestELParser.java
+++ b/test/org/apache/el/parser/TestELParser.java
@@ -16,19 +16,15 @@
  */
 package org.apache.el.parser;
 
-import java.io.StringReader;
-
 import jakarta.el.ELContext;
 import jakarta.el.ELException;
 import jakarta.el.ExpressionFactory;
 import jakarta.el.ValueExpression;
 
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import org.apache.jasper.el.ELContextImpl;
-import org.apache.tomcat.util.collections.SynchronizedStack;
 
 public class TestELParser {
 
@@ -230,61 +226,4 @@ public class TestELParser {
         String result = (String) ve.getValue(context);
         Assert.assertEquals(expected, result);
     }
-
-    /*
-     * Test to explore if re-using Parser instances is faster.
-     *
-     * Tests on my laptop show:
-     * - overhead by introducing the stack is in the noise for parsing even the
-     *   simplest expression
-     * - efficiency from re-using the ELParser is measurable for even a single
-     *   reuse of the parser
-     * - with large numbers of parses (~10k) performance for a trivial parse is
-     *   three times faster
-     * - around the 100 iterations mark GC overhead adds significant noise to
-     *   the results - for consistent results you either need fewer parses to
-     *   avoid triggering GC or more parses so the GC effects are evenly
-     *   distributed between the runs
-     *
-     * Note that the test is single threaded.
-     */
-    @Ignore
-    @Test
-    public void testParserPerformance() throws ParseException {
-        final int runs = 20;
-        final int parseIterations = 10000;
-
-
-        for (int j = 0; j < runs; j ++) {
-            long start = System.nanoTime();
-            SynchronizedStack<ELParser> stack = new SynchronizedStack<>();
-
-            for (int i = 0; i < parseIterations; i ++) {
-                ELParser parser = stack.pop();
-                if (parser == null) {
-                    parser = new ELParser(new StringReader("${'foo'}"));
-                } else {
-                    parser.ReInit(new StringReader("${'foo'}"));
-                }
-                parser.CompositeExpression();
-                stack.push(parser);
-            }
-            long end = System.nanoTime();
-
-            System.out.println(parseIterations +
-                    " iterations using ELParser.ReInit(...) took " + (end - 
start) + "ns");
-        }
-
-        for (int j = 0; j < runs; j ++) {
-            long start = System.nanoTime();
-            for (int i = 0; i < parseIterations; i ++) {
-                ELParser parser = new ELParser(new StringReader("${'foo'}"));
-                parser.CompositeExpression();
-            }
-            long end = System.nanoTime();
-
-            System.out.println(parseIterations +
-                    " iterations using    new ELParser(...) took " + (end - 
start) + "ns");
-        }
-    }
 }
diff --git a/test/org/apache/el/parser/TestELParserPerformance.java 
b/test/org/apache/el/parser/TestELParserPerformance.java
new file mode 100644
index 0000000000..f4d90e7f9e
--- /dev/null
+++ b/test/org/apache/el/parser/TestELParserPerformance.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.el.parser;
+
+import java.io.StringReader;
+
+import org.junit.Test;
+
+import org.apache.tomcat.util.collections.SynchronizedStack;
+
+public class TestELParserPerformance {
+
+    /*
+     * Test to explore if re-using Parser instances is faster.
+     *
+     * Tests on my laptop show:
+     * - overhead by introducing the stack is in the noise for parsing even the
+     *   simplest expression
+     * - efficiency from re-using the ELParser is measurable for even a single
+     *   reuse of the parser
+     * - with large numbers of parses (~10k) performance for a trivial parse is
+     *   three times faster
+     * - around the 100 iterations mark GC overhead adds significant noise to
+     *   the results - for consistent results you either need fewer parses to
+     *   avoid triggering GC or more parses so the GC effects are evenly
+     *   distributed between the runs
+     *
+     * Note that the test is single threaded.
+     */
+    @Test
+    public void testParserInstanceReuse() throws ParseException {
+        final int runs = 20;
+        final int parseIterations = 10000;
+
+
+        for (int j = 0; j < runs; j ++) {
+            long start = System.nanoTime();
+            SynchronizedStack<ELParser> stack = new SynchronizedStack<>();
+
+            for (int i = 0; i < parseIterations; i ++) {
+                ELParser parser = stack.pop();
+                if (parser == null) {
+                    parser = new ELParser(new StringReader("${'foo'}"));
+                } else {
+                    parser.ReInit(new StringReader("${'foo'}"));
+                }
+                parser.CompositeExpression();
+                stack.push(parser);
+            }
+            long end = System.nanoTime();
+
+            System.out.println(parseIterations +
+                    " iterations using ELParser.ReInit(...) took " + (end - 
start) + "ns");
+        }
+
+        for (int j = 0; j < runs; j ++) {
+            long start = System.nanoTime();
+            for (int i = 0; i < parseIterations; i ++) {
+                ELParser parser = new ELParser(new StringReader("${'foo'}"));
+                parser.CompositeExpression();
+            }
+            long end = System.nanoTime();
+
+            System.out.println(parseIterations +
+                    " iterations using    new ELParser(...) took " + (end - 
start) + "ns");
+        }
+    }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to