diff --git a/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs b/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs new file mode 100644 index 00000000..79a1df46 --- /dev/null +++ b/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs @@ -0,0 +1,42 @@ +#nullable enable + +#if UNITY_STANDALONE_LINUX +using NUnit.Framework; +using UnityEngine; + +namespace Immutable.Audience.Samples.SampleApp.Tests +{ + // Linux-only test suppression: clamp the player's frame rate to 1 fps + // and disable vsync. The SampleApp PlayMode tests assert on UI Toolkit + // visual-element state, which is layout-driven, not paint-driven. + // Painting fewer frames between coroutine yields removes llvmpipe + // fragment-fill cost without changing what tests observe. + // + // Scope: every test in the Tests assembly when the build target is + // StandaloneLinux64. UNITY_STANDALONE_LINUX is defined by Unity for + // PlayMode runs invoked with -testPlatform StandaloneLinux64. + [SetUpFixture] + public sealed class LinuxRenderSuppression + { + private int _priorTargetFrameRate; + private int _priorVSyncCount; + + [OneTimeSetUp] + public void Suppress() + { + _priorTargetFrameRate = Application.targetFrameRate; + _priorVSyncCount = QualitySettings.vSyncCount; + + Application.targetFrameRate = 1; + QualitySettings.vSyncCount = 0; + } + + [OneTimeTearDown] + public void Restore() + { + Application.targetFrameRate = _priorTargetFrameRate; + QualitySettings.vSyncCount = _priorVSyncCount; + } + } +} +#endif diff --git a/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs.meta b/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs.meta new file mode 100644 index 00000000..f2eaf7fb --- /dev/null +++ b/examples/audience/Assets/SampleApp/Tests/Runtime/LinuxRenderSuppression.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c2d9b1a8e4f3a4d8c1b2e3a4d5f6e7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: