From 8567b56b0eceb9ea426aeedb3ad77a8042b65133 Mon Sep 17 00:00:00 2001 From: TechAnon Date: Sat, 14 Dec 2024 23:17:31 -0600 Subject: [PATCH 1/6] Hoist some arrays to class fields to avoid excessive array allocations (from dooly). --- .../Runtime/Scripts/AudioLink.cs | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs index 476ef39b..cffebd4e 100755 --- a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs +++ b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs @@ -732,17 +732,25 @@ public override void OnDeserialization() } #endif + private const int MaxLength = 32; + private int[] codePoints = new int[MaxLength]; + public const int VecsLength = MaxLength / 4; + private Vector4[] vecs = new Vector4[VecsLength]; + private void UpdateGlobalString(int nameID, string input) { InitIDs(); - const int maxLength = 32; - if (input.Length > maxLength) - input = input.Substring(0, maxLength); - - // Get unicode codepoints - int[] codePoints = new int[input.Length]; + int inputLength = input.Length; + // Truncate the input if it exceeds the max length + if (inputLength > MaxLength) + { + input = input.Substring(0, MaxLength); + } + // Get unicode codepoints, clearing previous values to prevent leftover data + Array.Clear(codePoints, 0, MaxLength); int codePointsLength = 0; - for (int i = 0; i < input.Length; i++) + + for (int i = 0; i < inputLength; i++) { codePoints[codePointsLength++] = Char.ConvertToUtf32(input, i); if (Char.IsHighSurrogate(input[i])) @@ -751,21 +759,20 @@ private void UpdateGlobalString(int nameID, string input) } } - // Pack them into vectors - Vector4[] vecs = new Vector4[maxLength / 4]; // 4 chars per vector + // Pack them into vectors, clearing previous values in vecs array + Array.Clear(vecs, 0, VecsLength); int j = 0; - for (int i = 0; i < vecs.Length; i++) + for (int i = 0; i < VecsLength; i++) { - if (j < codePoints.Length) vecs[i].x = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePoints.Length) vecs[i].y = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePoints.Length) vecs[i].z = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePoints.Length) vecs[i].w = IntToFloatBits24Bit((uint)codePoints[j++]); else break; + if (j < codePointsLength) vecs[i].x = IntToFloatBits24Bit((uint)codePoints[j++]); else break; + if (j < codePointsLength) vecs[i].y = IntToFloatBits24Bit((uint)codePoints[j++]); else break; + if (j < codePointsLength) vecs[i].z = IntToFloatBits24Bit((uint)codePoints[j++]); else break; + if (j < codePointsLength) vecs[i].w = IntToFloatBits24Bit((uint)codePoints[j++]); else break; } - // Expose the vectors to shader + // Expose the vectors to shader without causing additional allocations audioMaterial.SetVectorArray(nameID, vecs); } - public void ToggleAudioLink() { SetAudioLinkState(!_audioLinkEnabled); From efc61aec67b159d054dafa0d0b9c8e6f26869c40 Mon Sep 17 00:00:00 2001 From: Pema Malling Date: Sun, 15 Dec 2024 13:14:09 +0100 Subject: [PATCH 2/6] Update Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs --- Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs index cffebd4e..7d6a4ce8 100755 --- a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs +++ b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs @@ -734,7 +734,7 @@ public override void OnDeserialization() private const int MaxLength = 32; private int[] codePoints = new int[MaxLength]; - public const int VecsLength = MaxLength / 4; + private const int VecsLength = MaxLength / 4; private Vector4[] vecs = new Vector4[VecsLength]; private void UpdateGlobalString(int nameID, string input) From f4f98e9972583cbd1ced8bec5f8ce1c8be103794 Mon Sep 17 00:00:00 2001 From: TechAnon Date: Mon, 16 Dec 2024 14:08:17 -0600 Subject: [PATCH 3/6] Update global string field names. --- .../Runtime/Scripts/AudioLink.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs index 7d6a4ce8..99e687a8 100755 --- a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs +++ b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs @@ -733,9 +733,9 @@ public override void OnDeserialization() #endif private const int MaxLength = 32; - private int[] codePoints = new int[MaxLength]; - private const int VecsLength = MaxLength / 4; - private Vector4[] vecs = new Vector4[VecsLength]; + private int[] globalStringCodePoints = new int[MaxLength]; + private const int packedVectorsLength = MaxLength / 4; + private Vector4[] globalStringPackedVectors = new Vector4[packedVectorsLength]; private void UpdateGlobalString(int nameID, string input) { @@ -747,31 +747,31 @@ private void UpdateGlobalString(int nameID, string input) input = input.Substring(0, MaxLength); } // Get unicode codepoints, clearing previous values to prevent leftover data - Array.Clear(codePoints, 0, MaxLength); + Array.Clear(globalStringCodePoints, 0, MaxLength); int codePointsLength = 0; for (int i = 0; i < inputLength; i++) { - codePoints[codePointsLength++] = Char.ConvertToUtf32(input, i); - if (Char.IsHighSurrogate(input[i])) + globalStringCodePoints[codePointsLength++] = char.ConvertToUtf32(input, i); + if (char.IsHighSurrogate(input[i])) { i += 1; } } // Pack them into vectors, clearing previous values in vecs array - Array.Clear(vecs, 0, VecsLength); + Array.Clear(globalStringPackedVectors, 0, packedVectorsLength); int j = 0; - for (int i = 0; i < VecsLength; i++) + for (int i = 0; i < packedVectorsLength; i++) { - if (j < codePointsLength) vecs[i].x = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePointsLength) vecs[i].y = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePointsLength) vecs[i].z = IntToFloatBits24Bit((uint)codePoints[j++]); else break; - if (j < codePointsLength) vecs[i].w = IntToFloatBits24Bit((uint)codePoints[j++]); else break; + if (j < codePointsLength) globalStringPackedVectors[i].x = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; + if (j < codePointsLength) globalStringPackedVectors[i].y = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; + if (j < codePointsLength) globalStringPackedVectors[i].z = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; + if (j < codePointsLength) globalStringPackedVectors[i].w = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; } // Expose the vectors to shader without causing additional allocations - audioMaterial.SetVectorArray(nameID, vecs); + audioMaterial.SetVectorArray(nameID, globalStringPackedVectors); } public void ToggleAudioLink() { From b18ed6b46a6b01b7f929e931f4c6e8390f6e9231 Mon Sep 17 00:00:00 2001 From: TechAnon Date: Mon, 16 Dec 2024 14:27:07 -0600 Subject: [PATCH 4/6] More consistent naming for those fields. --- .../Runtime/Scripts/AudioLink.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs index 99e687a8..45c4bc92 100755 --- a/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs +++ b/Packages/com.llealloo.audiolink/Runtime/Scripts/AudioLink.cs @@ -732,22 +732,22 @@ public override void OnDeserialization() } #endif - private const int MaxLength = 32; - private int[] globalStringCodePoints = new int[MaxLength]; - private const int packedVectorsLength = MaxLength / 4; - private Vector4[] globalStringPackedVectors = new Vector4[packedVectorsLength]; + private const int GlobalStringMaxLength = 32; + private readonly int[] globalStringCodePoints = new int[GlobalStringMaxLength]; + private const int GlobalStringPackedVectorsLength = GlobalStringMaxLength / 4; + private readonly Vector4[] globalStringPackedVectors = new Vector4[GlobalStringPackedVectorsLength]; private void UpdateGlobalString(int nameID, string input) { InitIDs(); int inputLength = input.Length; // Truncate the input if it exceeds the max length - if (inputLength > MaxLength) + if (inputLength > GlobalStringMaxLength) { - input = input.Substring(0, MaxLength); + input = input.Substring(0, GlobalStringMaxLength); } // Get unicode codepoints, clearing previous values to prevent leftover data - Array.Clear(globalStringCodePoints, 0, MaxLength); + Array.Clear(globalStringCodePoints, 0, GlobalStringMaxLength); int codePointsLength = 0; for (int i = 0; i < inputLength; i++) @@ -760,9 +760,9 @@ private void UpdateGlobalString(int nameID, string input) } // Pack them into vectors, clearing previous values in vecs array - Array.Clear(globalStringPackedVectors, 0, packedVectorsLength); + Array.Clear(globalStringPackedVectors, 0, GlobalStringPackedVectorsLength); int j = 0; - for (int i = 0; i < packedVectorsLength; i++) + for (int i = 0; i < GlobalStringPackedVectorsLength; i++) { if (j < codePointsLength) globalStringPackedVectors[i].x = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; if (j < codePointsLength) globalStringPackedVectors[i].y = IntToFloatBits24Bit((uint)globalStringCodePoints[j++]); else break; From ffdff6a347ef62ec7012f41a8d1c11cef6f63257 Mon Sep 17 00:00:00 2001 From: TechAnon Date: Mon, 16 Dec 2024 14:30:07 -0600 Subject: [PATCH 5/6] add ignore for rider project folder. --- AudioLinkSandboxUnityProject/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/AudioLinkSandboxUnityProject/.gitignore b/AudioLinkSandboxUnityProject/.gitignore index d83a74fe..0b2c5044 100644 --- a/AudioLinkSandboxUnityProject/.gitignore +++ b/AudioLinkSandboxUnityProject/.gitignore @@ -46,6 +46,7 @@ ExportedObj/ *.mdb *.opendb *.VC.db +.idea/ # Unity3D generated meta files *.pidb.meta From f0bc47b11735c171eeb68ef65a22d01e9d3c6691 Mon Sep 17 00:00:00 2001 From: TechAnon Date: Mon, 16 Dec 2024 15:29:57 -0600 Subject: [PATCH 6/6] Add rider folder to the remaining gitignores --- AudioLinkSandboxProject/.gitignore | 1 + AudioLinkUnityProject/.gitignore | 3 ++- AudioLinkWebProject/.gitignore | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/AudioLinkSandboxProject/.gitignore b/AudioLinkSandboxProject/.gitignore index 6f6e3d20..9e28bc29 100644 --- a/AudioLinkSandboxProject/.gitignore +++ b/AudioLinkSandboxProject/.gitignore @@ -46,6 +46,7 @@ ExportedObj/ *.mdb *.opendb *.VC.db +.idea/ # Unity3D generated meta files *.pidb.meta diff --git a/AudioLinkUnityProject/.gitignore b/AudioLinkUnityProject/.gitignore index 6f6e3d20..bbb63baa 100644 --- a/AudioLinkUnityProject/.gitignore +++ b/AudioLinkUnityProject/.gitignore @@ -46,6 +46,7 @@ ExportedObj/ *.mdb *.opendb *.VC.db +.idea/ # Unity3D generated meta files *.pidb.meta @@ -81,4 +82,4 @@ crashlytics-build.properties /[Aa]ssets/UdonSharp.meta /[Aa]ssets/AmplifyShaderEditor/ /[Aa]ssets/AmplifyShaderEditor.meta -/[Aa]ssets/SerilizedUdonPrograms/ \ No newline at end of file +/[Aa]ssets/SerilizedUdonPrograms/ diff --git a/AudioLinkWebProject/.gitignore b/AudioLinkWebProject/.gitignore index 6f6e3d20..9e28bc29 100644 --- a/AudioLinkWebProject/.gitignore +++ b/AudioLinkWebProject/.gitignore @@ -46,6 +46,7 @@ ExportedObj/ *.mdb *.opendb *.VC.db +.idea/ # Unity3D generated meta files *.pidb.meta