Benchit

General

Category
Free
Tag
Benchmarking
License
Apache License, Version 2.0
Min SDK
8 (Android 2.2–2.2.3 Froyo)
Registered
Apr 26, 2015
Favorites
5
Link
https://github.com/T-Spoon/Benchit
See also
Tiny Dancer
Chronometro
Meter
Pury

Additional

Language
Java
Version
v1.0.2 (Apr 25, 2015)
Created
Aug 23, 2014
Updated
Oct 2, 2015 (Retired)
Owner
Oisin O'Neill (T-Spoon)
Contributors
egor-n
Oisin O'Neill (T-Spoon)
2
Activity
Badge
Generate
Download
Source code
APK file

Advertising

Benchit

Fast & simple benchmarking framework for Android. Ever had the feeling that certain parts of your code were slow? Now you can prove it (and make sure your refactor worked)!

Usage

for(int i = 0; i < 10; i++) {
    Benchit.begin("benchmark-name");
    // Code you want to benchmark
    Benchit.end("benchmark-name").log();
}
Benchit.analyze("benchmark-name").log();

In your LogCat output you should see something like the following:

D/Benchit﹕[benchmark-name] --> Sample Size[10], Average[22ms], Range[20ms --> 33ms], Deviation[4ms]

You can also compare multiple benchmarks:

// Compare & print results of all Benchmarks
Benchit.compare(Benchit.Stat.STANDARD_DEVIATION).log();
// Compare & print results of specific Benchmarks
Benchit.compare(Benchit.Stat.RANGE, Benchit.Order.ASCENDING, "benchmark-one", "benchmark-two").log();

Configuration

// Statistics to calculate.  By default all are enabled.
Benchit.setEnabledStats(Benchit.Stat.AVERAGE, Benchit.Stat.STANDARD_DEVIATION);
// Sets the precision for all future benchmarks.  Default is Milliseconds
Benchit.setDefaultPrecision(Benchit.Precision.MICRO);

Tips

Benchmarking can be a funny thing. The Dalvik JIT & ART AoT compilers can optimize certain blocks of code without you knowing, which could lead to inaccurate results. So here are a couple of tips for ensuring your benchmarking correctly (or as correctly as possible):

  • Run your benchmarks for enough iterations to be meaningful. If you see inconsistent results, the code probably hasn't been run enough.
  • Run System.gc() between benchmarks, so that the likelihood of a garbage collector pause during one of your tests is reduced.
  • As always - don't over-optimize! If the differences in your benchmarks aren't significant, then don't sacrifice simplicity & readability for speed.

Download

Add the following code to your build.gradle file (as described on JitPack)

repositories {
    maven {
        url "https://jitpack.io"
    }
}
dependencies {
    compile 'com.github.T-Spoon:Benchit:v1.0.2'
}

License

Copyright 2015 Oisín O'Neill

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.