# Caliper global config file
# Users' ~/.caliper/config settings may override these

######################
# VM CONFIGURATION
######################

# This directory can be automatically prepended to non-absolute VM paths
vm.baseDirectory=/usr/local/buildtools/java

# Standard vm parameter options.
vm.args=

# Common configurations

vm.jdk-32-client.home=jdk-32
vm.jdk-32-client.args=-d32 -client

vm.jdk-32-server.home=jdk-32
vm.jdk-32-server.args=-d32 -server

vm.jdk-64-compressed.home=jdk-64
vm.jdk-64-compressed.args=-d64 -XX:+UseCompressedOops

vm.jdk-64-uncompressed.home=jdk-64
vm.jdk-64-uncompressed.args=-d64 -XX:-UseCompressedOops


######################
# INSTRUMENT CONFIG
######################

# To define new instrument configurations, provide an "instrument.<name>.class" property
# pointing to a concrete class that extends com.google.caliper.runner.Instrument, and add
# whichever other options it supports using "instrument.<name>.<optionName>=<value>".

# Instrument "runtime"
instrument.runtime.class=com.google.caliper.runner.RuntimeInstrument

# Do not report any measurements from before this minimum time has elapsed
instrument.runtime.options.warmup=10s
# Interrupt warmup when it has been running for this much wall-clock time,
# even if the measured warmup time (above) hasn't been reached. This prevents fast benchmarks
# with high per-measurement overhead (e.g. long @BeforeRep and @AfterRep methods)
# from taking too long to warm up.
instrument.runtime.options.maxWarmupWallTime=10m

# Caliper chooses rep counts such that the total timing interval comes out near this value.
# Higher values take longer, but are more precise (less vulnerable to fixed costs)
instrument.runtime.options.timingInterval=500ms

# Caliper ultimately records only the final N measurements, where N is this value.
instrument.runtime.options.measurements=9

# Run GC before every measurement?
instrument.runtime.options.gcBeforeEach=true

# Whether or not to make suggestions about whether a benchmark should be a pico/micro/macro
# benchmark.  Note that this will not effect errors that result from benchmarks that are unable to
# take proper measurements due to granularity issues.
instrument.runtime.options.suggestGranularity=true

# Instrument "arbitrary"
instrument.arbitrary.class=com.google.caliper.runner.ArbitraryMeasurementInstrument

# Run GC before every measurement?
instrument.arbitrary.options.gcBeforeEach=false

# Instrument "allocation"
instrument.allocation.class=com.google.caliper.runner.AllocationInstrument

# Track and log a summary of every individual allocation.  This enables better error messages for
# buggy benchmarks and prints detailed reports of allocation behavior in verbose mode.  N.B. This
# can increase the memory usage of the allocation worker significantly, so it is not recommended
# for benchmarks that do a lot of allocation.
instrument.allocation.options.trackAllocations=false


# Sets the maximum number of trials that can run in parallel.
runner.maxParallelism=2

######################
# RESULTS PROCESSORS
######################

results.file.class=com.google.caliper.runner.OutputFileDumper

results.upload.class=com.google.caliper.runner.HttpUploader

results.upload.options.url=https://microbenchmarks.appspot.com/
