From 7e1101a490b802b3267f64c3ec2d7055c95664e6 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Wed, 12 Feb 2025 17:21:48 +0100 Subject: [PATCH 1/5] 1st stab add touch frametime measurement --- .../Tests/InputSystem/CorePerformanceTests.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Assets/Tests/InputSystem/CorePerformanceTests.cs b/Assets/Tests/InputSystem/CorePerformanceTests.cs index 86026ed313..91bacdb878 100644 --- a/Assets/Tests/InputSystem/CorePerformanceTests.cs +++ b/Assets/Tests/InputSystem/CorePerformanceTests.cs @@ -1202,5 +1202,45 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_Do .Run(); } + [PrebuildSetup(typeof(ProjectWideActionsBuildSetup))] + [PostBuildCleanup(typeof(ProjectWideActionsBuildSetup))] + [UnityTest, Performance] + [Category("Performance")] + public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_Touch() + { + var touchscreen = InputSystem.AddDevice(); + EnhancedTouchSupport.Enable(); + + + using (Measure.ProfilerMarkers(allInputSystemProfilerMarkers)) + { + BeginTouch(1, new Vector2(0.1f, 0.2f), queueEventOnly: true); + BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); + + for (int i = 0; i < 500; ++i) + { + MoveTouch(1, new Vector2(0.1f+i, 0.2f+i), queueEventOnly: true); + MoveTouch(2, new Vector2(0.3f+i, 0.4f+i), queueEventOnly: true); + + BeginTouch(3, new Vector2(0.5f, 0.6f), queueEventOnly: true); + MoveTouch(3, new Vector2(0.5f+i, 0.6f+i), queueEventOnly: true); + EndTouch(3, new Vector2(0.7f, 0.7f), queueEventOnly: true); + + if (i % 60 == 0) + { + EndTouch(1, new Vector2(0.8f, 0.8f), queueEventOnly: true); + EndTouch(2, new Vector2(0.9f, 0.9f), queueEventOnly: true); + BeginTouch(1, new Vector2(0.1f, 0.2f), queueEventOnly: true); + BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); + } + + InputSystem.Update(); + + yield return null; + } + } + + EnhancedTouchSupport.Disable(); + } #endif } From 38d88ab51dee6c6fba529483290e1029c369fbc4 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Wed, 12 Feb 2025 19:14:00 +0100 Subject: [PATCH 2/5] formatting --- Assets/Tests/InputSystem/CorePerformanceTests.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Assets/Tests/InputSystem/CorePerformanceTests.cs b/Assets/Tests/InputSystem/CorePerformanceTests.cs index 91bacdb878..75be308a84 100644 --- a/Assets/Tests/InputSystem/CorePerformanceTests.cs +++ b/Assets/Tests/InputSystem/CorePerformanceTests.cs @@ -1210,22 +1210,22 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_To { var touchscreen = InputSystem.AddDevice(); EnhancedTouchSupport.Enable(); - + using (Measure.ProfilerMarkers(allInputSystemProfilerMarkers)) { BeginTouch(1, new Vector2(0.1f, 0.2f), queueEventOnly: true); BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); - + for (int i = 0; i < 500; ++i) { - MoveTouch(1, new Vector2(0.1f+i, 0.2f+i), queueEventOnly: true); - MoveTouch(2, new Vector2(0.3f+i, 0.4f+i), queueEventOnly: true); - + MoveTouch(1, new Vector2(0.1f + i, 0.2f + i), queueEventOnly: true); + MoveTouch(2, new Vector2(0.3f + i, 0.4f + i), queueEventOnly: true); + BeginTouch(3, new Vector2(0.5f, 0.6f), queueEventOnly: true); - MoveTouch(3, new Vector2(0.5f+i, 0.6f+i), queueEventOnly: true); + MoveTouch(3, new Vector2(0.5f + i, 0.6f + i), queueEventOnly: true); EndTouch(3, new Vector2(0.7f, 0.7f), queueEventOnly: true); - + if (i % 60 == 0) { EndTouch(1, new Vector2(0.8f, 0.8f), queueEventOnly: true); @@ -1242,5 +1242,6 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_To EnhancedTouchSupport.Disable(); } + #endif } From be5efa662b3b19a9f19bd5d4e75a8a6af4fc3d70 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Wed, 26 Feb 2025 16:36:50 +0100 Subject: [PATCH 3/5] add actions from PWA --- Assets/Tests/InputSystem/CorePerformanceTests.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Assets/Tests/InputSystem/CorePerformanceTests.cs b/Assets/Tests/InputSystem/CorePerformanceTests.cs index b64f167c30..580fc7dd22 100644 --- a/Assets/Tests/InputSystem/CorePerformanceTests.cs +++ b/Assets/Tests/InputSystem/CorePerformanceTests.cs @@ -1216,6 +1216,18 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_To var touchscreen = InputSystem.AddDevice(); EnhancedTouchSupport.Enable(); + var clickAction = InputSystem.actions.FindAction("Click"); + var pointAction = InputSystem.actions.FindAction("Point"); + + int performedCallCount = 0; + + clickAction.performed += context => { + performedCallCount++; + }; + + pointAction.performed += context => { + performedCallCount++; + }; using (Measure.ProfilerMarkers(allInputSystemProfilerMarkers)) { From 95e4192d8de49178675f007f89e053f65ea63c74 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Thu, 27 Feb 2025 14:09:41 +0100 Subject: [PATCH 4/5] review feedback & small change in FPS test --- .../Tests/InputSystem/CorePerformanceTests.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/Assets/Tests/InputSystem/CorePerformanceTests.cs b/Assets/Tests/InputSystem/CorePerformanceTests.cs index 580fc7dd22..217281ce1d 100644 --- a/Assets/Tests/InputSystem/CorePerformanceTests.cs +++ b/Assets/Tests/InputSystem/CorePerformanceTests.cs @@ -1126,8 +1126,9 @@ public void Performance_OptimizedControls_ReadingPose4kTimes(OptimizationTestTyp [PrebuildSetup(typeof(ProjectWideActionsBuildSetup))] [PostBuildCleanup(typeof(ProjectWideActionsBuildSetup))] - [UnityTest, Performance] + [UnityTest, Performance, Version("2")] [Category("Performance")] + // Simulate a FPS controller with WASD, mouse look and various key presses triggering actions public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_FPS() { var keyboard = InputSystem.AddDevice(); @@ -1169,6 +1170,7 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_FP { if (i % 60 == 0) { + PressAndRelease(keyboard.wKey, queueEventOnly: true); PressAndRelease(keyboard.aKey, queueEventOnly: true); PressAndRelease(keyboard.sKey, queueEventOnly: true); PressAndRelease(keyboard.dKey, queueEventOnly: true); @@ -1211,6 +1213,8 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_Do [PostBuildCleanup(typeof(ProjectWideActionsBuildSetup))] [UnityTest, Performance] [Category("Performance")] + // Simulate a touch FPS controller with one constantly moving touch as the WASD equivalent + // and taps/clicks for button presses. Actions from PWA getting triggered. public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_Touch() { var touchscreen = InputSystem.AddDevice(); @@ -1231,26 +1235,34 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_To using (Measure.ProfilerMarkers(allInputSystemProfilerMarkers)) { + // start touch 1 BeginTouch(1, new Vector2(0.1f, 0.2f), queueEventOnly: true); - BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); for (int i = 0; i < 500; ++i) { - MoveTouch(1, new Vector2(0.1f + i, 0.2f + i), queueEventOnly: true); + // start touch 2 + BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); MoveTouch(2, new Vector2(0.3f + i, 0.4f + i), queueEventOnly: true); + // tap touch 3 once per frame BeginTouch(3, new Vector2(0.5f, 0.6f), queueEventOnly: true); MoveTouch(3, new Vector2(0.5f + i, 0.6f + i), queueEventOnly: true); EndTouch(3, new Vector2(0.7f, 0.7f), queueEventOnly: true); if (i % 60 == 0) { - EndTouch(1, new Vector2(0.8f, 0.8f), queueEventOnly: true); + // end and restart touch 2 every 30 frames EndTouch(2, new Vector2(0.9f, 0.9f), queueEventOnly: true); - BeginTouch(1, new Vector2(0.1f, 0.2f), queueEventOnly: true); BeginTouch(2, new Vector2(0.3f, 0.4f), queueEventOnly: true); } + // move touch 1 with higher frequency assuming higher touch sampling rate then frames drawn + // 120Hz screen refresh rate & 2k+ Hz touch sampling rate + for (int j = 1; j <= 20; j++) + { + MoveTouch(1, new Vector2(0.1f + j, 0.2f + j), queueEventOnly: true); + } + InputSystem.Update(); yield return null; From 80e20a76568029d20e10f03d331531a555394c84 Mon Sep 17 00:00:00 2001 From: Stefan Schubert Date: Thu, 27 Feb 2025 16:04:16 +0100 Subject: [PATCH 5/5] adjusted to lower touch sampling rate --- Assets/Tests/InputSystem/CorePerformanceTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/Tests/InputSystem/CorePerformanceTests.cs b/Assets/Tests/InputSystem/CorePerformanceTests.cs index 217281ce1d..1138e644a0 100644 --- a/Assets/Tests/InputSystem/CorePerformanceTests.cs +++ b/Assets/Tests/InputSystem/CorePerformanceTests.cs @@ -1257,8 +1257,8 @@ public IEnumerator Performance_MeasureInputSystemFrameTimeWithProfilerMarkers_To } // move touch 1 with higher frequency assuming higher touch sampling rate then frames drawn - // 120Hz screen refresh rate & 2k+ Hz touch sampling rate - for (int j = 1; j <= 20; j++) + // 60Hz screen refresh rate & 260+ Hz touch sampling rate + for (int j = 1; j <= 5; j++) { MoveTouch(1, new Vector2(0.1f + j, 0.2f + j), queueEventOnly: true); }