| // Copyright (C) 2023 The Android Open Source Project |
| // |
| // 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. |
| |
| //! Benchmark for libnativewindow AHardwareBuffer bindings |
| |
| #![allow(dead_code)] |
| #![allow(missing_docs)] |
| |
| use criterion::*; |
| use nativewindow::*; |
| |
| #[inline] |
| fn create_720p_buffer() -> HardwareBuffer { |
| HardwareBuffer::new( |
| 1280, |
| 720, |
| 1, |
| AHardwareBuffer_Format::AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM, |
| AHardwareBuffer_UsageFlags::AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN, |
| ) |
| .unwrap() |
| } |
| |
| fn criterion_benchmark(c: &mut Criterion) { |
| 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); |
| criterion_main!(benches); |