From a87f4be757d41693f367e24122a7e627826e06da Mon Sep 17 00:00:00 2001 From: Sindharta Tanuwijaya Date: Fri, 6 Jan 2023 15:56:26 +0900 Subject: [PATCH 1/4] test: enable ShowFrameMarkers() test again for Unity 2022.2 or later --- Tests/Editor/Scripts/FrameMarkerTest.cs | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Tests/Editor/Scripts/FrameMarkerTest.cs b/Tests/Editor/Scripts/FrameMarkerTest.cs index 2c07e26c..23d4e744 100644 --- a/Tests/Editor/Scripts/FrameMarkerTest.cs +++ b/Tests/Editor/Scripts/FrameMarkerTest.cs @@ -16,12 +16,6 @@ internal class FrameMarkerTest { [UnityTest] public IEnumerator ShowFrameMarkers() { - //[Note-sin: 2022-12-21] Disabling test in Unity 2022 because this error "Assertion failed on expression: '!GetUndoManager().IsProcessing()'" - //The flow when this occurs: - //1. calling Undo.PerformUndo(); triggers ImageFolderPlayableAssetEditor.OnClipChanged() - //2. ImageFolderPlayableAssetEditor.OnClipChanged() may call TrackAsset.CreateMarker() - //3. TrackAsset.CreateMarker() has Undo-related calls in it, which seems to be incompatible if it is called during an undo process -#if !UNITY_2022_2_OR_NEWER PlayableDirector director = EditorUtilityTest.NewSceneWithDirector(); TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; @@ -30,6 +24,7 @@ public IEnumerator ShowFrameMarkers() { //Show SISClipData clipData = sisAsset.GetBoundClipData(); + Assert.IsNotNull(clipData); TrackAsset trackAsset = clip.GetParentTrack(); clipData.RequestFrameMarkers(true, true); @@ -47,7 +42,6 @@ public IEnumerator ShowFrameMarkers() { EditorUtilityTest.DestroyTestTimelineAssets(clip); -#endif yield return null; } From 75556ef9edf2042819150f96a5a182f3ebd3f106 Mon Sep 17 00:00:00 2001 From: Sindharta Tanuwijaya Date: Fri, 6 Jan 2023 15:58:34 +0900 Subject: [PATCH 2/4] use delay call --- Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs b/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs index 345269f3..05e40d87 100644 --- a/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs +++ b/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs @@ -1,4 +1,5 @@ using Unity.FilmInternalUtilities; +using UnityEditor; using UnityEditor.Timeline; using UnityEngine; using UnityEngine.Assertions; @@ -14,7 +15,10 @@ public override void OnClipChanged(TimelineClip clip) { ImageFolderPlayableAsset imageFolderPlayableAsset = clip.asset as ImageFolderPlayableAsset; Assert.IsNotNull(imageFolderPlayableAsset); - imageFolderPlayableAsset.RefreshPlayableFrames(); + + EditorApplication.delayCall += () => { + imageFolderPlayableAsset.RefreshPlayableFrames(); + }; } //---------------------------------------------------------------------------------------------------------------------- From 4ed6c9aa79a0bff0c7e4d570c94396d33460a7e1 Mon Sep 17 00:00:00 2001 From: Sindharta Tanuwijaya Date: Fri, 6 Jan 2023 16:12:28 +0900 Subject: [PATCH 3/4] yield --- Tests/Editor/Scripts/FrameMarkerTest.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Tests/Editor/Scripts/FrameMarkerTest.cs b/Tests/Editor/Scripts/FrameMarkerTest.cs index 23d4e744..deba4c60 100644 --- a/Tests/Editor/Scripts/FrameMarkerTest.cs +++ b/Tests/Editor/Scripts/FrameMarkerTest.cs @@ -20,7 +20,7 @@ public IEnumerator ShowFrameMarkers() { TimelineClip clip = EditorUtilityTest.CreateTestSISTimelineClip(director); StreamingImageSequencePlayableAsset sisAsset = clip.asset as StreamingImageSequencePlayableAsset; Assert.IsNotNull(sisAsset); - yield return null; + yield return YieldEditorUtility.WaitForFramesAndIncrementUndo(1); //Show SISClipData clipData = sisAsset.GetBoundClipData(); @@ -29,20 +29,22 @@ public IEnumerator ShowFrameMarkers() { TrackAsset trackAsset = clip.GetParentTrack(); clipData.RequestFrameMarkers(true, true); TimelineEditor.Refresh(RefreshReason.ContentsModified); - yield return null; + yield return YieldEditorUtility.WaitForFramesAndIncrementUndo(1); Assert.AreEqual(TimelineUtility.CalculateNumFrames(clip), trackAsset.GetMarkerCount()); - yield return null; + yield return YieldEditorUtility.WaitForFramesAndIncrementUndo(1); //Undo showing FrameMarkers - EditorUtilityTest.UndoAndRefreshTimelineEditor(); yield return null; + EditorUtilityTest.UndoAndRefreshTimelineEditor(); + yield return YieldEditorUtility.WaitForFramesAndIncrementUndo(1); + Assert.False(clipData.AreFrameMarkersRequested()); Assert.AreEqual(0, trackAsset.GetMarkerCount()); EditorUtilityTest.DestroyTestTimelineAssets(clip); - yield return null; + yield return YieldEditorUtility.WaitForFramesAndIncrementUndo(1); } From 1db72b8d1ef3fda895fe1db8a3ac81ad7367932b Mon Sep 17 00:00:00 2001 From: Sindharta Tanuwijaya Date: Fri, 6 Jan 2023 16:15:32 +0900 Subject: [PATCH 4/4] add comment --- Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs b/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs index 05e40d87..57858e7e 100644 --- a/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs +++ b/Editor/Scripts/Features/ImageFolderPlayableAssetEditor.cs @@ -16,6 +16,7 @@ public override void OnClipChanged(TimelineClip clip) { ImageFolderPlayableAsset imageFolderPlayableAsset = clip.asset as ImageFolderPlayableAsset; Assert.IsNotNull(imageFolderPlayableAsset); + //Use delayCall to prevent marker creation during undo/redo process EditorApplication.delayCall += () => { imageFolderPlayableAsset.RefreshPlayableFrames(); };