/* * Copyright (c) 2007 Matthew Hall and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Matthew Hall - initial API and implementation */ package org.eclipse.nebula.paperclips.tests.main; import java.text.NumberFormat; import org.eclipse.nebula.paperclips.core.PaperClips; import org.eclipse.nebula.paperclips.core.Print; import org.eclipse.nebula.paperclips.core.PrintJob; import org.eclipse.nebula.paperclips.snippets.Snippet2; import org.eclipse.nebula.paperclips.snippets.Snippet3; import org.eclipse.nebula.paperclips.snippets.Snippet4; import org.eclipse.nebula.paperclips.snippets.Snippet5; import org.eclipse.nebula.paperclips.snippets.Snippet6; import org.eclipse.nebula.paperclips.snippets.Snippet7; import org.eclipse.nebula.paperclips.snippets.Snippet8; import org.eclipse.nebula.paperclips.tests.benchmark.Benchmark; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.printing.Printer; import org.eclipse.swt.widgets.Display; /** * Benchmarks the time required to layout the various snippets. * * @author Matthew */ public class SnippetBenchmarks { /** * Executes the benchmark. * * @param args * command-line args. */ public static void main(String[] args) { // Bug in SWT--a Display must be instantiated under Linux in order to // use printer Display.getDefault(); benchmarkSnippet8(); } private static void benchmarkSnippet8() { final Printer printer = new Printer(); printer.startJob("benchmarkSnippet8"); final PrintJob job = new PrintJob("Snippet8", Snippet8.createPrint()); final GC gc = new GC(printer); new Benchmark().setName("getPageEnumeration").setRunCount(10).execute( new Runnable() { public void run() { PaperClips.getPageEnumeration(job, printer, gc) .nextPage(); } }); gc.dispose(); new Benchmark().setName("getPages").setRunCount(10).execute( new Runnable() { public void run() { PaperClips.getPages(job, printer); } }); printer.cancelJob(); printer.dispose(); } static void benchmarkSnippets() { String[] names = {"Snippet2", "Snippet3", "Snippet4", "Snippet5", "Snippet6", "Snippet7"}; Print[] documents = {Snippet2.createPrint(), Snippet3.createPrint(), Snippet4.createPrint(), Snippet5.createPrint(), Snippet6.createPrint(), Snippet7.createPrint()}; final Printer printer = new Printer(); printer.startJob("benchmarkSnippets"); final int RUN_COUNT = 100; long total = 0; for (int i = 0; i < documents.length; i++) { final PrintJob job = new PrintJob(names[i], documents[i]) .setMargins(108); total += new Benchmark().setRunCount(RUN_COUNT).setName(names[i]) .execute(new Runnable() { public void run() { PaperClips.getPages(job, printer); } }); } printer.cancelJob(); printer.dispose(); printFinalResult(total, total / (double) (RUN_COUNT * documents.length)); } private static void printFinalResult(long total, final double average) { System.out.println(); System.out.println("Grand total:\t" + total + "ms"); NumberFormat format = NumberFormat.getNumberInstance(); format.setMinimumFractionDigits(1); format.setMaximumFractionDigits(1); System.out.println("Average: \t" + format.format(average) + "ms"); } }