1
1
#[ global_allocator]
2
2
static GLOBAL : mimalloc:: MiMalloc = mimalloc:: MiMalloc ;
3
3
4
- use arrow2:: array:: { Array , UnionArray } ;
4
+ use arrow2:: array:: UnionArray ;
5
5
use criterion:: { criterion_group, criterion_main, Criterion } ;
6
6
7
7
use re_arrow_store:: { DataStore , DataStoreConfig , LatestAtQuery , RangeQuery , TimeInt , TimeRange } ;
8
8
use re_log_types:: {
9
9
component_types:: { InstanceKey , Rect2D } ,
10
10
datagen:: { build_frame_nr, build_some_instances, build_some_rects} ,
11
- Component as _, ComponentName , DataRow , DataTable , EntityPath , MsgId , TimeType , Timeline ,
11
+ Component as _, ComponentName , DataCell , DataRow , DataTable , EntityPath , MsgId , TimeType ,
12
+ Timeline ,
12
13
} ;
13
14
14
15
criterion_group ! ( benches, insert, latest_at, latest_at_missing, range) ;
@@ -73,10 +74,7 @@ fn insert(c: &mut Criterion) {
73
74
b. iter ( || {
74
75
insert_table (
75
76
DataStoreConfig {
76
- index_bucket_nb_rows : num_rows_per_bucket,
77
- component_bucket_nb_rows : num_rows_per_bucket,
78
- index_bucket_size_bytes : u64:: MAX ,
79
- component_bucket_size_bytes : u64:: MAX ,
77
+ indexed_bucket_num_rows : num_rows_per_bucket,
80
78
..Default :: default ( )
81
79
} ,
82
80
InstanceKey :: name ( ) ,
@@ -101,10 +99,11 @@ fn latest_at(c: &mut Criterion) {
101
99
group. bench_function ( "default" , |b| {
102
100
let store = insert_table ( Default :: default ( ) , InstanceKey :: name ( ) , & table) ;
103
101
b. iter ( || {
104
- let results = latest_data_at ( & store, Rect2D :: name ( ) , & [ Rect2D :: name ( ) ] ) ;
105
- let rects = results [ 0 ]
102
+ let cells = latest_data_at ( & store, Rect2D :: name ( ) , & [ Rect2D :: name ( ) ] ) ;
103
+ let rects = cells [ 0 ]
106
104
. as_ref ( )
107
105
. unwrap ( )
106
+ . as_arrow_ref ( )
108
107
. as_any ( )
109
108
. downcast_ref :: < UnionArray > ( )
110
109
. unwrap ( ) ;
@@ -116,21 +115,19 @@ fn latest_at(c: &mut Criterion) {
116
115
for & num_rows_per_bucket in num_rows_per_bucket ( ) {
117
116
let store = insert_table (
118
117
DataStoreConfig {
119
- index_bucket_nb_rows : num_rows_per_bucket,
120
- component_bucket_nb_rows : num_rows_per_bucket,
121
- index_bucket_size_bytes : u64:: MAX ,
122
- component_bucket_size_bytes : u64:: MAX ,
118
+ indexed_bucket_num_rows : num_rows_per_bucket,
123
119
..Default :: default ( )
124
120
} ,
125
121
InstanceKey :: name ( ) ,
126
122
& table,
127
123
) ;
128
124
group. bench_function ( format ! ( "bucketsz={num_rows_per_bucket}" ) , |b| {
129
125
b. iter ( || {
130
- let results = latest_data_at ( & store, Rect2D :: name ( ) , & [ Rect2D :: name ( ) ] ) ;
131
- let rects = results [ 0 ]
126
+ let cells = latest_data_at ( & store, Rect2D :: name ( ) , & [ Rect2D :: name ( ) ] ) ;
127
+ let rects = cells [ 0 ]
132
128
. as_ref ( )
133
129
. unwrap ( )
130
+ . as_arrow_ref ( )
134
131
. as_any ( )
135
132
. downcast_ref :: < UnionArray > ( )
136
133
. unwrap ( ) ;
@@ -180,10 +177,7 @@ fn latest_at_missing(c: &mut Criterion) {
180
177
for & num_rows_per_bucket in num_rows_per_bucket ( ) {
181
178
let store = insert_table (
182
179
DataStoreConfig {
183
- index_bucket_nb_rows : num_rows_per_bucket,
184
- component_bucket_nb_rows : num_rows_per_bucket,
185
- index_bucket_size_bytes : u64:: MAX ,
186
- component_bucket_size_bytes : u64:: MAX ,
180
+ indexed_bucket_num_rows : num_rows_per_bucket,
187
181
..Default :: default ( )
188
182
} ,
189
183
InstanceKey :: name ( ) ,
@@ -236,25 +230,23 @@ fn range(c: &mut Criterion) {
236
230
for & num_rows_per_bucket in num_rows_per_bucket ( ) {
237
231
let store = insert_table (
238
232
DataStoreConfig {
239
- index_bucket_nb_rows : num_rows_per_bucket,
240
- component_bucket_nb_rows : num_rows_per_bucket,
241
- index_bucket_size_bytes : u64:: MAX ,
242
- component_bucket_size_bytes : u64:: MAX ,
233
+ indexed_bucket_num_rows : num_rows_per_bucket,
243
234
..Default :: default ( )
244
235
} ,
245
236
InstanceKey :: name ( ) ,
246
237
& table,
247
238
) ;
248
239
group. bench_function ( format ! ( "bucketsz={num_rows_per_bucket}" ) , |b| {
249
240
b. iter ( || {
250
- let msgs = range_data ( & store, [ Rect2D :: name ( ) ] ) ;
251
- for ( cur_time, ( time, results ) ) in msgs . enumerate ( ) {
241
+ let rows = range_data ( & store, [ Rect2D :: name ( ) ] ) ;
242
+ for ( cur_time, ( time, cells ) ) in rows . enumerate ( ) {
252
243
let time = time. unwrap ( ) ;
253
244
assert_eq ! ( cur_time as i64 , time. as_i64( ) ) ;
254
245
255
- let rects = results [ 0 ]
246
+ let rects = cells [ 0 ]
256
247
. as_ref ( )
257
248
. unwrap ( )
249
+ . as_arrow_ref ( )
258
250
. as_any ( )
259
251
. downcast_ref :: < UnionArray > ( )
260
252
. unwrap ( ) ;
@@ -305,26 +297,25 @@ fn latest_data_at<const N: usize>(
305
297
store : & DataStore ,
306
298
primary : ComponentName ,
307
299
secondaries : & [ ComponentName ; N ] ,
308
- ) -> [ Option < Box < dyn Array > > ; N ] {
300
+ ) -> [ Option < DataCell > ; N ] {
309
301
let timeline_frame_nr = Timeline :: new ( "frame_nr" , TimeType :: Sequence ) ;
310
302
let timeline_query = LatestAtQuery :: new ( timeline_frame_nr, ( NUM_ROWS / 2 ) . into ( ) ) ;
311
303
let ent_path = EntityPath :: from ( "rects" ) ;
312
304
313
- let row_indices = store
305
+ store
314
306
. latest_at ( & timeline_query, & ent_path, primary, secondaries)
315
- . unwrap_or_else ( || [ ( ) ; N ] . map ( |_| None ) ) ;
316
- store. get ( secondaries, & row_indices)
307
+ . unwrap_or_else ( || [ ( ) ; N ] . map ( |_| None ) )
317
308
}
318
309
319
310
fn range_data < const N : usize > (
320
311
store : & DataStore ,
321
312
components : [ ComponentName ; N ] ,
322
- ) -> impl Iterator < Item = ( Option < TimeInt > , [ Option < Box < dyn Array > > ; N ] ) > + ' _ {
313
+ ) -> impl Iterator < Item = ( Option < TimeInt > , [ Option < DataCell > ; N ] ) > + ' _ {
323
314
let timeline_frame_nr = Timeline :: new ( "frame_nr" , TimeType :: Sequence ) ;
324
315
let query = RangeQuery :: new ( timeline_frame_nr, TimeRange :: new ( 0 . into ( ) , NUM_ROWS . into ( ) ) ) ;
325
316
let ent_path = EntityPath :: from ( "rects" ) ;
326
317
327
318
store
328
319
. range ( & query, & ent_path, components)
329
- . map ( move |( time, _, row_indices ) | ( time, store . get ( & components , & row_indices ) ) )
320
+ . map ( move |( time, _, cells ) | ( time, cells ) )
330
321
}
0 commit comments