From: <rg...@us...> - 2006-12-31 01:34:57
|
Revision: 247 http://svn.sourceforge.net/dacapobench/?rev=247&view=rev Author: rgarner Date: 2006-12-30 17:34:52 -0800 (Sat, 30 Dec 2006) Log Message: ----------- Add buffering to the IO output Modified Paths: -------------- benchmarks/branches/robin/benchmarks/bmsrc/dacapo/xalan/XalanHarness.java Modified: benchmarks/branches/robin/benchmarks/bmsrc/dacapo/xalan/XalanHarness.java =================================================================== --- benchmarks/branches/robin/benchmarks/bmsrc/dacapo/xalan/XalanHarness.java 2006-12-31 01:22:42 UTC (rev 246) +++ benchmarks/branches/robin/benchmarks/bmsrc/dacapo/xalan/XalanHarness.java 2006-12-31 01:34:52 UTC (rev 247) @@ -26,107 +26,107 @@ * transforms as part of a presentation layer. */ public class XalanHarness extends Benchmark { - - // What version of XALAN should we have - final String XALAN_VERSION = "Xalan Java 2.4.1"; - - // How may workers do we want - final int WORKERS = 8; + + // What version of XALAN should we have + final String XALAN_VERSION = "Xalan Java 2.4.1"; + + // How may workers do we want + final int WORKERS = 8; - /* - * A simple queue of filenames that the worker threads pull jobs - * from. - */ - class WorkQueue { - LinkedList _queue = new LinkedList(); + /* + * A simple queue of filenames that the worker threads pull jobs + * from. + */ + class WorkQueue { + LinkedList _queue = new LinkedList(); - public synchronized void push(String filename) { - _queue.add(filename); - notify(); - } + public synchronized void push(String filename) { + _queue.add(filename); + notify(); + } - public synchronized String pop() { - while (_queue.isEmpty()) { - try { - wait(); - } catch (InterruptedException e) { - } - } - return (String) _queue.removeFirst(); - } - } + public synchronized String pop() { + while (_queue.isEmpty()) { + try { + wait(); + } catch (InterruptedException e) { + } + } + return (String) _queue.removeFirst(); + } + } - /* - * Worker thread. Provided with a queue that input files - * can be selected from and a template object that can - * be used to perform a transform from. Results of the - * transfrom are saved in the scratch directory as normal. - */ - class XalanWorker extends Thread implements ErrorListener { - - // Where are we going to get jobs from - WorkQueue _queue; + /* + * Worker thread. Provided with a queue that input files + * can be selected from and a template object that can + * be used to perform a transform from. Results of the + * transfrom are saved in the scratch directory as normal. + */ + class XalanWorker extends Thread implements ErrorListener { + + // Where are we going to get jobs from + WorkQueue _queue; - // A unique identifier for the worker - int _id; + // A unique identifier for the worker + int _id; - public XalanWorker(WorkQueue queue, int id) { - _queue = queue; - _id = id; - } + public XalanWorker(WorkQueue queue, int id) { + _queue = queue; + _id = id; + } - public void run() { - try { + public void run() { + try { FileOutputStream outputStream = new FileOutputStream( new File(scratch,"xalan.out." + _id)); - Result outFile = new StreamResult(outputStream); - while (true) { - String fileName = _queue.pop(); - // An empty string is the end of life signal - if (fileName.equals("")) - break; - Transformer transformer = _template.newTransformer(); - transformer.setErrorListener(this); - FileInputStream inputStream = new FileInputStream( - new File(scratch,fileName)); + Result outFile = new StreamResult(new BufferedOutputStream(outputStream)); + while (true) { + String fileName = _queue.pop(); + // An empty string is the end of life signal + if (fileName.equals("")) + break; + Transformer transformer = _template.newTransformer(); + transformer.setErrorListener(this); + FileInputStream inputStream = new FileInputStream( + new File(scratch,fileName)); Source inFile = new StreamSource(inputStream); - transformer.transform(inFile, outFile); + transformer.transform(inFile, outFile); inputStream.close(); - } - } catch (TransformerConfigurationException e) { - e.printStackTrace(); - } catch (TransformerException e) { - e.printStackTrace(); - } catch (IOException e) { + } + } catch (TransformerConfigurationException e) { + e.printStackTrace(); + } catch (TransformerException e) { e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); } - } + } - // Provide an ErrorListener so that stderr warnings can be surpressed - public void error(TransformerException exception) throws TransformerException { - throw exception; - } + // Provide an ErrorListener so that stderr warnings can be surpressed + public void error(TransformerException exception) throws TransformerException { + throw exception; + } - public void fatalError(TransformerException exception) throws TransformerException { - throw exception; - } + public void fatalError(TransformerException exception) throws TransformerException { + throw exception; + } - public void warning(TransformerException exception) throws TransformerException { - // Ignore warnings, the test transforms create some - } - } + public void warning(TransformerException exception) throws TransformerException { + // Ignore warnings, the test transforms create some + } + } - // The rather inappropriatly named 'Templates' object for storing - // a handle to a 'compiled' transformation stylesheet - Templates _template = null; + // The rather inappropriatly named 'Templates' object for storing + // a handle to a 'compiled' transformation stylesheet + Templates _template = null; - // The queue used to hold jobs to be processed - WorkQueue _workQueue = null; - - // An array for the workers - XalanWorker[] _workers = null; - - public XalanHarness(Config config, File scratch) throws Exception { + // The queue used to hold jobs to be processed + WorkQueue _workQueue = null; + + // An array for the workers + XalanWorker[] _workers = null; + + public XalanHarness(Config config, File scratch) throws Exception { super(config, scratch); // Check Xalan version, this is easy to get wrong because its @@ -157,56 +157,56 @@ // Create the work queue for jobs _workQueue = new WorkQueue(); } - - /* + + /* * Create the threads, this is outside the timing loop to minimise the impact * of the startup. The threads will just sit waiting on the work queue. * * @see dacapo.Benchmark#preIteration(java.lang.String) */ - public void preIteration(String size) throws Exception { - super.preIteration(size); - - // Setup the workers ready to roll - if (_workers==null) - _workers=new XalanWorker [WORKERS]; - for (int i=0; i<WORKERS; i++) { - _workers[i]=new XalanWorker(_workQueue,i); - _workers[i].start(); - } - } + public void preIteration(String size) throws Exception { + super.preIteration(size); + + // Setup the workers ready to roll + if (_workers==null) + _workers=new XalanWorker [WORKERS]; + for (int i=0; i<WORKERS; i++) { + _workers[i]=new XalanWorker(_workQueue,i); + _workers[i].start(); + } + } - /* - * Run the benchmark by just pushing jobs onto the - * work queue and waiting for the threads to finish. - * @see dacapo.Benchmark#iterate(java.lang.String) - */ - public void iterate(String size) throws Exception { - String[] harnessArgs = config.getArgs(size); - int nRuns = Integer.parseInt(harnessArgs[0]); + /* + * Run the benchmark by just pushing jobs onto the + * work queue and waiting for the threads to finish. + * @see dacapo.Benchmark#iterate(java.lang.String) + */ + public void iterate(String size) throws Exception { + String[] harnessArgs = config.getArgs(size); + int nRuns = Integer.parseInt(harnessArgs[0]); - // Post the work - for (int iRun = 0; iRun < nRuns; iRun++) { - _workQueue.push("xalan/acks.xml"); - _workQueue.push("xalan/binding.xml"); - _workQueue.push("xalan/changes.xml"); - _workQueue.push("xalan/concepts.xml"); - _workQueue.push("xalan/controls.xml"); - _workQueue.push("xalan/datatypes.xml"); - _workQueue.push("xalan/expr.xml"); - _workQueue.push("xalan/intro.xml"); - _workQueue.push("xalan/model.xml"); - _workQueue.push("xalan/prod-notes.xml"); - _workQueue.push("xalan/references.xml"); - _workQueue.push("xalan/rpm.xml"); - _workQueue.push("xalan/schema.xml"); - _workQueue.push("xalan/structure.xml"); - _workQueue.push("xalan/template.xml"); - _workQueue.push("xalan/terms.xml"); - _workQueue.push("xalan/ui.xml"); - } + // Post the work + for (int iRun = 0; iRun < nRuns; iRun++) { + _workQueue.push("xalan/acks.xml"); + _workQueue.push("xalan/binding.xml"); + _workQueue.push("xalan/changes.xml"); + _workQueue.push("xalan/concepts.xml"); + _workQueue.push("xalan/controls.xml"); + _workQueue.push("xalan/datatypes.xml"); + _workQueue.push("xalan/expr.xml"); + _workQueue.push("xalan/intro.xml"); + _workQueue.push("xalan/model.xml"); + _workQueue.push("xalan/prod-notes.xml"); + _workQueue.push("xalan/references.xml"); + _workQueue.push("xalan/rpm.xml"); + _workQueue.push("xalan/schema.xml"); + _workQueue.push("xalan/structure.xml"); + _workQueue.push("xalan/template.xml"); + _workQueue.push("xalan/terms.xml"); + _workQueue.push("xalan/ui.xml"); + } - // Kill workers and wait for death + // Kill workers and wait for death for (int i = 0; i < WORKERS; i++) { _workQueue.push(""); // "" is a thread die signal } @@ -214,5 +214,5 @@ _workers[i].join(); } System.out.println("Normal completion."); - } + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |