Add PlayerLoopTiming.TimeUpdate/LastTimeUpdate in Unity 2020.2
parent
797affae4d
commit
908e361985
|
@ -346,6 +346,11 @@ public enum PlayerLoopTiming
|
||||||
|
|
||||||
PostLateUpdate = 12,
|
PostLateUpdate = 12,
|
||||||
LastPostLateUpdate = 13
|
LastPostLateUpdate = 13
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
TimeUpdate = 14,
|
||||||
|
LastTimeUpdate = 15,
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -132,6 +132,14 @@ namespace Cysharp.Threading.Tasks.Internal
|
||||||
case PlayerLoopTiming.LastPostLateUpdate:
|
case PlayerLoopTiming.LastPostLateUpdate:
|
||||||
LastPostLateUpdate();
|
LastPostLateUpdate();
|
||||||
break;
|
break;
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
case PlayerLoopTiming.TimeUpdate:
|
||||||
|
TimeUpdate();
|
||||||
|
break;
|
||||||
|
case PlayerLoopTiming.LastTimeUpdate:
|
||||||
|
LastTimeUpdate();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -154,6 +162,10 @@ namespace Cysharp.Threading.Tasks.Internal
|
||||||
void LastPreLateUpdate() => RunCore();
|
void LastPreLateUpdate() => RunCore();
|
||||||
void PostLateUpdate() => RunCore();
|
void PostLateUpdate() => RunCore();
|
||||||
void LastPostLateUpdate() => RunCore();
|
void LastPostLateUpdate() => RunCore();
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
void TimeUpdate() => RunCore();
|
||||||
|
void LastTimeUpdate() => RunCore();
|
||||||
|
#endif
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerHidden]
|
[System.Diagnostics.DebuggerHidden]
|
||||||
void RunCore()
|
void RunCore()
|
||||||
|
|
|
@ -118,6 +118,14 @@ namespace Cysharp.Threading.Tasks.Internal
|
||||||
case PlayerLoopTiming.LastPostLateUpdate:
|
case PlayerLoopTiming.LastPostLateUpdate:
|
||||||
LastPostLateUpdate();
|
LastPostLateUpdate();
|
||||||
break;
|
break;
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
case PlayerLoopTiming.TimeUpdate:
|
||||||
|
TimeUpdate();
|
||||||
|
break;
|
||||||
|
case PlayerLoopTiming.LastTimeUpdate:
|
||||||
|
LastTimeUpdate();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -140,6 +148,10 @@ namespace Cysharp.Threading.Tasks.Internal
|
||||||
void LastPreLateUpdate() => RunCore();
|
void LastPreLateUpdate() => RunCore();
|
||||||
void PostLateUpdate() => RunCore();
|
void PostLateUpdate() => RunCore();
|
||||||
void LastPostLateUpdate() => RunCore();
|
void LastPostLateUpdate() => RunCore();
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
void TimeUpdate() => RunCore();
|
||||||
|
void LastTimeUpdate() => RunCore();
|
||||||
|
#endif
|
||||||
|
|
||||||
[System.Diagnostics.DebuggerHidden]
|
[System.Diagnostics.DebuggerHidden]
|
||||||
void RunCore()
|
void RunCore()
|
||||||
|
|
|
@ -57,6 +57,13 @@ namespace Cysharp.Threading.Tasks
|
||||||
public struct UniTaskLoopRunnerLastYieldUpdate { };
|
public struct UniTaskLoopRunnerLastYieldUpdate { };
|
||||||
public struct UniTaskLoopRunnerLastYieldPreLateUpdate { };
|
public struct UniTaskLoopRunnerLastYieldPreLateUpdate { };
|
||||||
public struct UniTaskLoopRunnerLastYieldPostLateUpdate { };
|
public struct UniTaskLoopRunnerLastYieldPostLateUpdate { };
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
public struct UniTaskLoopRunnerTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerLastTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerYieldTimeUpdate { };
|
||||||
|
public struct UniTaskLoopRunnerLastYieldTimeUpdate { };
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum PlayerLoopTiming
|
public enum PlayerLoopTiming
|
||||||
|
@ -80,7 +87,13 @@ namespace Cysharp.Threading.Tasks
|
||||||
LastPreLateUpdate = 11,
|
LastPreLateUpdate = 11,
|
||||||
|
|
||||||
PostLateUpdate = 12,
|
PostLateUpdate = 12,
|
||||||
LastPostLateUpdate = 13
|
LastPostLateUpdate = 13,
|
||||||
|
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
// Unity 2020.2 added TimeUpdate https://docs.unity3d.com/2020.2/Documentation/ScriptReference/PlayerLoop.TimeUpdate.html
|
||||||
|
TimeUpdate = 14,
|
||||||
|
LastTimeUpdate = 15,
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IPlayerLoopItem
|
public interface IPlayerLoopItem
|
||||||
|
@ -298,8 +311,13 @@ namespace Cysharp.Threading.Tasks
|
||||||
|
|
||||||
public static void Initialize(ref PlayerLoopSystem playerLoop)
|
public static void Initialize(ref PlayerLoopSystem playerLoop)
|
||||||
{
|
{
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
yielders = new ContinuationQueue[16];
|
||||||
|
runners = new PlayerLoopRunner[16];
|
||||||
|
#else
|
||||||
yielders = new ContinuationQueue[14];
|
yielders = new ContinuationQueue[14];
|
||||||
runners = new PlayerLoopRunner[14];
|
runners = new PlayerLoopRunner[14];
|
||||||
|
#endif
|
||||||
|
|
||||||
var copyList = playerLoop.subSystemList.ToArray();
|
var copyList = playerLoop.subSystemList.ToArray();
|
||||||
|
|
||||||
|
@ -345,6 +363,14 @@ namespace Cysharp.Threading.Tasks
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), yielders[13] = new ContinuationQueue(PlayerLoopTiming.LastPostLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldPostLateUpdate), yielders[13] = new ContinuationQueue(PlayerLoopTiming.LastPostLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), runners[12] = new PlayerLoopRunner(PlayerLoopTiming.PostLateUpdate),
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerPostLateUpdate), runners[12] = new PlayerLoopRunner(PlayerLoopTiming.PostLateUpdate),
|
||||||
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), runners[13] = new PlayerLoopRunner(PlayerLoopTiming.LastPostLateUpdate));
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastPostLateUpdate), runners[13] = new PlayerLoopRunner(PlayerLoopTiming.LastPostLateUpdate));
|
||||||
|
#if UNITY_2020_2_OR_NEWER
|
||||||
|
// TimeUpdate
|
||||||
|
i = FindLoopSystemIndex(copyList, typeof(UnityEngine.PlayerLoop.TimeUpdate));
|
||||||
|
copyList[i].subSystemList = InsertRunner(copyList[i], typeof(UniTaskLoopRunners.UniTaskLoopRunnerYieldTimeUpdate), yielders[14] = new ContinuationQueue(PlayerLoopTiming.TimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastYieldTimeUpdate), yielders[15] = new ContinuationQueue(PlayerLoopTiming.LastTimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerTimeUpdate), runners[14] = new PlayerLoopRunner(PlayerLoopTiming.TimeUpdate),
|
||||||
|
typeof(UniTaskLoopRunners.UniTaskLoopRunnerLastTimeUpdate), runners[15] = new PlayerLoopRunner(PlayerLoopTiming.LastTimeUpdate));
|
||||||
|
#endif
|
||||||
|
|
||||||
// Insert UniTaskSynchronizationContext to Update loop
|
// Insert UniTaskSynchronizationContext to Update loop
|
||||||
i = FindLoopSystemIndex(copyList, typeof(UnityEngine.PlayerLoop.Update));
|
i = FindLoopSystemIndex(copyList, typeof(UnityEngine.PlayerLoop.Update));
|
||||||
|
|
|
@ -516,6 +516,13 @@ public class SandboxMain : MonoBehaviour
|
||||||
Debug.Log("end cor");
|
Debug.Log("end cor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IEnumerator LastYieldCore()
|
||||||
|
{
|
||||||
|
Debug.Log("YieldBegin:" + Time.frameCount);
|
||||||
|
yield return new WaitForEndOfFrame();
|
||||||
|
Debug.Log("YieldEnd:" + Time.frameCount);
|
||||||
|
}
|
||||||
|
|
||||||
async UniTaskVoid Start()
|
async UniTaskVoid Start()
|
||||||
{
|
{
|
||||||
await TestCor().ToUniTask(this);
|
await TestCor().ToUniTask(this);
|
||||||
|
@ -567,18 +574,13 @@ public class SandboxMain : MonoBehaviour
|
||||||
|
|
||||||
okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
okButton.onClick.AddListener(UniTask.UnityAction(async () =>
|
||||||
{
|
{
|
||||||
|
StartCoroutine(LastYieldCore());
|
||||||
|
|
||||||
var client = new NetworkClient("http://localhost:5000", TimeSpan.FromSeconds(2),
|
Debug.Log("BEFORE:" + Time.frameCount);
|
||||||
new QueueRequestDecorator()
|
|
||||||
/*, new LoggingDecorator()*/
|
|
||||||
);
|
|
||||||
//new AppendTokenDecorator(),
|
|
||||||
//new SetupHeaderDecorator());
|
|
||||||
|
|
||||||
|
|
||||||
await client.PostAsync("", new { Id = 100 });
|
|
||||||
|
|
||||||
|
await UniTask.Yield(PlayerLoopTiming.LastTimeUpdate);
|
||||||
|
|
||||||
|
Debug.Log("AFTER:" + Time.frameCount);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// _ = ExecuteAsync();
|
// _ = ExecuteAsync();
|
||||||
|
|
Loading…
Reference in New Issue