using System;
using UnityEngine;
using UnityEngine.EventSystems;
using System.Text;
public class FunctionTimer : MonoBehaviour
{
static System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
public static void TotalTimer(Action callback)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(); });
}
public static void TotalTimer(Action callback, T value)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value); });
}
public static void TotalTimer(Action callback, T value, T1 value1)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1); });
}
public static void TotalTimer(Action callback, T value, T1 value1, T2 value2)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1, value2); });
}
public static void TotalTimer(Action callback, T value, T1 value1, T2 value2, T3 value3)
{
output(callback.GetInvocationList()[0].Target.GetType().Name, callback.GetInvocationList()[0].Method.ToString(), () => { callback(value, value1, value2, value3); });
}
public static void UIEventTimer(GameObject value)
{
Compute(value,(com) => {
com.OnPointerUp(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnPointerEnter(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnPointerExit(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnPointerDown(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnPointerClick(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnInitializePotentialDrag(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnDrag(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnEndDrag(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnDrop(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnScroll(new PointerEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnUpdateSelected(new BaseEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnSelect(new BaseEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnDeselect(new BaseEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnMove(new AxisEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnSubmit(new BaseEventData(EventSystem.current));
});
Compute(value, (com) => {
com.OnCancel(new BaseEventData(EventSystem.current));
});
}
private static void Compute(GameObject value, Action callback) where T : IEventSystemHandler
{
var coms = value.GetComponents();
foreach (var com in coms)
{
output(com.GetType().Name, typeof(T).Name, () => { callback(com); });
}
}
private static void output(string className, string function,Action callback )
{
sw.Restart();
sw.Start();
callback();
sw.Stop();
Debug.Log(string.Format("className:[ {0} ] \t functionName:[ {1} ] \t timeConsuming:[ {2} ] ",
className, function, sw.ElapsedMilliseconds));
}
private void Awake()
{
UIEventTimer(gameObject);
}
}