From 1b3b5899816ff21d931b7090b635818f195bcb84 Mon Sep 17 00:00:00 2001 From: Xiangpeng Hao Date: Thu, 13 Jun 2024 21:25:20 -0400 Subject: [PATCH] check in a benchmark --- arrow-array/Cargo.toml | 4 +++ arrow-array/benches/gc_view_types.rs | 48 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 arrow-array/benches/gc_view_types.rs diff --git a/arrow-array/Cargo.toml b/arrow-array/Cargo.toml index b00d2c88e1a7..a8dbeded9ce7 100644 --- a/arrow-array/Cargo.toml +++ b/arrow-array/Cargo.toml @@ -62,3 +62,7 @@ criterion = { version = "0.5", default-features = false } [[bench]] name = "occupancy" harness = false + +[[bench]] +name = "gc_view_types" +harness = false diff --git a/arrow-array/benches/gc_view_types.rs b/arrow-array/benches/gc_view_types.rs new file mode 100644 index 000000000000..4b74a8f60b06 --- /dev/null +++ b/arrow-array/benches/gc_view_types.rs @@ -0,0 +1,48 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you 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. + +use arrow_array::StringViewArray; +use criterion::*; + +fn gen_view_array(size: usize) -> StringViewArray { + StringViewArray::from_iter((0..size).map(|v| match v % 3 { + 0 => Some("small"), + 1 => Some("larger than 12 bytes array"), + 2 => None, + _ => unreachable!("unreachable"), + })) +} + +fn criterion_benchmark(c: &mut Criterion) { + let array = gen_view_array(100_000); + + c.bench_function("gc view types all", |b| { + b.iter(|| { + black_box(array.gc()); + }); + }); + + let sliced = array.slice(0, 100_000 / 2); + c.bench_function("gc view types slice half", |b| { + b.iter(|| { + black_box(sliced.gc()); + }); + }); +} + +criterion_group!(benches, criterion_benchmark); +criterion_main!(benches);