1 /*
2  * Copyright 2025 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package androidx.tracing.driver
18 
19 public class PooledTracePacketArray
20 internal constructor(
21     owner: Pool<PooledTracePacketArray>,
22 
23     /**
24      * Array of packets, all pre-allocated, and never modified.
25      *
26      * This is an Array to simplify data access.
27      */
28     @JvmField public val packets: Array<TraceEvent>,
29 
30     /**
31      * Number of items present in [packets] with valid data - all others have been reset with
32      * [TraceEvent.reset]
33      */
34     @field:Suppress("MutableBareField") // public / mutable to minimize overhead
35     @JvmField
36     public var fillCount: Int,
37 ) : Poolable<PooledTracePacketArray>(owner) {
forEachnull38     public inline fun forEach(block: (packet: TraceEvent) -> Unit) {
39         repeat(fillCount) { block(packets[it]) }
40     }
41 
recyclenull42     override fun recycle() {
43         forEach { it.reset() }
44         fillCount = 0
45         owner.release(this)
46     }
47 }
48