perf: RecordEditorTrace里重复构造EventHandlerInfo
This commit is contained in:
2 files changed
+14
-24
No files matched your search
+2
-16
@@ -310,23 +310,9 @@ namespace ShrinkEventBus
|
|||||||
where TEvent : EventBase
|
where TEvent : EventBase
|
||||||
{
|
{
|
||||||
if (!EnableDebugRecord) return;
|
if (!EnableDebugRecord) return;
|
||||||
|
var listenerList = eventArgs.GetListenerList();
|
||||||
for (var i = 0; i < handlers.Length; i++)
|
for (var i = 0; i < handlers.Length; i++)
|
||||||
{
|
listenerList.Add(handlers[i]);
|
||||||
var handler = handlers[i];
|
|
||||||
MethodInfo originalMethod = null;
|
|
||||||
var type = handler.GetType();
|
|
||||||
var prop = type.GetProperty("OriginalMethod");
|
|
||||||
if (prop != null) originalMethod = prop.GetValue(handler) as MethodInfo;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var field = type.GetField("OriginalMethod");
|
|
||||||
if (field != null) originalMethod = field.GetValue(handler) as MethodInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
eventArgs.GetListenerList().Add(handler.Handler, handler.Priority, handler.NumericPriority,
|
|
||||||
handler.ReceiveCanceled, handler.DebugInfo, originalMethod);
|
|
||||||
}
|
|
||||||
|
|
||||||
OnEventTriggeredForEditor?.Invoke(eventArgs, eventType.Name, GetSenderInfo());
|
OnEventTriggeredForEditor?.Invoke(eventArgs, eventType.Name, GetSenderInfo());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+12
-8
@@ -8,28 +8,33 @@ namespace ShrinkEventBus
|
|||||||
public class ListenerList
|
public class ListenerList
|
||||||
{
|
{
|
||||||
private readonly object _lock = new();
|
private readonly object _lock = new();
|
||||||
|
|
||||||
private readonly List<EventHandlerInfo> _list = new();
|
private readonly List<EventHandlerInfo> _list = new();
|
||||||
|
|
||||||
private EventHandlerInfo[] _snapshot = Array.Empty<EventHandlerInfo>();
|
private EventHandlerInfo[] _snapshot = Array.Empty<EventHandlerInfo>();
|
||||||
private bool _dirty;
|
private bool _dirty;
|
||||||
|
|
||||||
|
|
||||||
public void Add(Delegate handler, EventPriority priority, int numericPriority,
|
public void Add(Delegate handler, EventPriority priority, int numericPriority,
|
||||||
bool receiveCanceled, string debugInfo = "", MethodInfo? originalMethod = null)
|
bool receiveCanceled, string debugInfo = "", MethodInfo? originalMethod = null)
|
||||||
{
|
{
|
||||||
var newInfo = new EventHandlerInfo(handler, priority, numericPriority,
|
var newInfo = new EventHandlerInfo(handler, priority, numericPriority,
|
||||||
receiveCanceled, debugInfo, originalMethod);
|
receiveCanceled, debugInfo, originalMethod);
|
||||||
|
AddInfo(newInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Add(EventHandlerInfo info)
|
||||||
|
{
|
||||||
|
AddInfo(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddInfo(EventHandlerInfo info)
|
||||||
|
{
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
{
|
{
|
||||||
var index = BinarySearchInsertIndex(priority, numericPriority);
|
var index = BinarySearchInsertIndex(info.Priority, info.NumericPriority);
|
||||||
_list.Insert(index, newInfo);
|
_list.Insert(index, info);
|
||||||
_dirty = true;
|
_dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public bool Remove(Delegate handler)
|
public bool Remove(Delegate handler)
|
||||||
{
|
{
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
@@ -47,7 +52,6 @@ namespace ShrinkEventBus
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void RemoveTarget(object target)
|
public void RemoveTarget(object target)
|
||||||
{
|
{
|
||||||
lock (_lock)
|
lock (_lock)
|
||||||
@@ -105,7 +109,7 @@ namespace ShrinkEventBus
|
|||||||
var cmp = existing.Priority.CompareTo(priority);
|
var cmp = existing.Priority.CompareTo(priority);
|
||||||
|
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
cmp = numericPriority.CompareTo(existing.NumericPriority); // 降序
|
cmp = numericPriority.CompareTo(existing.NumericPriority);
|
||||||
|
|
||||||
if (cmp < 0)
|
if (cmp < 0)
|
||||||
lo = mid + 1;
|
lo = mid + 1;
|
||||||
|
|||||||
Reference in new issue
Block a user