BenchmarkRuleKt

Added in 1.0.0

public final class BenchmarkRuleKt


Summary

Public methods

static final void
measureRepeated(
    @NonNull BenchmarkRule receiver,
    @NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block
)

Benchmark a block of code.

static final void
measureRepeatedOnMainThread(
    @NonNull BenchmarkRule receiver,
    @NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block
)

Benchmark a block of code, which runs on the main thread, and can safely interact with UI.

Public methods

measureRepeated

public static final void measureRepeated(
    @NonNull BenchmarkRule receiver,
    @NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block
)

Benchmark a block of code.

import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.test.ext.junit.runners.AndroidJUnit4 @RunWith(AndroidJUnit4::class) class MyBenchmark {  @get:Rule val benchmarkRule = BenchmarkRule()  @Test  fun measureWork() {  benchmarkRule.measureRepeated { doSomeWork() }  } }
Parameters
@NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block

The block of code to benchmark.

measureRepeatedOnMainThread

public static final void measureRepeatedOnMainThread(
    @NonNull BenchmarkRule receiver,
    @NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block
)

Benchmark a block of code, which runs on the main thread, and can safely interact with UI.

While @UiThreadRule works for a standard test, it doesn't work for benchmarks of arbitrary duration, as they may run for much more than 5 seconds and suffer ANRs, especially in continuous runs.

import androidx.benchmark.junit4.BenchmarkRule import androidx.benchmark.junit4.measureRepeated import androidx.benchmark.junit4.measureRepeatedOnMainThread import androidx.test.ext.junit.runners.AndroidJUnit4 @RunWith(AndroidJUnit4::class) class MainThreadBenchmark {  @get:Rule val benchmarkRule = BenchmarkRule()  @Test  fun measureWork() {  benchmarkRule.measureRepeatedOnMainThread {  // this block is run on the main thread  doSomeWorkOnMainThread()  }  } }
Parameters
@NonNull Function1<@NonNull BenchmarkRule.ScopeUnit> block

The block of code to benchmark.

Throws
java.lang.Throwable

when an exception is thrown on the main thread.

kotlin.IllegalStateException

if a hard deadline is exceeded while the block is running on the main thread.