From 5558de81cce67fe38b595781d698fec1d904b893 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Sun, 21 Jun 2026 20:06:38 +0900 Subject: [PATCH 1/2] [Tizen.Multimedia.Remoting] Cache Enum.GetValues for MediaController capability enums Replace per-call Enum.GetValues(typeof(T)), which returns a non-generic Array (boxing each enum value and allocating a new array on every call), with static readonly caches populated once via the generic Enum.GetValues() overload. Applied to the four capability/display-mode conversion sites in MediaController. - s_allPlaybackActions shared by GetPlaybackCapabilities and the PlaybackCapabilityUpdated event handler (a per-server-change hot path). - s_allDisplayModes / s_allDisplayRotations for the DisplayMode and DisplayRotation ToPublicList helpers. Enumeration order and results are unchanged; public API is unaffected. Fixes #7642 Co-Authored-By: Claude Opus 4.8 (1M context) --- .../MediaController/MediaControlEnums.cs | 10 ++++++++-- .../MediaController/MediaController.Events.cs | 2 +- .../MediaController/MediaController.cs | 5 ++++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs b/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs index ef908a20b3e..7455c929510 100644 --- a/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs +++ b/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs @@ -378,6 +378,12 @@ public enum MediaControlResult internal static class EnumExtensions { + private static readonly MediaControlNativeDisplayMode[] s_allDisplayModes + = Enum.GetValues(); + + private static readonly MediaControlNativeDisplayRotation[] s_allDisplayRotations + = Enum.GetValues(); + internal static MediaControlPlaybackState ToPublic(this MediaControllerNativePlaybackState nativeState) { switch (nativeState) @@ -528,7 +534,7 @@ internal static IList ToPublicList(this MediaControlNat { var supportedModes = new List(); - foreach (MediaControlNativeDisplayMode mode in Enum.GetValues(typeof(MediaControlNativeDisplayMode))) + foreach (MediaControlNativeDisplayMode mode in s_allDisplayModes) { if (modes.HasFlag(mode)) { @@ -592,7 +598,7 @@ internal static IList ToPublicList(this MediaControlNativeDisplayRotat { var supportedRotations = new List(); - foreach (MediaControlNativeDisplayRotation mode in Enum.GetValues(typeof(MediaControlNativeDisplayRotation))) + foreach (MediaControlNativeDisplayRotation mode in s_allDisplayRotations) { if (modes.HasFlag(mode)) { diff --git a/src/Tizen.Multimedia.Remoting/MediaController/MediaController.Events.cs b/src/Tizen.Multimedia.Remoting/MediaController/MediaController.Events.cs index 98907a6dbcc..1a4971aa250 100644 --- a/src/Tizen.Multimedia.Remoting/MediaController/MediaController.Events.cs +++ b/src/Tizen.Multimedia.Remoting/MediaController/MediaController.Events.cs @@ -204,7 +204,7 @@ private PlaybackCapabilityUpdatedEventArgs CreatePlaybackCapabilityUpdatedEventA var capabilities = new Dictionary(); try { - foreach (MediaControllerNativePlaybackAction action in Enum.GetValues(typeof(MediaControllerNativePlaybackAction))) + foreach (MediaControllerNativePlaybackAction action in s_allPlaybackActions) { Native.GetPlaybackCapability(playbackCapaHandle, action, out MediaControlCapabilitySupport support); capabilities.Add(action.ToPublic(), support); diff --git a/src/Tizen.Multimedia.Remoting/MediaController/MediaController.cs b/src/Tizen.Multimedia.Remoting/MediaController/MediaController.cs index 6aaf55d5e23..e903d32dcaa 100644 --- a/src/Tizen.Multimedia.Remoting/MediaController/MediaController.cs +++ b/src/Tizen.Multimedia.Remoting/MediaController/MediaController.cs @@ -31,6 +31,9 @@ namespace Tizen.Multimedia.Remoting /// 4 public partial class MediaController { + private static readonly MediaControllerNativePlaybackAction[] s_allPlaybackActions + = Enum.GetValues(); + internal MediaController(MediaControllerManager manager, string serverAppId) { Debug.Assert(manager != null); @@ -539,7 +542,7 @@ public Dictionary Ge Native.GetPlaybackCapabilityHandle(Manager.Handle, ServerAppId, out playbackCapaHandle). ThrowIfError("Failed to get playback capability handle."); - foreach (MediaControllerNativePlaybackAction action in Enum.GetValues(typeof(MediaControllerNativePlaybackAction))) + foreach (MediaControllerNativePlaybackAction action in s_allPlaybackActions) { Native.GetPlaybackCapability(playbackCapaHandle, action, out MediaControlCapabilitySupport support); playbackCapabilities.Add(action.ToPublic(), support); From b0a9918309bac83c45c4b6209f2dc693cb8e33d2 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Mon, 22 Jun 2026 21:05:17 +0900 Subject: [PATCH 2/2] Address review feedback Replace Enum.GetValues() with explicit per-flag arrays for the display mode and rotation capability enums. Enum.GetValues included the aggregate All member, causing ToPublicList to emit a duplicate entry (and call ToPublic with All) when all flags were set. Applied-Human-Comments: 3448302429 --- .../MediaController/MediaControlEnums.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs b/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs index 7455c929510..6c36052c3a1 100644 --- a/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs +++ b/src/Tizen.Multimedia.Remoting/MediaController/MediaControlEnums.cs @@ -378,11 +378,21 @@ public enum MediaControlResult internal static class EnumExtensions { - private static readonly MediaControlNativeDisplayMode[] s_allDisplayModes - = Enum.GetValues(); + private static readonly MediaControlNativeDisplayMode[] s_allDisplayModes = new[] + { + MediaControlNativeDisplayMode.LetterBox, + MediaControlNativeDisplayMode.OriginSize, + MediaControlNativeDisplayMode.FullScreen, + MediaControlNativeDisplayMode.CroppedFull + }; - private static readonly MediaControlNativeDisplayRotation[] s_allDisplayRotations - = Enum.GetValues(); + private static readonly MediaControlNativeDisplayRotation[] s_allDisplayRotations = new[] + { + MediaControlNativeDisplayRotation.Rotate0, + MediaControlNativeDisplayRotation.Rotate90, + MediaControlNativeDisplayRotation.Rotate180, + MediaControlNativeDisplayRotation.Rotate270 + }; internal static MediaControlPlaybackState ToPublic(this MediaControllerNativePlaybackState nativeState) {