From e11a84423db726d03c367e99582eb14ddc150d94 Mon Sep 17 00:00:00 2001 From: Kazuki Sakamoto Date: Mon, 13 Feb 2017 09:00:27 -0800 Subject: [PATCH] Prevent GC delegates --- csharp/Facebook.Yoga/YogaLogger.cs | 3 ++- csharp/Facebook.Yoga/YogaNode.cs | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/csharp/Facebook.Yoga/YogaLogger.cs b/csharp/Facebook.Yoga/YogaLogger.cs index bd3af941..b05ad381 100644 --- a/csharp/Facebook.Yoga/YogaLogger.cs +++ b/csharp/Facebook.Yoga/YogaLogger.cs @@ -23,6 +23,7 @@ namespace Facebook.Yoga private static bool _initialized; + public static Func _loggerInternal = LoggerInternal; public static Func Logger = null; #if (UNITY_IOS && !UNITY_EDITOR) || __IOS__ @@ -45,7 +46,7 @@ namespace Facebook.Yoga { if (!_initialized) { - Native.YGInteropSetLogger(LoggerInternal); + Native.YGInteropSetLogger(_loggerInternal); _initialized = true; } } diff --git a/csharp/Facebook.Yoga/YogaNode.cs b/csharp/Facebook.Yoga/YogaNode.cs index 23a86996..b748a35e 100644 --- a/csharp/Facebook.Yoga/YogaNode.cs +++ b/csharp/Facebook.Yoga/YogaNode.cs @@ -29,6 +29,13 @@ namespace Facebook.Yoga private MeasureFunction _measureFunction; private BaselineFunction _baselineFunction; private object _data; +#if (UNITY_IOS && !UNITY_EDITOR) || __IOS__ + private static YogaMeasureFunc _measureInternalIOS = MeasureInternalIOS; + private static YogaBaselineFunc _baselineInternalIOS = BaselineInternalIOS; +#else + private YogaMeasureFunc _measureInternal; + private YogaBaselineFunc _baselineInternal; +#endif public YogaNode() { @@ -555,9 +562,10 @@ namespace Facebook.Yoga { #if (UNITY_IOS && !UNITY_EDITOR) || __IOS__ _ygNode.SetContext(this); - func = MeasureInternalIOS; + func = _measureInternalIOS; #else - func = MeasureInternal; + _measureInternal = MeasureInternal; + func = _measureInternal; #endif } Native.YGNodeSetMeasureFunc(_ygNode, func); @@ -571,9 +579,10 @@ namespace Facebook.Yoga { #if (UNITY_IOS && !UNITY_EDITOR) || __IOS__ _ygNode.SetContext(this); - func = BaselineInternalIOS; + func = _baselineInternalIOS; #else - func = BaselineInternal; + _baselineInternal = BaselineInternal; + func = _baselineInternal; #endif } Native.YGNodeSetBaselineFunc(_ygNode, func);