package org.sample;

import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import java.util.concurrent.TimeUnit;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.stream.XMLInputFactory;
import javax.xml.transform.TransformerFactory;

public class MyBenchmark {

    // set JAVA_HOME
    // cd test
    // mvn clean verify
    // java -jar target/benchmarks.jar

    // JI-9076926 star
    static Runnable r;
    static int iterations = 5000;

    @Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public void dom() throws Exception{
        r = DocumentBuilderFactory::newInstance;
		for (int i = 0; i < iterations; i++)
            r.run ();
    }

    @Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public void parser() throws Exception {
        r = SAXParserFactory::newInstance;
		for (int i = 0; i < iterations; i++)
            r.run ();
    }

    @Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public void transformer() throws Exception {
        r = TransformerFactory::newInstance;
		for (int i = 0; i < iterations; i++)
            r.run ();
    }
	
	@Benchmark
    @BenchmarkMode(Mode.SingleShotTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public void input() throws Exception {
        r = XMLInputFactory::newInstance;
		for (int i = 0; i < iterations; i++)
            r.run ();
    }
    // JI-9076926 end

}
