-----------------------------------------------------------------------
Introduction
-----------------------------------------------------------------------

J2DBench is a  suite of benchmarks with a GUI front  end that lets you
analyze the  performance of many Java2D graphical  operations. You can
easily modify  the test  options, and save  them for later  runs using
GUI, or  load them in batch  mode to allow quick  testing on different
builds.   It  also  provides  logging  of  the  result,  to  make  the
comparison of the collected data easier.

J2DAnalyzer  is  J2DBench  a  results  analyzer/comparator  which  can
compare the results generated by the J2DBench runs.

XMLHTMLReporter is an additional tool  which can create an html report
from the results files generated by the J2DBench runs.

-----------------------------------------------------------------------
Minimum requirements
-----------------------------------------------------------------------

The benchmark requires at least jdk1.4 to compile and
at least jdk1.2** to run.

** Note: the goal is to make the benchmark run on 1.1.x as well.

-----------------------------------------------------------------------
How To Compile
-----------------------------------------------------------------------

#> cd J2DBench

The benchmark can be compiled by using either ant:

#> ant

or gnumake (assuming there's 'javac' in the path):

#> gnumake

The jar files will be generated into J2DBench/dist directory.

Note that the workspace also contains Netbeans 4.0 project file:
  J2DBench/nbproject/project.xml
allowing it to be easily imported into Netbeans.

-----------------------------------------------------------------------
How To Run J2DBench, J2DAnalyzer, XMLHTMLReporter
-----------------------------------------------------------------------

#> ant run
  or
#> java -jar dist/J2DBench.jar

To get help page for each of the tools, run:
#> java -jar dist/J2DBench.jar -help
#> java -jar dist/J2DAnalyzer.jar -help
#> java -cp dist/J2DAnalyzer.jar j2dbench.report.XMLHTMLReporter -help

-----------------------------------------------------------------------
Using J2DBench GUI to Create Options File
-----------------------------------------------------------------------

There are global  options, options specific to a  group of benchmarks,
and benchmark-specific options.

Global  options affect all  groups of  benchmarks, group  options only
affect benchmarks in particular group, and benchmark-specific ones are
relevant to a single benchmark.

Examples of important global options:
  Calibration: 
    if the "Fixed Number of reps" is set to 0, J2DBench will calibrate
    each individual benchmark, meaning that it will determine how many
    repetitions each benchmark can perform in "Target Test Time", and
    use this number of repetitions for each Test Run.

    If "Fixed Number of reps" is non-0, each benchmark will be run for
    specified number  of repetitions.  The use of  Calibration mode is
    preferable because  the time per  operation can vary  widely among
    the various tests.

  Output Destinations: 
    where the benchmarks will render to.
    All selected  benchmarks will be repeated for each selected
    destination.

Example of benchmark group options:
TextBenchmarks/TextOptions/Graphics
  Text AntiAlias: 
    whether to use text antialiasing for text benchmarks

Example of a benchmark option:
Graphics Benchmarks/Imaging Benchmarks:
  Image Rendering Sources (for Imaging Benchmarks only): 
    the source image types used for testing

Example of a benchmark:
Graphics Benchmarks/Imaging Benchmarks/Image Rendering Tests:
  drawImage(img, tx, obs): 
    test the Graphics2D's
      drawImage(Image image, AffineTransform tx, ImageObserver obs)
    operation. 

General note: you can chose multiple options in some cases by holding
Shift or Ctrl key.

-----------------------------------------------------------------------
Use Scenario
-----------------------------------------------------------------------

Suppose you want to compare rendering performance of the default
and opengl pipelines.

Start J2DBench (assuming the current dir is J2DBench's top dir)
#> java -jar dist/J2DBench.jar

You can  either create and save  the option file  by selecting desired
tests and their attributes, or use one of the provided option files in
options/ directory (for example, default.opt, which is used below).

Note that it's very easy to  create an option file which would take an
extremely  long time  to  execute the  tests,  so be  be careful  when
choosing the options and benchmarks to run.

After the options file is created, start J2DBench in batch mode to run
the benchmarks for the default pipeline:
#> java -jar dest/J2DBench.jar -batch -loadopts options/default.opt \
     -saveres default.res -title "Rendering - Default ppl" \
     -desc "Rendering tests with the default pipeline"

This command  will run  the benchmarks defined  in options/default.opt
file and save the result in default.res file.

(You can also run selected tests directly from the GUI mode by hitting
"Run Tests" in the J2DBench dialog)

Now run the benchmark with opengl pipeline:
#> java -Dsun.java2d.opengl=True -jar dest/J2DBench.jar -batch \
     -loadopts options/default.opt \
     -saveres opengl.res -title "Rendering - OpenGL" \
     -desc "Rendering tests with OpenGL pipeline"

Now let's analyze the results using J2DAnalyzer:
#> java -jar dest/J2DAnalyzer.jar default.res opengl.res

Note that you can compare more than two sets of results, see
J2DAnalyzer's help page.

You can also generate html pages from the results files using
j2dbench.report.XMLHTMLReporter class in J2DAnalyzer.jar.  Suppose
generated pages are to be stored in html_results directory.

First, make sure html_results/testcases directory exists:
#> mkdir -p html_results/testcases

Then generate the report:
#> java -cp J2DAnalyzer.jar j2dbench.report.XMLHTMLReporter \
     -r html_results -b default.res -t opengl.res

The html report will be generated in html_results/ directory.
The index page:
  html_results/Summary_Report.html
