From 799857bb8b8d713a89bd83fdac77dd945aca867b Mon Sep 17 00:00:00 2001 From: Takayuki Matsuoka Date: Wed, 14 Sep 2022 13:11:23 +0900 Subject: [PATCH] Add IAwaitCaller to VRMImporterContext.LoadFirstPerson Since we still don't have explicit rule/method to add NextFrameIfTimedOut, this change may seem random. But we've conducted some benchmarks and profiled them before add these await-s. These changes ease CPU spikes. --- Assets/VRM/Runtime/IO/VRMImporterContext.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/VRM/Runtime/IO/VRMImporterContext.cs b/Assets/VRM/Runtime/IO/VRMImporterContext.cs index 669f6991e..25e0f2c2a 100644 --- a/Assets/VRM/Runtime/IO/VRMImporterContext.cs +++ b/Assets/VRM/Runtime/IO/VRMImporterContext.cs @@ -66,7 +66,7 @@ namespace VRM using (MeasureTime("VRM LoadFirstPerson")) { - LoadFirstPerson(); + await LoadFirstPerson(awaitCaller); } } @@ -82,9 +82,10 @@ namespace VRM Meta = meta; } - void LoadFirstPerson() + async Task LoadFirstPerson(IAwaitCaller awaitCaller) { var firstPerson = Root.AddComponent(); + await awaitCaller.NextFrameIfTimedOut(); var gltfFirstPerson = VRM.firstPerson; if (gltfFirstPerson.firstPersonBone != -1) @@ -99,10 +100,13 @@ namespace VRM firstPerson.FirstPersonOffset = gltfFirstPerson.firstPersonBoneOffset; } firstPerson.TraverseRenderers(this); + await awaitCaller.NextFrameIfTimedOut(); // LookAt var lookAtHead = Root.AddComponent(); + await awaitCaller.NextFrameIfTimedOut(); lookAtHead.OnImported(this); + await awaitCaller.NextFrameIfTimedOut(); } void LoadBlendShapeMaster()