From e7728a14a7b61490910fd7e10511467daccfcdff Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Thu, 20 Oct 2022 21:30:37 +0900 Subject: [PATCH] [NUI][API10] Reduce PropertyValue creation during Animation There was some PropertyValue creation during data conversion. Let we reduce new PropertyValue class creation so GC feel happy This patch is copy of https://github.com/Samsung/TizenFX/pull/4674 Signed-off-by: Eunki, Hong --- src/Tizen.NUI/Tizen.NUI.csproj | 2 +- .../src/internal/Common/PropertyHelper.cs | 21 ++++ .../src/internal/Interop/Interop.Animation.cs | 26 +++++ .../src/internal/Interop/Interop.PropertyValue.cs | 5 + src/Tizen.NUI/src/public/Animation/Animation.cs | 94 ++++++++++++++++++ src/Tizen.NUI/src/public/Common/PropertyValue.cs | 106 +++++++++++++++++++++ 6 files changed, 253 insertions(+), 1 deletion(-) diff --git a/src/Tizen.NUI/Tizen.NUI.csproj b/src/Tizen.NUI/Tizen.NUI.csproj index 93e8196..889d37d 100755 --- a/src/Tizen.NUI/Tizen.NUI.csproj +++ b/src/Tizen.NUI/Tizen.NUI.csproj @@ -5,7 +5,7 @@ 8.0 - NUI_DEBUG_OFF;NUI_PROPERTY_CHANGE_1;NUI_PROPERTY_CHANGE_2;NUI_PROPERTY_CHANGE_3;NUI_VISUAL_PROPERTY_CHANGE_1; + NUI_DEBUG_OFF;NUI_PROPERTY_CHANGE_1;NUI_PROPERTY_CHANGE_2;NUI_PROPERTY_CHANGE_3;NUI_VISUAL_PROPERTY_CHANGE_1;NUI_ANIMATION_PROPERTY_CHANGE_1; + /// An extension to the property value class that allows us to create a + /// Property value from a C# object, for example, integer, float, or string.
+ /// Warning : This API don't automatically release memory. + /// + /// An object to create. + /// The created value's IntPtr. + /// Thrown when obj is null. + static internal global::System.IntPtr CreateFromObjectIntPtr(System.Object obj) + { + if (null == obj) + { + throw new global::System.ArgumentNullException(nameof(obj)); + } + + System.Type type = obj.GetType(); + global::System.IntPtr value = global::System.IntPtr.Zero; + if (type.IsEnum) + { + value = Interop.PropertyValue.NewPropertyValue((int)obj);//Enum.Parse(type, str); + } + else if (type.Equals(typeof(int))) + { + value = Interop.PropertyValue.NewPropertyValue((int)obj); + } + else if (type.Equals(typeof(System.Int32))) + { + value = Interop.PropertyValue.NewPropertyValue((int)obj); + } + else if (type.Equals(typeof(bool))) + { + value = Interop.PropertyValue.NewPropertyValue((bool)obj); + } + else if (type.Equals(typeof(float))) + { + value = Interop.PropertyValue.NewPropertyValue((float)obj); + } + else if (type.Equals(typeof(string))) + { + value = Interop.PropertyValue.NewPropertyValueString((string)obj); + } + else if (type.Equals(typeof(Vector2))) + { + value = Interop.PropertyValue.NewPropertyValueVector2(Vector2.getCPtr((Vector2)obj)); + } + else if (type.Equals(typeof(Vector3))) + { + value = Interop.PropertyValue.NewPropertyValueVector3(Vector3.getCPtr((Vector3)obj)); + } + else if (type.Equals(typeof(Vector4))) + { + value = Interop.PropertyValue.NewPropertyValueVector4(Vector4.getCPtr((Vector4)obj)); + } + else if (type.Equals(typeof(Position))) + { + value = Interop.PropertyValue.NewPropertyValueVector3(Position.getCPtr((Position)obj)); + } + else if (type.Equals(typeof(Position2D))) + { + value = Interop.PropertyValue.NewPropertyValueVector2(Position2D.getCPtr((Position2D)obj)); + } + else if (type.Equals(typeof(Size))) + { + value = Interop.PropertyValue.NewPropertyValueVector3(Size.getCPtr((Size)obj)); + } + else if (type.Equals(typeof(Size2D))) + { + value = Interop.PropertyValue.NewPropertyValueVector2(Size2D.getCPtr((Size2D)obj)); + } + else if (type.Equals(typeof(Color))) + { + value = Interop.PropertyValue.NewPropertyValueVector4(Color.getCPtr((Color)obj)); + } + else if (type.Equals(typeof(Rotation))) + { + value = Interop.PropertyValue.NewPropertyValueQuaternion(Rotation.getCPtr((Rotation)obj)); + } + else if (type.Equals(typeof(RelativeVector2))) + { + value = Interop.PropertyValue.NewPropertyValueVector2(RelativeVector2.getCPtr((RelativeVector2)obj)); + } + else if (type.Equals(typeof(RelativeVector3))) + { + value = Interop.PropertyValue.NewPropertyValueVector3(RelativeVector3.getCPtr((RelativeVector3)obj)); + } + else if (type.Equals(typeof(RelativeVector4))) + { + value = Interop.PropertyValue.NewPropertyValueVector4(RelativeVector4.getCPtr((RelativeVector4)obj)); + } + else if (type.Equals(typeof(Extents))) + { + value = Interop.PropertyValue.NewPropertyValueExtents(Extents.getCPtr((Extents)obj)); + } + else if (type.Equals(typeof(Rectangle))) + { + value = Interop.PropertyValue.NewPropertyValueRect(Rectangle.getCPtr((Rectangle)obj)); + } + else + { + throw new global::System.InvalidOperationException("Unimplemented type for Property Value :" + type.Name); + } + return value; + } +#endif + /// /// Retrieves a Size2D value. /// -- 2.7.4