Move YGLogger into YGConfig and associate YGNodeRef with log events
Summary: Moves the `YGLogger` into `YGConfig` and pass the `YGNodeRef` into the logger to be able to associate the log messages and assertions with the specific node. Tackles facebook/yoga#530 and facebook/yoga#446 Closes https://github.com/facebook/yoga/pull/531 Reviewed By: astreet Differential Revision: D4970149 Pulled By: emilsjolander fbshipit-source-id: b7fcdaa273143ea2fa35861620b2e4d79f04f0af
This commit is contained in:
committed by
Facebook Github Bot
parent
40eba60cf5
commit
91230ae177
@@ -8,29 +8,92 @@
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
#if __IOS__
|
||||
using ObjCRuntime;
|
||||
#endif
|
||||
#if ENABLE_IL2CPP
|
||||
using AOT;
|
||||
#endif
|
||||
|
||||
namespace Facebook.Yoga
|
||||
{
|
||||
public class YogaConfig
|
||||
{
|
||||
private Native.YGConfigHandle _ygConfig;
|
||||
internal static readonly YogaConfig Default = new YogaConfig(YGConfigHandle.Default);
|
||||
private static YogaLogger _managedLogger;
|
||||
|
||||
public YogaConfig()
|
||||
private YGConfigHandle _ygConfig;
|
||||
private Logger _logger;
|
||||
|
||||
private YogaConfig(YGConfigHandle ygConfig)
|
||||
{
|
||||
_ygConfig = Native.YGConfigNew();
|
||||
_ygConfig = ygConfig;
|
||||
if (_ygConfig.IsInvalid)
|
||||
{
|
||||
throw new InvalidOperationException("Failed to allocate native memory");
|
||||
}
|
||||
|
||||
_ygConfig.SetContext(this);
|
||||
|
||||
if (_ygConfig == YGConfigHandle.Default)
|
||||
{
|
||||
_managedLogger = LoggerInternal;
|
||||
Native.YGInteropSetLogger(_managedLogger);
|
||||
}
|
||||
}
|
||||
|
||||
internal Native.YGConfigHandle Handle
|
||||
public YogaConfig()
|
||||
: this(Native.YGConfigNew())
|
||||
{
|
||||
}
|
||||
|
||||
internal YGConfigHandle Handle
|
||||
{
|
||||
get {
|
||||
return _ygConfig;
|
||||
}
|
||||
}
|
||||
|
||||
#if (UNITY_IOS && !UNITY_EDITOR) || ENABLE_IL2CPP || __IOS__
|
||||
[MonoPInvokeCallback(typeof(YogaLogger))]
|
||||
#endif
|
||||
private static void LoggerInternal(
|
||||
IntPtr unmanagedConfigPtr,
|
||||
IntPtr unmanagedNodePtr,
|
||||
YogaLogLevel level,
|
||||
string message)
|
||||
{
|
||||
var config = YGConfigHandle.GetManaged(unmanagedConfigPtr);
|
||||
if (config == null || config._logger == null)
|
||||
{
|
||||
// Default logger
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
else
|
||||
{
|
||||
var node = YGNodeHandle.GetManaged(unmanagedNodePtr);
|
||||
config._logger(config, node, level, message);
|
||||
}
|
||||
|
||||
if (level == YogaLogLevel.Error || level == YogaLogLevel.Fatal)
|
||||
{
|
||||
throw new InvalidOperationException(message);
|
||||
}
|
||||
}
|
||||
|
||||
public Logger Logger
|
||||
{
|
||||
get {
|
||||
return _logger;
|
||||
}
|
||||
|
||||
set {
|
||||
_logger = value;
|
||||
}
|
||||
}
|
||||
|
||||
public void SetExperimentalFeatureEnabled(
|
||||
YogaExperimentalFeature feature,
|
||||
bool enabled)
|
||||
@@ -68,5 +131,10 @@ namespace Facebook.Yoga
|
||||
{
|
||||
return Native.YGConfigGetInstanceCount();
|
||||
}
|
||||
|
||||
public static void SetDefaultLogger(Logger logger)
|
||||
{
|
||||
Default.Logger = logger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user