[KAFKA-14441] Benchmark performance impact of metrics library

To move forward with KIP-864 and introduce a set of metrics to measure Connectors end-to-end latency, there is an open question whether adding more metrics will be detrimental to the Connectors performance.
My initial understanding is that Kafka metrics library is designed for low writing cost, which is part of the transactional execution of tasks; and most of the cost is paid at the reading side, where instrumentation components query the metric registry.
Therefore, adding more metrics shouldn't be a major issue on the transaction path (e.g. Connectors read/write) as long as the metric queries are sparse and filtered over time.
The benchmark will then be focused on:

How much does measuring a metric impacts a transaction?
How much are transactions impacted when adding more metrics measures (e.g. from 1 to 5, to 10, to 100)?
How much are transactions impacted when querying metrics added?
How much does the frequency of metric queries impact the transactions?

Haven't looked into the benchmarking suite on Kafka project, but the initial setup could contain:

An embedded broker, a producer, and (optionally?) a consumer
Measure the latency and throughput of write to/read from Kafka
Add metric measures and registry queries to test multiple scenarios.

My initial hypothesis/expectations are that adding metrics measures should be fine (the results should represent how much impact is fine, e.g. not meaningful change on throughput, minimal impact to latency). It should also give us evidence on the impact of registry queries, and how much query frequency could affect ongoing transactions, or resource utilization (e.g. CPU)
The initial goal is to support decisions around KIP-864, but hopefully the impact of this study is useful across the project.
References

JIRA: https://issues.apache.org/jira/browse/KAFKA-14441

Found some reasoning and open discussions about the current state of metrics:

KIP-510: https://cwiki.apache.org/confluence/display/KAFKA/KIP-510%3A+Metrics+library+upgrade

Discussion: https://lists.apache.org/thread/psr2xbzy3hcppfv0jw6314rcj0xhr7sw

Reply: https://lists.apache.org/thread/7lqcgwoy43fd6064gogrppy3kbrwxvf8

Thread about developing new Metrics library for the Kafka Producer initially: https://markmail.org/message/5t2xkr57vivjd65u#query:+page:1+mid:caeuiwt7hkqgmxqt+state:results
Ticket to move core to new metrics library: https://issues.apache.org/jira/browse/KAFKA-1930
Ticket to upgrade metrics-core to dropwizard: https://issues.apache.org/jira/browse/KAFKA-960
codahale metrics lib is now dropwizard's: https://mvnrepository.com/artifact/io.dropwizard.metrics/metrics-core

https://metrics.dropwizard.io/4.2.0/getting-started.html
Coda explaining library when at Yammer: https://www.youtube.com/watch?v=czes-oa0yik

Actually, after looking at JMH benchmarks, I think I should take a step back about the benchmark setup. To start, I think measuring the latency of Sensor#record under different contexts should be a fair starting point. e.g:

Setup 1 sensor with no stats
Setup 1 sensor with a mix of stats: Max, Max and Min, Max and Avg, etc.
Setup multiple sensors
With these scenarios we could have an initial idea of the impact of additional Stats or what happens when a new sensor is added.

Draft PR: https://github.com/apache/kafka/pull/13177

Local results:

Benchmark                                     (numSensors)  Mode  Cnt     Score     Error  Units
SensorBenchmark.recordBenchmark                          1  avgt    5    63.055 ±   0.750  ns/op
SensorBenchmark.recordBenchmark                          5  avgt    5   305.286 ±  11.016  ns/op
SensorBenchmark.recordBenchmark                         20  avgt    5  1223.550 ±  17.605  ns/op
SensorBenchmark.recordWithAvgBenchmark                   1  avgt    5    66.492 ±   5.252  ns/op
SensorBenchmark.recordWithAvgBenchmark                   5  avgt    5   348.399 ±  46.864  ns/op
SensorBenchmark.recordWithAvgBenchmark                  20  avgt    5  1369.744 ±  16.707  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                1  avgt    5    74.533 ±   4.098  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                5  avgt    5   396.702 ±  31.569  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark               20  avgt    5  1637.464 ± 131.554  ns/op
SensorBenchmark.recordWithMaxBenchmark                   1  avgt    5    67.479 ±   5.909  ns/op
SensorBenchmark.recordWithMaxBenchmark                   5  avgt    5   379.697 ±  50.697  ns/op
SensorBenchmark.recordWithMaxBenchmark                  20  avgt    5  1413.629 ±  25.398  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark             1  avgt    5    93.630 ±   1.085  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark             5  avgt    5   484.359 ±  37.547  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark            20  avgt    5  2010.380 ±  35.665  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                1  avgt    5    71.852 ±   0.933  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                5  avgt    5   480.204 ± 199.665  ns/op
SensorBenchmark.recordWithMinMaxBenchmark               20  avgt    5  2889.339 ± 232.225  ns/op
JMH benchmarks done

Initial observations:

Adding sensor records call increases latency linearly, adding ~60ns per record call.
Adding stats to the sensors, increases slightly the latency when recording is called, ~10-15ns. e.g. MaxMinAvg ~= 93ns, MaxAvg ~= 75ns
In general, the impact of adding record calls seem relatively small. e.g. for 20K ops/sec, 1.2ms can be attributed to a single Sensor#record call.
There is a higher impact on adding a new sensor compared to adding a stat (4x times)

Found these at clients:test module:

MetricsBench: simple average time execution of a sensor + a bunch of stats.
Microbenchmarks which seems more elaborated, but haven't looked into details yet.

Will see if the new set of JMH tests could replace these ones..

Benchmark                                                                              (numSensors)    Mode      Cnt        Score      Error  Units
SensorBenchmark.recordBenchmark                                                                   1    avgt        4      122.285 ±    3.831  ns/op
SensorBenchmark.recordBenchmark                                                                   5    avgt        4      535.055 ±   10.002  ns/op
SensorBenchmark.recordBenchmark                                                                  20    avgt        4     2153.720 ±  562.511  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            1    avgt        4      148.655 ±    7.245  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            5    avgt        4      801.836 ±   25.243  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                           20    avgt        4     5934.782 ±  463.325  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         1    avgt        4      153.731 ±    8.982  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         5    avgt        4     1067.862 ±   68.656  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                        20    avgt        4    10486.323 ±  209.097  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            1    avgt        4      148.492 ±   20.097  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            5    avgt        4      807.746 ±  300.785  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                           20    avgt        4     6361.096 ± 1160.907  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      1    avgt        4      178.676 ±   12.371  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      5    avgt        4     1749.455 ±  204.069  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                     20    avgt        4    25027.613 ± 1407.740  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         1    avgt        4      158.032 ±    9.249  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         5    avgt        4     1001.310 ±   48.258  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                        20    avgt        4     8958.896 ±  264.169  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     1    avgt        4      133.637 ±    7.675  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     5    avgt        4      766.876 ±   14.212  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                    20    avgt        4     5661.163 ±  463.749  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    1    avgt        4      119.896 ±   13.392  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    5    avgt        4      663.232 ±    9.704  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                   20    avgt        4     4976.913 ±  430.296  ns/op
SensorBenchmark.recordBenchmark                                                                   1  sample  1306062      176.717 ±    2.809  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                             1  sample                92.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                             1  sample               135.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                             1  sample               150.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                             1  sample               156.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                             1  sample               181.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                            1  sample             19325.984             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                           1  sample             32108.598             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                             1  sample            195328.000             ns/op
SensorBenchmark.recordBenchmark                                                                   5  sample  1023159      694.906 ±    7.662  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                             5  sample               455.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                             5  sample               565.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                             5  sample               780.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                             5  sample               847.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                             5  sample              1214.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                            5  sample             24192.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                           5  sample             60338.432             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                             5  sample            716800.000             ns/op
SensorBenchmark.recordBenchmark                                                                  20  sample  1271143     2011.945 ±    7.842  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                            20  sample              1610.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                            20  sample              1750.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                            20  sample              2100.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                            20  sample              2892.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                            20  sample              3616.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                           20  sample             28576.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                          20  sample             77425.357             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                            20  sample           1118208.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            1  sample  1262271      179.238 ±   13.287  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                               1  sample               102.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                               1  sample               140.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                               1  sample               149.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                               1  sample               155.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                               1  sample               174.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                              1  sample             16272.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                             1  sample             29304.730             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                               1  sample           4165632.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            5  sample   933071      719.230 ±    4.662  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                               5  sample               582.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                               5  sample               633.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                               5  sample               681.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                               5  sample               718.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                               5  sample               763.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                              5  sample             24544.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                             5  sample             36588.339             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                               5  sample            178176.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                           20  sample  1042420     4797.208 ±    8.407  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                              20  sample              4052.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                              20  sample              4496.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                              20  sample              4712.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                              20  sample              4976.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                              20  sample             20864.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                             20  sample             32480.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                            20  sample             64432.506             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                              20  sample            113280.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         1  sample  1205175      182.177 ±    2.624  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                         1  sample                68.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                         1  sample               148.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                         1  sample               159.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                         1  sample               169.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                         1  sample               180.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                        1  sample             16730.368             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                       1  sample             29728.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                         1  sample            114944.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         5  sample  1445629      899.259 ±    3.420  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                         5  sample               746.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                         5  sample               828.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                         5  sample               870.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                         5  sample               918.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                         5  sample               994.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                        5  sample             23296.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                       5  sample             33792.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                         5  sample            206848.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                        20  sample  1212757     8237.676 ±   10.315  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                        20  sample              7000.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                        20  sample              7608.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                        20  sample              8192.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                        20  sample              8672.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                        20  sample             28672.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                       20  sample             38336.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                      20  sample             71388.698             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                        20  sample            172544.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            1  sample  1260135      171.441 ±    2.398  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                               1  sample                48.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                               1  sample               141.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                               1  sample               149.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                               1  sample               156.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                               1  sample               166.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                              1  sample             16112.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                             1  sample             29344.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                               1  sample            105856.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            5  sample   927800      722.861 ±    4.686  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                               5  sample               572.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                               5  sample               648.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                               5  sample               686.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                               5  sample               723.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                               5  sample               780.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                              5  sample             24384.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                             5  sample             37070.074             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                               5  sample            213760.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                           20  sample  1010754     4959.078 ±    9.340  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                              20  sample              4248.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                              20  sample              4600.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                              20  sample              4832.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                              20  sample              5200.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                              20  sample             21440.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                             20  sample             34496.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                            20  sample             83446.336             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                              20  sample            215040.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      1  sample  1061095      200.444 ±    2.934  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                   1  sample                73.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                   1  sample               163.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                   1  sample               172.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                   1  sample               181.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                   1  sample               195.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                  1  sample             17696.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                 1  sample             30140.493             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                   1  sample            146688.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      5  sample   860679     1491.948 ±    6.049  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                   5  sample              1264.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                   5  sample              1372.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                   5  sample              1434.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                   5  sample              1522.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                   5  sample              1660.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                  5  sample             27722.240             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                 5  sample             44462.592             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                   5  sample            236800.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                     20  sample  1061996    18787.282 ±   19.680  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                  20  sample             15936.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                  20  sample             17472.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                  20  sample             19040.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                  20  sample             25376.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                  20  sample             52928.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                 20  sample             69760.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                20  sample            100096.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                  20  sample            203008.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         1  sample  1163816      211.907 ±    4.970  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                         1  sample                96.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                         1  sample               146.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                         1  sample               156.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                         1  sample               165.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                         1  sample               210.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                        1  sample             22208.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                       1  sample             67535.142             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                         1  sample            349696.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         5  sample  1350850      965.156 ±    4.210  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                         5  sample               770.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                         5  sample               852.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                         5  sample               959.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                         5  sample               986.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                         5  sample              1504.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                        5  sample             24288.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                       5  sample             43712.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                         5  sample            168192.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                        20  sample  1211711     8249.891 ±   10.594  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                        20  sample              7096.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                        20  sample              7664.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                        20  sample              8144.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                        20  sample              8752.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                        20  sample             28672.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                       20  sample             38528.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                      20  sample             81298.432             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                        20  sample            325632.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     1  sample  1160640      183.623 ±    2.605  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                 1  sample               109.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                 1  sample               150.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                 1  sample               159.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                 1  sample               166.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                 1  sample               178.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999                1  sample             16800.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999               1  sample             29245.949             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                 1  sample            119040.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     5  sample   838436      796.833 ±    5.200  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                 5  sample               590.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                 5  sample               705.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                 5  sample               774.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                 5  sample               802.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                 5  sample               871.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999                5  sample             25554.016             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999               5  sample             37258.003             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                 5  sample            256256.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                    20  sample   926469     5392.666 ±   10.367  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                20  sample              4632.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                20  sample              5008.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                20  sample              5304.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                20  sample              5704.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                20  sample             22432.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999               20  sample             34752.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999              20  sample             73780.736             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                20  sample            699392.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    1  sample  1282204      169.071 ±    2.370  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00               1  sample               105.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50               1  sample               138.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90               1  sample               149.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95               1  sample               155.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99               1  sample               167.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999              1  sample             15840.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999             1  sample             29560.944             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00               1  sample            168192.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    5  sample   961144      698.277 ±    4.367  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00               5  sample               574.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50               5  sample               630.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90               5  sample               662.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95               5  sample               698.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99               5  sample               755.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999              5  sample             23680.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999             5  sample             36578.688             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00               5  sample            204288.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                   20  sample  1056588     4733.302 ±    8.413  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00              20  sample              4052.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50              20  sample              4416.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90              20  sample              4656.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95              20  sample              4976.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99              20  sample             20672.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999             20  sample             33088.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999            20  sample             64064.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00              20  sample            160000.000             ns/op
JMH benchmarks done

Another benchmark on cloud VM:
Benchmark                                                                              (numSensors)    Mode      Cnt         Score      Error  Units
SensorBenchmark.recordBenchmark                                                                   1    avgt       15       109.125 ±    5.510  ns/op
SensorBenchmark.recordBenchmark                                                                   5    avgt       15       445.704 ±   20.800  ns/op
SensorBenchmark.recordBenchmark                                                                  20    avgt       15      1645.009 ±   75.339  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            1    avgt       15       121.343 ±    2.053  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            5    avgt       15       805.070 ±   33.951  ns/op
SensorBenchmark.recordWithAvgBenchmark                                                           20    avgt       15      7227.845 ±  244.446  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         1    avgt       15       142.542 ±    4.683  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         5    avgt       15      1119.803 ±   32.666  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                        20    avgt       15     12453.372 ±  511.857  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            1    avgt       15       125.965 ±    3.164  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            5    avgt       15       827.812 ±   39.137  ns/op
SensorBenchmark.recordWithMaxBenchmark                                                           20    avgt       15      7000.335 ±  340.340  ns/op
SensorBenchmark.recordWithMeterBenchmark                                                          1    avgt       15       131.205 ±    5.760  ns/op
SensorBenchmark.recordWithMeterBenchmark                                                          5    avgt       15      1050.825 ±   76.475  ns/op
SensorBenchmark.recordWithMeterBenchmark                                                         20    avgt       15     11021.135 ±  546.607  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      1    avgt       15       179.738 ±    7.913  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      5    avgt       15      2292.224 ±  117.344  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                     20    avgt       15     29169.516 ± 1213.860  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         1    avgt       15       132.472 ±    2.082  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         5    avgt       15      1084.975 ±   49.543  ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                        20    avgt       15     12255.670 ±  140.900  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     1    avgt       15       134.304 ±    0.713  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     5    avgt       15       927.632 ±   44.955  ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                    20    avgt       15      7531.893 ±  434.583  ns/op
SensorBenchmark.recordWithRateBenchmark                                                           1    avgt       15       126.244 ±    4.928  ns/op
SensorBenchmark.recordWithRateBenchmark                                                           5    avgt       15       809.455 ±   42.499  ns/op
SensorBenchmark.recordWithRateBenchmark                                                          20    avgt       15      6751.876 ±  233.393  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                     1    avgt       15       131.651 ±    5.910  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                     5    avgt       15       873.527 ±   63.419  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                    20    avgt       15      6802.219 ±  395.137  ns/op
SensorBenchmark.recordWithValueBenchmark                                                          1    avgt       15       117.070 ±    3.114  ns/op
SensorBenchmark.recordWithValueBenchmark                                                          5    avgt       15       657.424 ±   28.462  ns/op
SensorBenchmark.recordWithValueBenchmark                                                         20    avgt       15      4514.610 ±   71.976  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    1    avgt       15       122.227 ±    2.738  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    5    avgt       15       844.878 ±   49.692  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                   20    avgt       15      6729.332 ±  254.928  ns/op
SensorBenchmark.recordBenchmark                                                                   1  sample  5264398       162.189 ±    7.229  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                             1  sample                124.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                             1  sample                131.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                             1  sample                133.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                             1  sample                133.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                             1  sample                136.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                            1  sample                285.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                           1  sample              53555.232             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                             1  sample            5283840.000             ns/op
SensorBenchmark.recordBenchmark                                                                   5  sample  5098397       592.376 ±   20.726  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                             5  sample                434.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                             5  sample                452.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                             5  sample                454.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                             5  sample                464.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                             5  sample                471.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                            5  sample              21856.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                           5  sample             197458.022             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                             5  sample           11599872.000             ns/op
SensorBenchmark.recordBenchmark                                                                  20  sample  5618137      1767.309 ±   27.674  ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.00                                            20  sample               1566.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.50                                            20  sample               1620.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.90                                            20  sample               1662.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.95                                            20  sample               1666.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.99                                            20  sample               1688.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.999                                           20  sample              20032.000             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p0.9999                                          20  sample             129687.834             ns/op
SensorBenchmark.recordBenchmark:recordBenchmark·p1.00                                            20  sample           12075008.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            1  sample  4188619       249.650 ±   18.407  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                               1  sample                140.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                               1  sample                157.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                               1  sample                158.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                               1  sample                159.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                               1  sample                170.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                              1  sample               4144.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                             1  sample             128564.992             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                               1  sample            7700480.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                            5  sample  5453581       959.364 ±   18.117  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                               5  sample                723.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                               5  sample                811.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                               5  sample                822.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                               5  sample                827.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                               5  sample                869.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                              5  sample              20320.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                             5  sample             232356.301             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                               5  sample            7806976.000             ns/op
SensorBenchmark.recordWithAvgBenchmark                                                           20  sample  3125527      7159.137 ±   59.125  ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.00                              20  sample               5688.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.50                              20  sample               6624.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.90                              20  sample               6664.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.95                              20  sample               6680.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.99                              20  sample               6832.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.999                             20  sample              84096.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p0.9999                            20  sample            1073152.000             ns/op
SensorBenchmark.recordWithAvgBenchmark:recordWithAvgBenchmark·p1.00                              20  sample           11911168.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         1  sample  3956115       233.489 ±   15.796  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                         1  sample                149.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                         1  sample                163.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                         1  sample                175.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                         1  sample                177.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                         1  sample                183.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                        1  sample               5536.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                       1  sample              87011.430             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                         1  sample            7479296.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                         5  sample  4254193      1237.758 ±   28.840  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                         5  sample                985.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                         5  sample               1082.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                         5  sample               1104.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                         5  sample               1112.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                         5  sample               1144.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                        5  sample              12384.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                       5  sample             226708.634             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                         5  sample           14401536.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark                                                        20  sample  3030563     12638.963 ±   70.466  ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.00                        20  sample              10352.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.50                        20  sample              12080.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.90                        20  sample              12144.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.95                        20  sample              12160.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.99                        20  sample              18272.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.999                       20  sample              81920.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p0.9999                      20  sample            1124352.000             ns/op
SensorBenchmark.recordWithMaxAvgBenchmark:recordWithMaxAvgBenchmark·p1.00                        20  sample           13172736.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            1  sample  3939179       212.175 ±   17.921  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                               1  sample                146.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                               1  sample                161.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                               1  sample                181.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                               1  sample                182.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                               1  sample                195.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                              1  sample               1580.200             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                             1  sample              47183.744             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                               1  sample           10010624.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                            5  sample  5546420       968.486 ±   20.043  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                               5  sample                740.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                               5  sample                826.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                               5  sample                832.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                               5  sample                836.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                               5  sample                882.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                              5  sample              17760.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                             5  sample             209079.245             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                               5  sample            8781824.000             ns/op
SensorBenchmark.recordWithMaxBenchmark                                                           20  sample  4597972      7521.571 ±   45.434  ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.00                              20  sample               5720.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.50                              20  sample               7064.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.90                              20  sample               7192.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.95                              20  sample               7216.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.99                              20  sample               7376.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.999                             20  sample              64960.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p0.9999                            20  sample             809984.000             ns/op
SensorBenchmark.recordWithMaxBenchmark:recordWithMaxBenchmark·p1.00                              20  sample           15007744.000             ns/op
SensorBenchmark.recordWithMeterBenchmark                                                          1  sample  3969748       239.454 ±   17.132  ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.00                           1  sample                150.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.50                           1  sample                164.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.90                           1  sample                166.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.95                           1  sample                175.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.99                           1  sample                181.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.999                          1  sample               5424.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.9999                         1  sample             106246.426             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p1.00                           1  sample            5832704.000             ns/op
SensorBenchmark.recordWithMeterBenchmark                                                          5  sample  4650388      1173.883 ±   29.500  ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.00                           5  sample                900.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.50                           5  sample                986.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.90                           5  sample               1001.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.95                           5  sample               1006.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.99                           5  sample               1046.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.999                          5  sample              18048.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.9999                         5  sample             246754.125             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p1.00                           5  sample           12025856.000             ns/op
SensorBenchmark.recordWithMeterBenchmark                                                         20  sample  3527302     10785.809 ±   47.553  ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.00                          20  sample               8656.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.50                          20  sample              10480.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.90                          20  sample              10544.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.95                          20  sample              10576.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.99                          20  sample              11392.000             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.999                         20  sample              68441.216             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p0.9999                        20  sample             573716.173             ns/op
SensorBenchmark.recordWithMeterBenchmark:recordWithMeterBenchmark·p1.00                          20  sample           22642688.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      1  sample  3555527       261.597 ±   54.764  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                   1  sample                180.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                   1  sample                191.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                   1  sample                194.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                   1  sample                204.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                   1  sample                209.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                  1  sample                377.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                 1  sample              12560.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                   1  sample           24051712.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                      5  sample  4529086      2134.383 ±   19.014  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                   5  sample               1960.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                   5  sample               2060.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                   5  sample               2080.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                   5  sample               2088.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                   5  sample               2128.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                  5  sample              11872.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                 5  sample              75659.686             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                   5  sample           12075008.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark                                                     20  sample  2555694     29416.175 ±   59.552  ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.00                  20  sample              27136.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.50                  20  sample              28864.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.90                  20  sample              29184.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.95                  20  sample              29280.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.99                  20  sample              37504.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.999                 20  sample              83584.000             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p0.9999                20  sample             664291.328             ns/op
SensorBenchmark.recordWithMinMaxAvgBenchmark:recordWithMinMaxAvgBenchmark·p1.00                  20  sample           10649600.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         1  sample  4052708       188.826 ±   10.201  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                         1  sample                152.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                         1  sample                163.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                         1  sample                171.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                         1  sample                173.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                         1  sample                176.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                        1  sample                414.291             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                       1  sample              20238.662             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                         1  sample            6864896.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                         5  sample  4025897      1499.882 ±   50.006  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                         5  sample                997.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                         5  sample               1122.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                         5  sample               1140.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                         5  sample               1146.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                         5  sample               1182.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                        5  sample              41152.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                       5  sample             754084.045             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                         5  sample           24018944.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark                                                        20  sample  3004155     12986.391 ±  120.150  ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.00                        20  sample               9824.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.50                        20  sample              11728.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.90                        20  sample              11792.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.95                        20  sample              11824.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.99                        20  sample              31584.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.999                       20  sample             158464.000             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p0.9999                      20  sample            2308441.702             ns/op
SensorBenchmark.recordWithMinMaxBenchmark:recordWithMinMaxBenchmark·p1.00                        20  sample           24051712.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     1  sample  4415946       191.353 ±   13.389  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                 1  sample                145.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                 1  sample                153.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                 1  sample                154.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                 1  sample                162.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                 1  sample                171.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999                1  sample                557.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999               1  sample              36467.878             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                 1  sample            8880128.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                     5  sample  5061007      1074.343 ±   33.074  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                 5  sample                811.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                 5  sample                911.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                 5  sample                919.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                 5  sample                921.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                 5  sample                969.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999                5  sample              17792.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999               5  sample             224768.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                 5  sample           24018944.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark                                                    20  sample  4662051      7972.666 ±   34.215  ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.00                20  sample               6408.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.50                20  sample               7456.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.90                20  sample               7720.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.95                20  sample               7856.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.99                20  sample              10544.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.999               20  sample              75904.000             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p0.9999              20  sample             666413.875             ns/op
SensorBenchmark.recordWithPercentileBenchmark:recordWithPercentileBenchmark·p1.00                20  sample           11108352.000             ns/op
SensorBenchmark.recordWithRateBenchmark                                                           1  sample  4088401       263.333 ±   28.762  ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.00                             1  sample                144.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.50                             1  sample                156.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.90                             1  sample                168.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.95                             1  sample                169.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.99                             1  sample                182.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.999                            1  sample               8128.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.9999                           1  sample             120192.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p1.00                             1  sample           13205504.000             ns/op
SensorBenchmark.recordWithRateBenchmark                                                           5  sample  5178500       928.691 ±   14.930  ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.00                             5  sample                734.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.50                             5  sample                812.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.90                             5  sample                846.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.95                             5  sample                862.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.99                             5  sample                876.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.999                            5  sample              17056.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.9999                           5  sample             166694.374             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p1.00                             5  sample            7372800.000             ns/op
SensorBenchmark.recordWithRateBenchmark                                                          20  sample  2905810      7003.482 ±  107.337  ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.00                            20  sample               5880.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.50                            20  sample               6712.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.90                            20  sample               6744.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.95                            20  sample               6760.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.99                            20  sample               6848.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.999                           20  sample              20032.000             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p0.9999                          20  sample             138859.238             ns/op
SensorBenchmark.recordWithRateBenchmark:recordWithRateBenchmark·p1.00                            20  sample           16056320.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                     1  sample  4106822       212.965 ±   23.417  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.00                 1  sample                149.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.50                 1  sample                158.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.90                 1  sample                170.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.95                 1  sample                173.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.99                 1  sample                174.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.999                1  sample                441.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.9999               1  sample              39060.333             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p1.00                 1  sample           13467648.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                     5  sample  5430394       978.947 ±   26.592  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.00                 5  sample                731.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.50                 5  sample                814.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.90                 5  sample                834.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.95                 5  sample                843.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.99                 5  sample                881.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.999                5  sample              18208.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.9999               5  sample             225505.664             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p1.00                 5  sample           15466496.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark                                                    20  sample  4802107      7892.013 ±   69.540  ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.00                20  sample               5912.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.50                20  sample               7072.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.90                20  sample               7112.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.95                20  sample               7120.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.99                20  sample               7904.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.999               20  sample             113920.000             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p0.9999              20  sample            1397920.563             ns/op
SensorBenchmark.recordWithSimpleRateBenchmark:recordWithSimpleRateBenchmark·p1.00                20  sample           21757952.000             ns/op
SensorBenchmark.recordWithValueBenchmark                                                          1  sample  4618752       191.375 ±   18.601  ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.00                           1  sample                133.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.50                           1  sample                141.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.90                           1  sample                155.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.95                           1  sample                156.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.99                           1  sample                163.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.999                          1  sample                388.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.9999                         1  sample              63463.904             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p1.00                           1  sample           17563648.000             ns/op
SensorBenchmark.recordWithValueBenchmark                                                          5  sample  3464331       839.179 ±   32.120  ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.00                           5  sample                620.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.50                           5  sample                654.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.90                           5  sample                676.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.95                           5  sample                683.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.99                           5  sample                714.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.999                          5  sample              27360.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.9999                         5  sample             221329.101             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p1.00                           5  sample           12304384.000             ns/op
SensorBenchmark.recordWithValueBenchmark                                                         20  sample  4136085      4629.875 ±   33.944  ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.00                          20  sample               4240.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.50                          20  sample               4440.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.90                          20  sample               4480.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.95                          20  sample               4488.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.99                          20  sample               4560.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.999                         20  sample              25696.000             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p0.9999                        20  sample             197220.198             ns/op
SensorBenchmark.recordWithValueBenchmark:recordWithValueBenchmark·p1.00                          20  sample           15745024.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    1  sample  4262904       212.956 ±   26.783  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00               1  sample                141.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50               1  sample                159.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90               1  sample                169.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95               1  sample                171.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99               1  sample                184.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999              1  sample                947.095             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999             1  sample              41472.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00               1  sample           15335424.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                    5  sample  3429471       863.581 ±   30.261  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00               5  sample                694.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50               5  sample                764.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90               5  sample                768.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95               5  sample                783.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99               5  sample                797.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999              5  sample              15320.448             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999             5  sample              79878.758             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00               5  sample           16072704.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark                                                   20  sample  4731181      7590.039 ±   54.946  ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.00              20  sample               5672.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.50              20  sample               7000.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.90              20  sample               7056.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.95              20  sample               7072.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.99              20  sample               7880.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.999             20  sample              88960.000             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p0.9999            20  sample            1054477.926             ns/op
SensorBenchmark.recordWithWindowedSumBenchmark:recordWithWindowedSumBenchmark·p1.00              20  sample           14139392.000             ns/op
JMH benchmarks done


Mesh: Add an option for calculating tangents if we don't have them.

Important as we might not always have tangents especially true for meshes generated in code.

This is actually done and working for GLTF mesh loading.