diff options
| author | 2023-08-09 20:20:17 +0000 | |
|---|---|---|
| committer | 2023-08-09 20:30:46 +0000 | |
| commit | 2dbcb1fe112ee5a73b5aac77650ef2d51c4df4bd (patch) | |
| tree | 6f4f61c93b9f6bf5b8d0cac8cefbaac166a5ee4c | |
| parent | 452c84ef3d0b658109b11336dbc38dcfbe7de933 (diff) | |
nativewindow: Add more benchmarks to evaluate FFI costs
This CL adds two new benchmarks, one for getting an AHardwareBuffer's ID
and another for getting its description.
These should (and do) ultimately take the same amount of time.
Test: just adding new tests
Change-Id: I5e09a2736ab829ca465aaa4073b439a605d49b5a
| -rw-r--r-- | libs/nativewindow/tests/benchmark/buffer_benchmarks.cc | 52 | ||||
| -rw-r--r-- | libs/nativewindow/tests/benchmark/buffer_benchmarks.rs | 30 |
2 files changed, 69 insertions, 13 deletions
diff --git a/libs/nativewindow/tests/benchmark/buffer_benchmarks.cc b/libs/nativewindow/tests/benchmark/buffer_benchmarks.cc index 0ead1a2926..9b31993809 100644 --- a/libs/nativewindow/tests/benchmark/buffer_benchmarks.cc +++ b/libs/nativewindow/tests/benchmark/buffer_benchmarks.cc @@ -16,16 +16,17 @@ #include <android/hardware_buffer.h> #include <benchmark/benchmark.h> +constexpr AHardwareBuffer_Desc k720pDesc = {.width = 1280, + .height = 720, + .layers = 1, + .format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, + .usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN, + .stride = 0}; + static void BM_BufferAllocationDeallocation(benchmark::State& state) { - AHardwareBuffer_Desc buffer_desc = {.width = 1280, - .height = 720, - .layers = 1, - .format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, - .usage = AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN, - .stride = 0}; AHardwareBuffer* buffer = nullptr; for (auto _ : state) { - int status = AHardwareBuffer_allocate(&buffer_desc, &buffer); + int status = AHardwareBuffer_allocate(&k720pDesc, &buffer); if (UNLIKELY(status != 0)) { state.SkipWithError("Unable to allocate buffer."); } @@ -35,4 +36,39 @@ static void BM_BufferAllocationDeallocation(benchmark::State& state) { } BENCHMARK(BM_BufferAllocationDeallocation); -BENCHMARK_MAIN();
\ No newline at end of file +static void BM_AHardwareBuffer_Id(benchmark::State& state) { + AHardwareBuffer* buffer = nullptr; + int status = AHardwareBuffer_allocate(&k720pDesc, &buffer); + if (UNLIKELY(status != 0)) { + state.SkipWithError("Unable to allocate buffer."); + } + + for (auto _ : state) { + uint64_t id = 0; + int status = AHardwareBuffer_getId(buffer, &id); + if (UNLIKELY(status != 0)) { + state.SkipWithError("Unable to get ID."); + } + } + + AHardwareBuffer_release(buffer); +} +BENCHMARK(BM_AHardwareBuffer_Id); + +static void BM_AHardwareBuffer_Desc(benchmark::State& state) { + AHardwareBuffer* buffer = nullptr; + int status = AHardwareBuffer_allocate(&k720pDesc, &buffer); + if (UNLIKELY(status != 0)) { + state.SkipWithError("Unable to allocate buffer."); + } + + for (auto _ : state) { + AHardwareBuffer_Desc desc = {}; + AHardwareBuffer_describe(buffer, &desc); + } + + AHardwareBuffer_release(buffer); +} +BENCHMARK(BM_AHardwareBuffer_Desc); + +BENCHMARK_MAIN(); diff --git a/libs/nativewindow/tests/benchmark/buffer_benchmarks.rs b/libs/nativewindow/tests/benchmark/buffer_benchmarks.rs index 3ef0f5e8c7..fbd49c0b50 100644 --- a/libs/nativewindow/tests/benchmark/buffer_benchmarks.rs +++ b/libs/nativewindow/tests/benchmark/buffer_benchmarks.rs @@ -20,20 +20,40 @@ use criterion::*; use nativewindow::*; -fn allocate_deallocate() { - let buffer = AHardwareBuffer::new( +#[inline] +fn create_720p_buffer() -> AHardwareBuffer { + AHardwareBuffer::new( 1280, 720, 1, AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, AHardwareBuffer_UsageFlags::AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN, ) - .unwrap(); - drop(buffer); + .unwrap() } fn criterion_benchmark(c: &mut Criterion) { - c.bench_function("allocate_deallocate", |b| b.iter(allocate_deallocate)); + c.bench_function("allocate_deallocate", |b| { + b.iter(|| { + let buffer = create_720p_buffer(); + drop(buffer); + }) + }); + + let buffer = create_720p_buffer(); + c.bench_with_input(BenchmarkId::new("id", "buffer"), &buffer, |b, buffer| { + b.iter(|| { + buffer.id(); + }) + }); + + // This benchmark exercises getters that need to fetch data via an + // underlying call to AHardwareBuffer_describe. + c.bench_with_input(BenchmarkId::new("desc", "buffer"), &buffer, |b, buffer| { + b.iter(|| { + buffer.width(); + }) + }); } criterion_group!(benches, criterion_benchmark); |