2017-01-25 23:05 GMT+03:00 <ma...@apache.org>: > Author: markt > Date: Wed Jan 25 20:05:01 2017 > New Revision: 1780262 > > URL: http://svn.apache.org/viewvc?rev=1780262&view=rev > Log: > Add a unit test used to investigate https://github.com/apache/tomcat85/pull/5 > TagHandlerPool is effectively using a SynchronizedStack. This is known to > perform better than ConcurrentLinkedDeque in some cases and testing confirmed > that for TagHandlerPool.
1. Rename to TestTagHandlerPoolPerformance ? In build.xml there is exclude pattern for such tests: <exclude name="**/*Performance.java" if="${test.excludePerformance}" /> 2. A test class with a single @Ignore'd method -> I remember that in such case the annotation had to be moved to class level. (I do not remember the reason, but I think that we will see it soon enough.) Best regards, Konstantin Kolinko > Added: > tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java > (with props) > > Added: tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java > URL: > http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java?rev=1780262&view=auto > ============================================================================== > --- tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java > (added) > +++ tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java Wed > Jan 25 20:05:01 2017 > @@ -0,0 +1,95 @@ > +/* > + * 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.jasper.runtime; > + > +import javax.servlet.jsp.JspException; > +import javax.servlet.jsp.tagext.Tag; > + > +import org.junit.Ignore; > +import org.junit.Test; > + > +import org.apache.catalina.Wrapper; > +import org.apache.catalina.startup.Tomcat; > +import org.apache.catalina.startup.TomcatBaseTest; > +import org.apache.tomcat.unittest.tags.Bug53545; > + > + > +public class TestTagHandlerPool extends TomcatBaseTest { > + > + /* > + * Performance test. Comment out @Ignore to run the test. > + */ > + @Ignore > + @Test > + public void testConcurrency() throws Exception { > + // Create a working TagHandlerPool > + Tomcat tomcat = getTomcatInstanceTestWebapp(false, true); > + > + Wrapper w = (Wrapper) > tomcat.getHost().findChildren()[0].findChild("jsp"); > + TagHandlerPool tagHandlerPool = new TagHandlerPool(); > + tagHandlerPool.init(w.getServlet().getServletConfig()); > + > + for (int i = 1; i < 9; i++) { > + doTestConcurrency(tagHandlerPool, i); > + } > + } > + > + > + private void doTestConcurrency(TagHandlerPool tagHandlerPool, int > threadCount) throws Exception { > + long start = System.nanoTime(); > + > + Thread[] threads = new Thread[threadCount]; > + > + for (int i = 0; i < threadCount; i++) { > + threads[i] = new Thread(new > TagHandlerPoolRunnable(tagHandlerPool)); > + } > + > + for (int i = 0; i < threadCount; i++) { > + threads[i].start(); > + } > + > + for (int i = 0; i < threadCount; i++) { > + threads[i].join(); > + } > + > + long duration = System.nanoTime() - start; > + > + System.out.println(threadCount + " threads completed in " + duration > + "ns"); > + } > + > + > + private class TagHandlerPoolRunnable implements Runnable { > + > + private final TagHandlerPool tagHandlerPool; > + > + private TagHandlerPoolRunnable(TagHandlerPool tagHandlerPool) { > + this.tagHandlerPool = tagHandlerPool; > + } > + > + @Override > + public void run() { > + try { > + for (int i = 0; i < 500000; i++) { > + Tag t = tagHandlerPool.get(Bug53545.class); > + tagHandlerPool.reuse(t); > + } > + } catch (JspException e) { > + e.printStackTrace(); > + } > + } > + } > +} > > Propchange: > tomcat/trunk/test/org/apache/jasper/runtime/TestTagHandlerPool.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org