[NUI] Cache KeyEventArgs in View.
authorhuayong.xu <huayong.xu@samsung.com>
Wed, 16 Apr 2025 07:24:14 +0000 (15:24 +0800)
committerJiyun Yang <ji.yang@samsung.com>
Wed, 23 Apr 2025 05:51:52 +0000 (14:51 +0900)
When KeyEvent is triggered frequently, a cache can reduce the peak value
of memory usage.

src/Tizen.NUI/src/public/BaseComponents/ViewEvent.cs

index 32faa31def1edcb1df04ab804e98f03a358aca53..d66e7ccf5c7d28b7fdd9279b81c5d3e53d78cb9a 100755 (executable)
@@ -837,6 +837,8 @@ namespace Tizen.NUI.BaseComponents
             keyInputFocusLostEventHandler?.Invoke(this, null);
         }
 
+        private KeyEventArgs keyEventArgs;
+
         private bool OnKeyEvent(IntPtr view, IntPtr keyEvent)
         {
             if (Disposed || IsDisposeQueued)
@@ -851,23 +853,23 @@ namespace Tizen.NUI.BaseComponents
                 return true;
             }
 
-            KeyEventArgs e = new KeyEventArgs();
+            if (keyEventArgs == null)
+            {
+                keyEventArgs = new KeyEventArgs();
+            }
 
             bool result = false;
-
-            e.Key = Tizen.NUI.Key.GetKeyFromPtr(keyEvent);
-
+            using var key = Tizen.NUI.Key.GetKeyFromPtr(keyEvent);
+            keyEventArgs.Key = key;
             if (keyEventHandler != null)
             {
                 Delegate[] delegateList = keyEventHandler.GetInvocationList();
-
-                // Oring the result of each callback.
+                // ORing the result of each callback.
                 foreach (EventHandlerWithReturnType<object, KeyEventArgs, bool> del in delegateList)
                 {
-                    result |= del(this, e);
+                    result |= del(this, keyEventArgs);
                 }
             }
-
             return result;
         }