mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-19 02:24:37 +08:00
stash
This commit is contained in:
parent
c25fef8a5f
commit
5bebf812f1
@ -2,39 +2,71 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
|
using static EcsConsts;
|
||||||
public readonly struct EcsProfilerMarker
|
public readonly struct EcsProfilerMarker
|
||||||
{
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
public readonly int id;
|
public readonly int id;
|
||||||
internal EcsProfilerMarker(int id) { this.id = id; }
|
#endif
|
||||||
|
internal EcsProfilerMarker(int id)
|
||||||
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
|
this.id = id;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
public EcsProfilerMarker(string name)
|
public EcsProfilerMarker(string name)
|
||||||
{
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
id = DebugService.Instance.RegisterMark(name);
|
id = DebugService.Instance.RegisterMark(name);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void Begin() { DebugService.Instance.ProfilerMarkBegin(id); }
|
public void Begin()
|
||||||
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
|
DebugService.Instance.ProfilerMarkBegin(id);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void End() { DebugService.Instance.ProfilerMarkEnd(id); }
|
public void End()
|
||||||
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
|
DebugService.Instance.ProfilerMarkEnd(id);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public AutoScope Auto() { return new AutoScope(id); }
|
public AutoScope Auto()
|
||||||
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
|
return new AutoScope(id);
|
||||||
|
#else
|
||||||
|
return default;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
public readonly ref struct AutoScope
|
public readonly ref struct AutoScope
|
||||||
{
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
private readonly int _id;
|
private readonly int _id;
|
||||||
|
#endif
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public AutoScope(int id)
|
public AutoScope(int id)
|
||||||
{
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
_id = id;
|
_id = id;
|
||||||
DebugService.Instance.ProfilerMarkBegin(id);
|
DebugService.Instance.ProfilerMarkBegin(id);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER)
|
||||||
DebugService.Instance.ProfilerMarkEnd(_id);
|
DebugService.Instance.ProfilerMarkEnd(_id);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
@ -42,14 +74,10 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
|
|
||||||
[MetaColor(MetaColor.DragonRose)]
|
[MetaColor(MetaColor.DragonRose)]
|
||||||
[MetaGroup(EcsConsts.PACK_GROUP, EcsConsts.DEBUG_GROUP)]
|
[MetaGroup(PACK_GROUP, DEBUG_GROUP)]
|
||||||
[MetaDescription(EcsConsts.AUTHOR, "Debugging utility. To modify or change the behavior, create a new class inherited from DebugService and set this service using DebugService.Set<T>().")]
|
[MetaDescription(AUTHOR, "Debugging utility. To modify or change the behavior, create a new class inherited from DebugService and set this service using DebugService.Set<T>().")]
|
||||||
public static class EcsDebug
|
public static class EcsDebug
|
||||||
{
|
{
|
||||||
public const string WARNING_TAG = EcsConsts.DEBUG_WARNING_TAG;
|
|
||||||
public const string ERROR_TAG = EcsConsts.DEBUG_ERROR_TAG;
|
|
||||||
public const string PASS_TAG = EcsConsts.DEBUG_PASS_TAG;
|
|
||||||
|
|
||||||
public static void Set<T>() where T : DebugService, new()
|
public static void Set<T>() where T : DebugService, new()
|
||||||
{
|
{
|
||||||
DebugService.Set<T>();
|
DebugService.Set<T>();
|
||||||
@ -271,7 +299,10 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
public sealed class DefaultDebugService : DebugService
|
public sealed class DefaultDebugService : DebugService
|
||||||
{
|
{
|
||||||
|
#if !UNITY_5_3_OR_NEWER
|
||||||
private const string PROFILER_MARKER = "ProfilerMark";
|
private const string PROFILER_MARKER = "ProfilerMark";
|
||||||
|
private const string PROFILER_MARKER_CACHE = "[" + PROFILER_MARKER + "] ";
|
||||||
|
|
||||||
private readonly struct MarkerData
|
private readonly struct MarkerData
|
||||||
{
|
{
|
||||||
public readonly Stopwatch Stopwatch;
|
public readonly Stopwatch Stopwatch;
|
||||||
@ -289,18 +320,14 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private MarkerData[] _stopwatchs;
|
private MarkerData[] _stopwatchs;
|
||||||
#if !UNITY_5_3_OR_NEWER
|
|
||||||
[ThreadStatic]
|
[ThreadStatic]
|
||||||
private static char[] _buffer;
|
private static char[] _buffer;
|
||||||
#endif
|
|
||||||
|
|
||||||
public DefaultDebugService()
|
public DefaultDebugService()
|
||||||
{
|
{
|
||||||
Console.ForegroundColor = ConsoleColor.White;
|
Console.ForegroundColor = ConsoleColor.White;
|
||||||
Console.BackgroundColor = ConsoleColor.Black;
|
Console.BackgroundColor = ConsoleColor.Black;
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER
|
|
||||||
_stopwatchs = new MarkerData[64];
|
_stopwatchs = new MarkerData[64];
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Print(string tag, object v)
|
public override void Print(string tag, object v)
|
||||||
@ -337,11 +364,8 @@ namespace DCFApixels.DragonECS
|
|||||||
Console.ForegroundColor = color;
|
Console.ForegroundColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
private const string PROFILER_MARKER_CACHE = "[" + PROFILER_MARKER + "] ";
|
|
||||||
public override void ProfilerMarkBegin(int id)
|
public override void ProfilerMarkBegin(int id)
|
||||||
{
|
{
|
||||||
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER) && !UNITY_5_3_OR_NEWER
|
|
||||||
|
|
||||||
var color = Console.ForegroundColor;
|
var color = Console.ForegroundColor;
|
||||||
Console.ForegroundColor = ConsoleColor.DarkGray;
|
Console.ForegroundColor = ConsoleColor.DarkGray;
|
||||||
_stopwatchs[id].Stopwatch.Start();
|
_stopwatchs[id].Stopwatch.Start();
|
||||||
@ -351,11 +375,9 @@ namespace DCFApixels.DragonECS
|
|||||||
Console.WriteLine("> ");
|
Console.WriteLine("> ");
|
||||||
|
|
||||||
Console.ForegroundColor = color;
|
Console.ForegroundColor = color;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
public override void ProfilerMarkEnd(int id)
|
public override void ProfilerMarkEnd(int id)
|
||||||
{
|
{
|
||||||
#if ((DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_DEBUGGER) && !UNITY_5_3_OR_NEWER
|
|
||||||
var color = Console.ForegroundColor;
|
var color = Console.ForegroundColor;
|
||||||
Console.ForegroundColor = ConsoleColor.DarkGray;
|
Console.ForegroundColor = ConsoleColor.DarkGray;
|
||||||
_stopwatchs[id].Stopwatch.Stop();
|
_stopwatchs[id].Stopwatch.Stop();
|
||||||
@ -373,7 +395,6 @@ namespace DCFApixels.DragonECS
|
|||||||
Console.WriteLine(_buffer, 0, written);
|
Console.WriteLine(_buffer, 0, written);
|
||||||
|
|
||||||
Console.ForegroundColor = color;
|
Console.ForegroundColor = color;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDelProfilerMark(int id)
|
protected override void OnDelProfilerMark(int id)
|
||||||
@ -441,5 +462,12 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
written = bufferLength - zeroPartLength;
|
written = bufferLength - zeroPartLength;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
public override void Break() { }
|
||||||
|
public override void Print(string tag, object v) { }
|
||||||
|
public override void ProfilerMarkBegin(int id) { }
|
||||||
|
public override void ProfilerMarkEnd(int id) { }
|
||||||
|
protected override void OnDelProfilerMark(int id) { }
|
||||||
|
protected override void OnNewProfilerMark(int id, string name) { }
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -316,10 +316,19 @@ namespace DCFApixels.DragonECS
|
|||||||
public static bool IsHasMeta(Type type)
|
public static bool IsHasMeta(Type type)
|
||||||
{
|
{
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED
|
||||||
return (CheckEcsMemener(type) || Attribute.GetCustomAttributes(type, typeof(EcsMetaAttribute), false).Length > 0);
|
return CheckEcsMemener(type) || Attribute.GetCustomAttributes(type, typeof(EcsMetaAttribute), false).Length > 0;
|
||||||
#else
|
#else
|
||||||
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(TypeMeta)}.{nameof(IsHasMeta)} method does not work.");
|
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(TypeMeta)}.{nameof(IsHasMeta)} method does not work.");
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
public static bool IsHasMetaID(Type type)
|
||||||
|
{
|
||||||
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED
|
||||||
|
return type.HasAttribute<MetaIDAttribute>();
|
||||||
|
#else
|
||||||
|
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(TypeMeta)}.{nameof(IsHasMetaID)} method does not work.");
|
||||||
|
return false;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
public override string ToString() { return Name; }
|
public override string ToString() { return Name; }
|
||||||
@ -394,7 +403,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public static (string, bool) GetMetaName(Type type)
|
public static (string, bool) GetMetaName(Type type)
|
||||||
{
|
{
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
||||||
bool isCustom = type.TryGetCustomAttribute(out MetaNameAttribute atr) && string.IsNullOrEmpty(atr.name) == false;
|
bool isCustom = type.TryGetAttribute(out MetaNameAttribute atr) && string.IsNullOrEmpty(atr.name) == false;
|
||||||
if (isCustom)
|
if (isCustom)
|
||||||
{
|
{
|
||||||
if ((type.IsGenericType && atr.isHideGeneric == false) == false)
|
if ((type.IsGenericType && atr.isHideGeneric == false) == false)
|
||||||
@ -426,7 +435,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public static (MetaColor, bool) GetColor(Type type)
|
public static (MetaColor, bool) GetColor(Type type)
|
||||||
{
|
{
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
||||||
bool isCustom = type.TryGetCustomAttribute(out MetaColorAttribute atr);
|
bool isCustom = type.TryGetAttribute(out MetaColorAttribute atr);
|
||||||
return (isCustom ? atr.color : AutoColor(type), isCustom);
|
return (isCustom ? atr.color : AutoColor(type), isCustom);
|
||||||
#else
|
#else
|
||||||
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetColor)} method does not work.");
|
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetColor)} method does not work.");
|
||||||
@ -439,7 +448,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public static MetaGroup GetGroup(Type type)
|
public static MetaGroup GetGroup(Type type)
|
||||||
{
|
{
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
||||||
return type.TryGetCustomAttribute(out MetaGroupAttribute atr) ? atr.Data : MetaGroup.Empty;
|
return type.TryGetAttribute(out MetaGroupAttribute atr) ? atr.Data : MetaGroup.Empty;
|
||||||
#else
|
#else
|
||||||
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetGroup)} method does not work.");
|
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetGroup)} method does not work.");
|
||||||
return MetaGroup.Empty;
|
return MetaGroup.Empty;
|
||||||
@ -451,7 +460,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public static MetaDescription GetDescription(Type type)
|
public static MetaDescription GetDescription(Type type)
|
||||||
{
|
{
|
||||||
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
#if (DEBUG && !DISABLE_DEBUG) || !REFLECTION_DISABLED //в дебажных утилитах REFLECTION_DISABLED только в релизном билде работает
|
||||||
bool isCustom = type.TryGetCustomAttribute(out MetaDescriptionAttribute atr);
|
bool isCustom = type.TryGetAttribute(out MetaDescriptionAttribute atr);
|
||||||
return isCustom ? atr.Data : MetaDescription.Empty;
|
return isCustom ? atr.Data : MetaDescription.Empty;
|
||||||
#else
|
#else
|
||||||
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetDescription)} method does not work.");
|
EcsDebug.PrintWarning($"Reflection is not available, the {nameof(MetaGenerator)}.{nameof(GetDescription)} method does not work.");
|
||||||
|
@ -7,16 +7,26 @@ namespace DCFApixels.DragonECS.Internal
|
|||||||
internal static class ReflectionUtility
|
internal static class ReflectionUtility
|
||||||
{
|
{
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool TryGetCustomAttribute<T>(this Type self, out T attribute) where T : Attribute
|
public static bool TryGetAttribute<T>(this MemberInfo self, out T attribute) where T : Attribute
|
||||||
{
|
{
|
||||||
attribute = self.GetCustomAttribute<T>();
|
attribute = self.GetCustomAttribute<T>();
|
||||||
return attribute != null;
|
return attribute != null;
|
||||||
}
|
}
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static bool TryGetCustomAttribute<T>(this MemberInfo self, out T attribute) where T : Attribute
|
public static bool TryGetAttribute<T>(this MemberInfo self, bool inherit, out T attribute) where T : Attribute
|
||||||
{
|
{
|
||||||
attribute = self.GetCustomAttribute<T>();
|
attribute = self.GetCustomAttribute<T>(inherit);
|
||||||
return attribute != null;
|
return attribute != null;
|
||||||
}
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool HasAttribute<T>(this MemberInfo self) where T : Attribute
|
||||||
|
{
|
||||||
|
return self.GetCustomAttribute<T>() != null;
|
||||||
|
}
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static bool HasAttribute<T>(this MemberInfo self, bool inherit) where T : Attribute
|
||||||
|
{
|
||||||
|
return self.GetCustomAttribute<T>(inherit) != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user