curcuru 01/03/16 13:30:24
Modified: test/java/src/org/apache/qetest/xsl
PerfEverythingTestlet.java
Log:
Update to use new TransformWrapper implementations;
also update with runtimeGC option to do a GC after every
operation or not (false is default)
Revision Changes Path
1.5 +102 -85
xml-xalan/test/java/src/org/apache/qetest/xsl/PerfEverythingTestlet.java
Index: PerfEverythingTestlet.java
===================================================================
RCS file:
/home/cvs/xml-xalan/test/java/src/org/apache/qetest/xsl/PerfEverythingTestlet.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- PerfEverythingTestlet.java 2001/03/13 00:48:05 1.4
+++ PerfEverythingTestlet.java 2001/03/16 21:30:22 1.5
@@ -62,9 +62,12 @@
*/
package org.apache.qetest.xsl;
import org.apache.qetest.*;
-import org.apache.qetest.xslwrapper.ProcessorWrapper;
+import org.apache.qetest.xslwrapper.TransformWrapper;
+import org.apache.qetest.xslwrapper.TransformWrapperFactory;
import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.Hashtable;
/**
@@ -78,7 +81,7 @@
* purposes, we really need to do it all here.
*
* @author [EMAIL PROTECTED]
- * @version $Id: PerfEverythingTestlet.java,v 1.4 2001/03/13 00:48:05
curcuru Exp $
+ * @version $Id: PerfEverythingTestlet.java,v 1.5 2001/03/16 21:30:22
curcuru Exp $
*/
public class PerfEverythingTestlet extends TestletImpl
{
@@ -138,6 +141,10 @@
logger.checkErr("Incorrect Datalet type provided, threw:" +
e.toString());
return;
}
+ logger.logMsg(Logger.STATUSMSG, "About to test: "
+ + (null == datalet.inputName
+ ? datalet.xmlName
+ : datalet.inputName));
// Cleanup outName only if asked to - delete the file on disk
if
("true".equalsIgnoreCase(datalet.options.getProperty("deleteOutFile")))
@@ -160,6 +167,7 @@
// Setup: Save options from the datalet in convenience variables
int iterations = 10;
boolean preload = true;
+ boolean runtimeGC = false;
try
{
iterations =
Integer.parseInt(datalet.options.getProperty("iterations"));
@@ -170,6 +178,11 @@
preload = (new
Boolean(datalet.options.getProperty("preload"))).booleanValue();
}
catch (Exception e) { /* no-op, leave as default */ }
+ try
+ {
+ runtimeGC = (new
Boolean(datalet.options.getProperty("runtimeGC"))).booleanValue();
+ }
+ catch (Exception e) { /* no-op, leave as default */ }
// Setup: store various timing data in convenience variables
long singletransform = 0L; // Very first Preload end-to-end
transform
@@ -180,104 +193,88 @@
long unparsedxml = 0L; // First stylesheet process during
iterations
long avgunparsedxml = 0L;// Average of stylesheet process during
iterations
- // Setup: Store local copies of XSL, XML references for
- // potential change to URLs
- String inputName = datalet.inputName;
- String xmlName = datalet.xmlName;
- if (datalet.useURL)
- {
- // inputName may not exist if it's an embedded test
- if (null != inputName)
- inputName = QetestUtils.filenameToURL(inputName);
- xmlName = QetestUtils.filenameToURL(xmlName);
+ // Create a new TransformWrapper of appropriate flavor
+ // null arg is unused liaison for TransformWrapper
+ //@todo allow user to pass in pre-created
+ // TransformWrapper so we don't have lots of objects
+ // created and destroyed for every file
+ TransformWrapper transformWrapper = null;
+ try
+ {
+ transformWrapper =
TransformWrapperFactory.newWrapper(datalet.flavor);
+ transformWrapper.newProcessor(null);
}
- // try...catch around entire performance operation
+ catch (Throwable t)
+ {
+ logThrowable(t, getDescription() + " newWrapper/newProcessor
threw");
+ logger.checkErr(getDescription() + " newWrapper/newProcessor
threw: " + t.toString());
+ return;
+ }
+
+ // Test our supplied file in multiple ways, logging performance data
try
{
- // Setup: Create a new ProcessorWrapper of appropriate flavor
- ProcessorWrapper processorWrapper =
ProcessorWrapper.getWrapper(datalet.flavor);
- if (null == processorWrapper.createNewProcessor(null))
+ // Setup: Store local copies of XSL, XML references for
+ // potential change to URLs
+ String inputName = datalet.inputName;
+ String xmlName = datalet.xmlName;
+ if (datalet.useURL)
{
- logger.checkErr("ERROR: could not create processorWrapper,
aborting.");
- return;
+ // inputName may not exist if it's an embedded test
+ if (null != inputName)
+ inputName = QetestUtils.filenameToURL(inputName);
+ xmlName = QetestUtils.filenameToURL(xmlName);
}
logger.logMsg(Logger.TRACEMSG, "executing with: inputName=" +
inputName
+ " xmlName=" + xmlName + " outputName=" +
datalet.outputName
+ " goldName=" + datalet.goldName + " flavor=" +
datalet.flavor
+ " iterations=" + iterations + " preload=" +
preload
+ " algorithim=" + getDescription());
+
//@todo make various logMemory calls optional
- logMemory(true, true);
+ logMemory(runtimeGC, true);
// Measure(singletransform): Very first Preload end-to-end
transform
- singletransform = processorWrapper.processToFile(xmlName,
inputName,
+ long[] times = null;
+ times = transformWrapper.transform(xmlName, inputName,
datalet.outputName);
- logMemory(true, false);
- if (singletransform == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: Preload0 error with:" +
datalet.inputName);
- return;
- }
+ singletransform = times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
// Measure(parsexsl): once: first preprocess
- parsexsl = processorWrapper.preProcessStylesheet(inputName);
- logMemory(true, false);
- if (parsexsl == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: Preload1 error with:" +
datalet.inputName);
- return;
- }
+ times = transformWrapper.buildStylesheet(inputName);
+ parsexsl = times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
+
// Measure(unparsedxml): once: first process
- unparsedxml = processorWrapper.processToFile(xmlName,
datalet.outputName);
- logMemory(true, false);
- if (unparsedxml == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: Preload2 error with:" +
datalet.inputName);
- return;
- }
+ times = transformWrapper.transformWithStylesheet(xmlName,
datalet.outputName);
+ unparsedxml = times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
for (int ctr = 1; ctr <= iterations; ctr++)
{
// Measure(avgparsexsl): average preprocess
- long preprocessTime =
processorWrapper.preProcessStylesheet(inputName);
- logMemory(true, false);
- if (preprocessTime == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: PreprocessLoop1 error iter(" +
ctr + ") with:" + datalet.inputName);
- return;
- }
- avgparsexsl += preprocessTime;
+ times = transformWrapper.buildStylesheet(inputName);
+ avgparsexsl += times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
// Measure(avgunparsedxml): average process
- long processTime = processorWrapper.processToFile(xmlName,
datalet.outputName);
- logMemory(true, false);
- if (processTime == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: PreprocessLoop2 error iter(" +
ctr + ") with:" + datalet.inputName);
- return;
- }
- avgunparsedxml += processTime;
+ times = transformWrapper.transformWithStylesheet(xmlName,
datalet.outputName);
+ avgunparsedxml += times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
}
// Measure(etoe): once: first full process
- etoe = processorWrapper.processToFile(xmlName, inputName,
datalet.outputName);
- logMemory(true, true);
- if (etoe == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: Process error with:" +
datalet.inputName);
- return;
- }
+ times = transformWrapper.transform(xmlName, inputName,
datalet.outputName);
+ etoe = times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, true);
+
for (int ctr = 1; ctr <= iterations; ctr++)
{
// Measure(avgetoe): average full process
- long retVal = processorWrapper.processToFile(xmlName,
inputName, datalet.outputName);
- logMemory(true, false);
- if (retVal == ProcessorWrapper.ERROR)
- {
- logger.checkFail("ERROR: ProcessLoop error iter(" + ctr
+ ") with:" + datalet.inputName);
- return;
- }
- avgetoe += retVal;
+ times = transformWrapper.transform(xmlName, inputName,
datalet.outputName);
+ avgetoe += times[TransformWrapper.IDX_OVERALL];
+ logMemory(runtimeGC, false);
}
// Log special performance element with our timing
@@ -287,7 +284,7 @@
// stylesheets can compare different test runs
attrs.put("UniqRunid", datalet.options.getProperty("runId",
"runId;none"));
// processor is the 'flavor' of processor we're testing
- attrs.put("processor", processorWrapper.getDescription());
+ attrs.put("processor", transformWrapper.getDescription());
// idref is the individual filename
attrs.put("idref", (new File(datalet.inputName)).getName());
// inputName is the actual name we gave to the processor
@@ -302,30 +299,33 @@
attrs.put("avgunparsedxml", new Long(avgunparsedxml /
iterations)); // Average of stylesheet process during iterations
logger.logElement(Logger.STATUSMSG, "perf", attrs, "PItr;");
+
+ // If we get here, attempt to validate the contents of
+ // the last outputFile created
+ CheckService fileChecker =
(CheckService)datalet.options.get("fileCheckerImpl");
+ // Supply default value
+ if (null == fileChecker)
+ fileChecker = new XHTFileCheckService();
+ if (Logger.PASS_RESULT
+ != fileChecker.check(logger,
+ new File(datalet.outputName),
+ new File(datalet.goldName),
+ getDescription() + ", " +
datalet.getDescription())
+ )
+ logger.logMsg(Logger.WARNINGMSG, "Failure reason: " +
fileChecker.getExtendedInfo());
}
// try...catch around entire performance operation
catch (Throwable t)
{
- logger.checkErr("PerfEverythingTestlet with:" + datalet.inputName
- + " threw: " + t.toString());
java.io.StringWriter sw = new java.io.StringWriter();
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
t.printStackTrace(pw);
logger.logArbitrary(Logger.ERRORMSG, sw.toString());
+ logger.checkErr("PerfEverythingTestlet with:" + datalet.inputName
+ + " threw: " + t.toString());
return;
}
- // If we get here, attempt to validate the contents of
- // the last outputFile created
- CheckService fileChecker = new XHTFileCheckService();
- if (Logger.PASS_RESULT
- != fileChecker.check(logger,
- new File(datalet.outputName),
- new File(datalet.goldName),
- getDescription() + ", " +
datalet.getDescription())
- )
- logger.logMsg(Logger.WARNINGMSG, "Failure reason: " +
fileChecker.getExtendedInfo());
-
//@todo Should we attempt to cleanup anything else here?
// We've had problems running this testlet over large
// files, so I'm looking for ways to reduce the impact
@@ -352,5 +352,22 @@
}
}
+
+ /**
+ * Logs out throwable.toString() and stack trace to our Logger.
+ * //@todo Copied from Reporter; should probably be moved into Logger.
+ * @param throwable thrown throwable/exception to log out.
+ * @param msg description of the throwable.
+ */
+ protected void logThrowable(Throwable throwable, String msg)
+ {
+ StringWriter sWriter = new StringWriter();
+ sWriter.write(msg + "\n");
+
+ PrintWriter pWriter = new PrintWriter(sWriter);
+ throwable.printStackTrace(pWriter);
+
+ logger.logArbitrary(Logger.STATUSMSG, sWriter.toString());
+ }
} // end of class PerfEverythingTestlet
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]