From cc18543e4490bb975f069ffe1896e63d991f7664 Mon Sep 17 00:00:00 2001 From: Jiyun Yang Date: Thu, 19 Dec 2024 22:01:01 +0900 Subject: [PATCH] Optimize PropertyMap and PropertyValue Add methods to help optimizing property value and property map 1. CSharp_Dali_Property_Map_Add_XXX Adds a value to a PropertyMap without generating PropertyValue in c# managed heap. 2. CSharp_Dali_XXX_set_all Enables to set all fields at once for Dali primitives such as Vector4. This is to recycle native dali object. 3. CSharp_Dali_Actor_InternalSetPropertyXXX Sets a PropertyValue to the actor without generating PropertyValue in c# managed heap. Change-Id: I15bbcf572a140cbc9614d60af3c1e6bb2b4b5027 Signed-off-by: Jiyun Yang --- dali-csharp-binder/common/dali-wrap.cpp | 173 +++++++++++++++++- dali-csharp-binder/dali-core/extents-wrap.cpp | 14 ++ .../internal-property-get-set-wrap.cpp | 69 +++++++ dali-csharp-binder/dali-core/vector-wrap.cpp | 37 +++- 4 files changed, 287 insertions(+), 6 deletions(-) diff --git a/dali-csharp-binder/common/dali-wrap.cpp b/dali-csharp-binder/common/dali-wrap.cpp index 88ac7659..c4d1a738 100644 --- a/dali-csharp-binder/common/dali-wrap.cpp +++ b/dali-csharp-binder/common/dali-wrap.cpp @@ -5873,6 +5873,148 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add__SWIG_2(void * jarg1, return jresult; } +// Macro generating add/set method of PropertyMap +#ifndef GENERATE_PROPERTYMAP_ADD +#define GENERATE_PROPERTYMAP_ADD(Name, PassedArgs, PassingArgs) \ + SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add_Str_##Name(void* jarg1, char* jarg2 PassedArgs) \ + { \ + Dali::Property::Map *arg1 = (Dali::Property::Map*)jarg1; \ + try \ + { \ + arg1->Add((char const*)jarg2, Dali::Property::Value(PassingArgs)); \ + } \ + CALL_CATCH_EXCEPTION(0); \ + return jarg1; \ + } \ + SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_Add_Int_##Name(void* jarg1, int jarg2 PassedArgs) \ + { \ + Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \ + try \ + { \ + arg1->Add((Dali::Property::Index)jarg2, Dali::Property::Value(PassingArgs)); \ + } \ + CALL_CATCH_EXCEPTION(0); \ + return jarg1; \ + } \ + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_Set_Str_##Name(void* jarg1, const char* jarg2 PassedArgs) \ + { \ + Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \ + try \ + { \ + arg1->operator[](std::string_view(jarg2)) = Dali::Property::Value(PassingArgs); \ + } \ + CALL_CATCH_EXCEPTION(); \ + } \ + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_Set_Int_##Name(void* jarg1, int jarg2 PassedArgs) \ + { \ + Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; \ + try \ + { \ + arg1->operator[]((Dali::Property::Index)jarg2) = Dali::Property::Value(PassingArgs); \ + } \ + CALL_CATCH_EXCEPTION(); \ + } +#endif + +#ifndef GENERATE_PROPERTYMAP_ADD_VALTYPE +#define GENERATE_PROPERTYMAP_ADD_VALTYPE(Name, Type) GENERATE_PROPERTYMAP_ADD(Name, COMMA Type jarg3, jarg3) +#endif + +#ifndef GENERATE_PROPERTYMAP_ADD_REFTYPE +#define GENERATE_PROPERTYMAP_ADD_REFTYPE(Name, Type) GENERATE_PROPERTYMAP_ADD(Name, COMMA void* jarg3, (Type const &)*(Type*)jarg3) +#endif + +#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE2 +#define GENERATE_PROPERTYMAP_ADD_NREFTYPE2(Name, Type, AtomicType) \ + GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4, Type(jarg3, jarg4)) +#endif + +#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE3 +#define GENERATE_PROPERTYMAP_ADD_NREFTYPE3(Name, Type, AtomicType) \ + GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4 COMMA AtomicType jarg5, Type(jarg3, jarg4, jarg5)) +#endif + +#ifndef GENERATE_PROPERTYMAP_ADD_NREFTYPE4 +#define GENERATE_PROPERTYMAP_ADD_NREFTYPE4(Name, Type, AtomicType) \ + GENERATE_PROPERTYMAP_ADD(N##Name, COMMA AtomicType jarg3 COMMA AtomicType jarg4 COMMA AtomicType jarg5 COMMA AtomicType jarg6, Type(jarg3, jarg4, jarg5, jarg6)) +#endif + +#ifndef COMMA +#define COMMA , +#endif + +// CSharp_Dali_Property_Map_Add_Str_None(void*, char*) +// CSharp_Dali_Property_Map_Add_Int_None(void*, int) +// CSharp_Dali_Property_Map_Set_Str_None(void*, char*) +// CSharp_Dali_Property_Map_Set_Int_None(void*, int) +GENERATE_PROPERTYMAP_ADD(None, , ) + +// CSharp_Dali_Property_Map_Add_Str_Bool(void*, char*, bool) +// CSharp_Dali_Property_Map_Add_Int_Bool(void*, int, bool) +// CSharp_Dali_Property_Map_Set_Str_Bool(void*, char*, bool) +// CSharp_Dali_Property_Map_Set_Int_Bool(void*, int, bool) +GENERATE_PROPERTYMAP_ADD_VALTYPE(Bool, bool) + +// CSharp_Dali_Property_Map_Add_Str_Int(void*, char*, int) +// CSharp_Dali_Property_Map_Add_Int_Int(void*, int, int) +// CSharp_Dali_Property_Map_Set_Str_Int(void*, char*, int) +// CSharp_Dali_Property_Map_Set_Int_Int(void*, int, int) +GENERATE_PROPERTYMAP_ADD_VALTYPE(Int, int) + +// CSharp_Dali_Property_Map_Add_Str_Float(void*, char*, float) +// CSharp_Dali_Property_Map_Add_Int_Float(void*, int, float) +// CSharp_Dali_Property_Map_Set_Str_Float(void*, char*, float) +// CSharp_Dali_Property_Map_Set_Int_Float(void*, int, float) +GENERATE_PROPERTYMAP_ADD_VALTYPE(Float, float) + +// CSharp_Dali_Property_Map_Add_Str_Str(void*, char*, char*) +// CSharp_Dali_Property_Map_Add_Int_Str(void*, int, char*) +// CSharp_Dali_Property_Map_Set_Str_Str(void*, char*, char*) +// CSharp_Dali_Property_Map_Set_Int_Str(void*, int, char*) +GENERATE_PROPERTYMAP_ADD_VALTYPE(Str, char*) + +// CSharp_Dali_Property_Map_Add_Str_Vector2(void*, char*, void*) +// CSharp_Dali_Property_Map_Add_Int_Vector2(void*, int, void*) +// CSharp_Dali_Property_Map_Set_Str_Vector2(void*, char*, void*) +// CSharp_Dali_Property_Map_Set_Int_Vector2(void*, int, void*) +GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector2, Dali::Vector2) + +// CSharp_Dali_Property_Map_Add_Str_NVector2(void*, char*, float, float) +// CSharp_Dali_Property_Map_Add_Int_NVector2(void*, int, float, float) +// CSharp_Dali_Property_Map_Set_Str_NVector2(void*, char*, float, float) +// CSharp_Dali_Property_Map_Set_Int_NVector2(void*, int, float, float) +GENERATE_PROPERTYMAP_ADD_NREFTYPE2(Vector2, Dali::Vector2, float) + +// CSharp_Dali_Property_Map_Add_Str_Vector3(void*, char*, void*) +// CSharp_Dali_Property_Map_Add_Int_Vector3(void*, int, void*) +// CSharp_Dali_Property_Map_Set_Str_Vector3(void*, char*, void*) +// CSharp_Dali_Property_Map_Set_Int_Vector3(void*, int, void*) +GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector3, Dali::Vector3) + +// CSharp_Dali_Property_Map_Add_Str_Vector4(void*, char*, void*) +// CSharp_Dali_Property_Map_Add_Int_Vector4(void*, int, void*) +// CSharp_Dali_Property_Map_Set_Str_Vector4(void*, char*, void*) +// CSharp_Dali_Property_Map_Set_Int_Vector4(void*, int, void*) +GENERATE_PROPERTYMAP_ADD_REFTYPE(Vector4, Dali::Vector4) + +// CSharp_Dali_Property_Map_Add_Str_NVector4(void*, char*, float, float, float, float) +// CSharp_Dali_Property_Map_Add_Int_NVector4(void*, int, float, float, float, float) +// CSharp_Dali_Property_Map_Set_Str_NVector4(void*, char*, float, float, float, float) +// CSharp_Dali_Property_Map_Set_Int_NVector4(void*, int, float, float, float, float) +GENERATE_PROPERTYMAP_ADD_NREFTYPE4(Vector4, Dali::Vector4, float) + +// CSharp_Dali_Property_Map_Add_Str_Rectangle(void*, char*, void*) +// CSharp_Dali_Property_Map_Add_Int_Rectangle(void*, int, void*) +// CSharp_Dali_Property_Map_Set_Str_Rectangle(void*, char*, void*) +// CSharp_Dali_Property_Map_Set_Int_Rectangle(void*, int, void*) +GENERATE_PROPERTYMAP_ADD_REFTYPE(Rectangle, Dali::Rect) + +// CSharp_Dali_Property_Map_Add_Str_Map(void*, char*, void*) +// CSharp_Dali_Property_Map_Add_Int_Map(void*, int, void*) +// CSharp_Dali_Property_Map_Set_Str_Map(void*, char*, void*) +// CSharp_Dali_Property_Map_Set_Int_Map(void*, int, void*) +GENERATE_PROPERTYMAP_ADD_REFTYPE(Map, Dali::Property::Map) + SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_Property_Map_GetValue(void * jarg1, unsigned long jarg2) { void * jresult ; @@ -6263,7 +6405,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_SetValue_IntKey(void* jarg1 } } - SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Property_Map_SetValue_IntKey_IntValue(void* jarg1, int jarg2, int jarg3) { Dali::Property::Map* arg1 = (Dali::Property::Map*)jarg1; @@ -6707,9 +6848,6 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value__SWIG_18(void * jar return jresult; } - - - SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Property_Value_EqualTo(void * jarg1, void * jarg2) { bool jresult; Dali::Property::Value *arg1 = (Dali::Property::Value *) 0 ; @@ -7160,6 +7298,20 @@ SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value_Vector4_Componentwi return jresult; } +SWIGEXPORT void * SWIGSTDCALL CSharp_Dali_new_Property_Value_Extents_Componentwise(unsigned short start, unsigned short end, unsigned short top, unsigned short bottom) { + void * jresult ; + Dali::Property::Value *result = 0 ; + + { + try { + result = (Dali::Property::Value *)new Dali::Property::Value(Dali::Extents(start, end, top, bottom)); + } CALL_CATCH_EXCEPTION(0); + } + + jresult = (void*)result; + return jresult; +} + SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Property_Value_Get_Vector2_Componentwise(void* csPropertyValue, float* outX, float* outY) { Dali::Property::Value* arg1 = (Dali::Property::Value*) 0 ; bool result; @@ -8415,7 +8567,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Handle_SetProperty(void * jarg1, int jar } - SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Handle_RegisterProperty__SWIG_0(void * jarg1, char * jarg2, void * jarg3) { int jresult ; Dali::Handle *arg1 = (Dali::Handle *) 0 ; @@ -18982,6 +19133,18 @@ SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Rectangle_top_get(void * jarg1) { return jresult; } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Rectangle_set_all(void * jarg1, int jarg2, int jarg3, int jarg4, int jarg5) +{ + Dali::Rect* arg1 = (Dali::Rect*)jarg1; + + if (arg1) + { + (arg1)->x = jarg2; + (arg1)->y = jarg3; + (arg1)->width = jarg4; + (arg1)->height = jarg5; + } +} SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Rectangle(void * jarg1) { Dali::Rect< int > *arg1 = (Dali::Rect< int > *) 0 ; diff --git a/dali-csharp-binder/dali-core/extents-wrap.cpp b/dali-csharp-binder/dali-core/extents-wrap.cpp index cca07fd2..6d75fe9a 100755 --- a/dali-csharp-binder/dali-core/extents-wrap.cpp +++ b/dali-csharp-binder/dali-core/extents-wrap.cpp @@ -252,6 +252,20 @@ SWIGEXPORT unsigned short SWIGSTDCALL CSharp_Dali_Extents_bottom_get(void * jarg return jresult; } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Extents_set_all(void * jarg1, unsigned short jarg2, unsigned short jarg3, unsigned short jarg4, unsigned short jarg5) { + Dali::Extents *arg1 = (Dali::Extents *) 0 ; + uint16_t arg2 ; + + arg1 = (Dali::Extents *)jarg1; + if (arg1) + { + (arg1)->start = jarg2; + (arg1)->end = jarg3; + (arg1)->top = jarg4; + (arg1)->bottom = jarg5; + } +} + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Extents(void * jarg1) { Dali::Extents *arg1 = (Dali::Extents *) 0 ; diff --git a/dali-csharp-binder/dali-core/internal-property-get-set-wrap.cpp b/dali-csharp-binder/dali-core/internal-property-get-set-wrap.cpp index ab25b238..0c4ef00b 100755 --- a/dali-csharp-binder/dali-core/internal-property-get-set-wrap.cpp +++ b/dali-csharp-binder/dali-core/internal-property-get-set-wrap.cpp @@ -219,6 +219,75 @@ extern "C" return (int)InternalPropertyReturnType::NO_ERROR; } + SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyMap(void *actor, int propertyType, void* map) + { + Dali::Actor* pActor = (Dali::Actor *)actor; + Dali::Property::Map* pMap = (Dali::Property::Map*)map; + + if (!pActor) + { + SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!"); + return (int)InternalPropertyReturnType::ERROR_UNKNOWN; + } + if (!pMap) + { + SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "map is null!"); + return (int)InternalPropertyReturnType::ERROR_UNKNOWN; + } + + try + { + pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value(*pMap)); + } + CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN); + + return (int)InternalPropertyReturnType::NO_ERROR; + } + + SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyExtents(void *actor, int propertyType, void* extents) + { + Dali::Actor* pActor = (Dali::Actor *)actor; + Dali::Extents* pExtents = (Dali::Extents*)extents; + + if (!pActor) + { + SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!"); + return (int)InternalPropertyReturnType::ERROR_UNKNOWN; + } + if (!pExtents) + { + SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "extents is null!"); + return (int)InternalPropertyReturnType::ERROR_UNKNOWN; + } + + try + { + pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value(*pExtents)); + } + CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN); + + return (int)InternalPropertyReturnType::NO_ERROR; + } + + SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalSetPropertyNone(void *actor, int propertyType) + { + Dali::Actor* pActor = (Dali::Actor *)actor; + + if (!pActor) + { + SWIG_EXCEPTION_WITH_FILE_AND_LINE(SWIG_CSharpArgumentNullException, "actor is null!"); + return (int)InternalPropertyReturnType::ERROR_UNKNOWN; + } + + try + { + pActor->SetProperty((Dali::Property::Index)propertyType, Dali::Property::Value()); + } + CALL_CATCH_EXCEPTION((int)InternalPropertyReturnType::ERROR_UNKNOWN); + + return (int)InternalPropertyReturnType::NO_ERROR; + } + SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Actor_InternalRetrievingPropertyVector2(void *actor, int propertyType, void *retrievingVector2) { Dali::Actor *pActor = (Dali::Actor *)actor; diff --git a/dali-csharp-binder/dali-core/vector-wrap.cpp b/dali-csharp-binder/dali-core/vector-wrap.cpp index 31b5d6e1..cb3d4d6e 100644 --- a/dali-csharp-binder/dali-core/vector-wrap.cpp +++ b/dali-csharp-binder/dali-core/vector-wrap.cpp @@ -713,6 +713,17 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector2_Height_get(void * jarg1) { return jresult; } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector2_set_all(void * jarg1, float jarg2, float jarg3) { + Dali::Vector2 *arg1 = (Dali::Vector2 *) 0 ; + + arg1 = (Dali::Vector2 *)jarg1; + if (arg1) + { + (arg1)->x = jarg2; + (arg1)->y = jarg3; + } +} + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector2(void * jarg1) { Dali::Vector2 *arg1 = (Dali::Vector2 *) 0 ; @@ -1726,6 +1737,18 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector3_b_get(void * jarg1) { return jresult; } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector3_set_all(void * jarg1, float jarg2, float jarg3, float jarg4) { + Dali::Vector3 *arg1 = (Dali::Vector3 *) 0 ; + + arg1 = (Dali::Vector3 *)jarg1; + if (arg1) + { + (arg1)->x = jarg2; + (arg1)->y = jarg3; + (arg1)->z = jarg4; + } +} + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector3(void * jarg1) { Dali::Vector3 *arg1 = (Dali::Vector3 *) 0 ; @@ -2732,7 +2755,6 @@ SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector4_a_set(void * jarg1, float jarg2) if (arg1) (arg1)->a = arg2; } - SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector4_a_get(void * jarg1) { float jresult ; Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ; @@ -2766,6 +2788,19 @@ SWIGEXPORT float SWIGSTDCALL CSharp_Dali_Vector4_q_get(void * jarg1) { return jresult; } +SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Vector4_set_all(void * jarg1, float jarg2, float jarg3, float jarg4, float jarg5) { + Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ; + + arg1 = (Dali::Vector4 *)jarg1; + if (arg1) + { + (arg1)->x = jarg2; + (arg1)->y = jarg3; + (arg1)->z = jarg4; + (arg1)->w = jarg5; + } +} + SWIGEXPORT void SWIGSTDCALL CSharp_Dali_delete_Vector4(void * jarg1) { Dali::Vector4 *arg1 = (Dali::Vector4 *) 0 ; -- 2.34.1