From 055ff86ec3728c013417927b7685e5c30050c5c5 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Sun, 5 Jul 2026 20:06:19 +0900 Subject: [PATCH 1/2] Refactor: Cache Marshal.SizeOf in Sensor batch event hot path (Fixes #7658) Sensor.updateBatchEvents is invoked from native sensor callbacks and called Marshal.SizeOf() on every loop iteration. The struct layout is fixed at compile time, so the size is now computed once into a static readonly field, removing per-event reflection/marshalling metadata lookups from the batch hot path. Co-Authored-By: Claude Fable 5 --- src/Tizen.Sensor/Tizen.Sensor/Sensor.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs b/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs index 5a00dec9547..d0b9fabfef5 100755 --- a/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs +++ b/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs @@ -48,6 +48,7 @@ public abstract class Sensor : IDisposable private SensorPausePolicy _pausePolicy = SensorPausePolicy.None; private IntPtr _sensorHandle = IntPtr.Zero; private IntPtr _listenerHandle = IntPtr.Zero; + private static readonly int s_sensorEventStructSize = Marshal.SizeOf(); internal IList BatchedEvents { get; set; } = new List(); @@ -93,7 +94,7 @@ internal void updateBatchEvents(IntPtr eventsPtr, uint events_count) for (int i = 0; i < events_count; i++) { BatchedEvents.Add(Interop.IntPtrToEventStruct(currentPtr)); - currentPtr += Marshal.SizeOf(); + currentPtr += s_sensorEventStructSize; } } } From 7e2b6c03218e9721c8782237bf409468eddefd96 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Mon, 6 Jul 2026 21:06:44 +0900 Subject: [PATCH 2/2] Address review feedback Pre-size BatchedEvents list capacity in updateBatchEvents to avoid repeated internal array reallocations in the batch event hot path Applied-Human-Comments: 3524742585 --- src/Tizen.Sensor/Tizen.Sensor/Sensor.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs b/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs index d0b9fabfef5..322457d2c29 100755 --- a/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs +++ b/src/Tizen.Sensor/Tizen.Sensor/Sensor.cs @@ -90,6 +90,11 @@ internal void updateBatchEvents(IntPtr eventsPtr, uint events_count) if (events_count >= 1) { BatchedEvents.Clear(); + if (BatchedEvents is List list && list.Capacity < events_count) + { + list.Capacity = (int)events_count; + } + IntPtr currentPtr = eventsPtr; for (int i = 0; i < events_count; i++) {