Skip to content

Instantly share code, notes, and snippets.

@joaovicente
Created March 27, 2017 10:00
Show Gist options
  • Select an option

  • Save joaovicente/9624d284ab39270c3412899bc6db44ec to your computer and use it in GitHub Desktop.

Select an option

Save joaovicente/9624d284ab39270c3412899bc6db44ec to your computer and use it in GitHub Desktop.

Revisions

  1. joaovicente created this gist Mar 27, 2017.
    112 changes: 112 additions & 0 deletions TracyJmhBenchmark.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,112 @@
    /*
    * Copyright (c) 2014, Oracle America, Inc.
    * All rights reserved.
    *
    * Redistribution and use in source and binary forms, with or without
    * modification, are permitted provided that the following conditions are met:
    *
    * * Redistributions of source code must retain the above copyright notice,
    * this list of conditions and the following disclaimer.
    *
    * * Redistributions in binary form must reproduce the above copyright
    * notice, this list of conditions and the following disclaimer in the
    * documentation and/or other materials provided with the distribution.
    *
    * * Neither the name of Oracle nor the names of its contributors may be used
    * to endorse or promote products derived from this software without
    * specific prior written permission.
    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
    * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
    * THE POSSIBILITY OF SUCH DAMAGE.
    */

    package org.sample;

    import org.openjdk.jmh.annotations.Benchmark;

    import org.openjdk.jmh.annotations.*;
    import org.openjdk.jmh.runner.Runner;
    import org.openjdk.jmh.runner.RunnerException;
    import org.openjdk.jmh.runner.options.Options;
    import org.openjdk.jmh.runner.options.OptionsBuilder;
    import org.openjdk.jmh.annotations.Benchmark;
    import org.openjdk.jmh.infra.Blackhole;

    import java.util.concurrent.TimeUnit;

    import com.apm4all.tracy.Tracy;

    public class MyBenchmark {
    static final String TASK_ID = "T-1234567890123456";
    static final String OPT_ID = "O-123456";
    static final String COMPONENT = "myAwsomeService";
    static final String OUTER = "outer";
    static final String STATUS_NAME = "status";
    static final int STATUS_VALUE = 200;

    @Benchmark
    //@BenchmarkMode(Mode.All)
    @BenchmarkMode(Mode.SampleTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    @Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 10, time = 4, timeUnit = TimeUnit.SECONDS)
    @Threads(5)
    @Fork(2)
    public void testMethodA(Blackhole bh) {
    Tracy.setContext(TASK_ID, OPT_ID, COMPONENT);
    Tracy.before(OUTER);
    Tracy.annotate(STATUS_NAME, STATUS_VALUE);
    Tracy.after(OUTER);
    for (String event : Tracy.getEventsAsJson()) {
    bh.consume(event);
    }
    Tracy.clearContext();
    }

    @Benchmark
    //@BenchmarkMode(Mode.All)
    @BenchmarkMode(Mode.SampleTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    @Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 10, time = 4, timeUnit = TimeUnit.SECONDS)
    @Threads(5)
    @Fork(2)
    public void testMethodA1(Blackhole bh) {
    Tracy.setContext("null", "null", "COMPONENT");
    Tracy.before("OUTER");
    Tracy.annotate("status", 200);
    Tracy.after("OUTER");
    for (String event : Tracy.getEventsAsJson()) {
    bh.consume(event);
    }
    Tracy.clearContext();
    }

    @Benchmark
    //@BenchmarkMode(Mode.All)
    @BenchmarkMode(Mode.SampleTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    @Warmup(iterations = 2, time = 1, timeUnit = TimeUnit.SECONDS)
    @Measurement(iterations = 10, time = 4, timeUnit = TimeUnit.SECONDS)
    @Threads(5)
    @Fork(2)
    public void testMethodB(Blackhole bh) {
    Tracy.setContext("null", "null", "COMPONENT");
    Tracy.before("OUTER");
    Tracy.annotate("status", "\"200");
    Tracy.after("OUTER");
    for (String event : Tracy.getEventsAsJson()) {
    bh.consume(event);
    }
    Tracy.clearContext();
    }
    }