mirror of
https://github.com/Cysharp/UniTask.git
synced 2026-05-23 16:20:21 +00:00
Add PlayerLoopTiming.TimeUpdate/LastTimeUpdate in Unity 2020.2
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user