diff --git a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset new file mode 100644 index 0000000..07487a9 --- /dev/null +++ b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset @@ -0,0 +1,223 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c333ccfdd0cbdbc4ca30cef2dd6e6b9b, type: 3} + m_Name: ProfilerController + m_EditorClassIdentifier: + serializedUdonProgramAsset: {fileID: 11400000, guid: 4c51328dfe7798947a6ec392553fa46d, type: 2} + udonAssembly: + assemblyError: + sourceCsScript: {fileID: 11500000, guid: fbecd1043e52c0c46a46dd6642136209, type: 3} + scriptVersion: 2 + compiledVersion: 2 + behaviourSyncMode: 0 + hasInteractEvent: 0 + scriptID: 87726702791218209 + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: fieldDefinitions + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[UdonSharp.Compiler.FieldDefinition, + UdonSharp.Editor]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 3 + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: profiler + - Name: $v + Entry: 7 + Data: 2|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: profiler + - Name: k__BackingField + Entry: 7 + Data: 3|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UdonSharpProfiler.ProfilerDataReader, UdonSharpProfiler.Runtime + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: 4|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: VRC.Udon.UdonBehaviour, VRC.Udon + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 5|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: startRecording + - Name: $v + Entry: 7 + Data: 6|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: startRecording + - Name: k__BackingField + Entry: 7 + Data: 7|System.RuntimeType, mscorlib + - Name: + Entry: 1 + Data: UnityEngine.KeyCode, UnityEngine.CoreModule + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 8|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 1 + - Name: + Entry: 7 + Data: 9|UnityEngine.HeaderAttribute, UnityEngine.CoreModule + - Name: header + Entry: 1 + Data: Controls + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 7 + Data: + - Name: $k + Entry: 1 + Data: stopRecording + - Name: $v + Entry: 7 + Data: 10|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor + - Name: k__BackingField + Entry: 1 + Data: stopRecording + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 9 + Data: 7 + - Name: k__BackingField + Entry: 7 + Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib + - Name: + Entry: 6 + Data: + - Name: + Entry: 8 + Data: + - Name: k__BackingField + Entry: 5 + Data: true + - Name: _fieldAttributes + Entry: 7 + Data: 11|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 8 + Data: + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset.meta b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset.meta new file mode 100644 index 0000000..7acaea2 --- /dev/null +++ b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56e4d984af312484c80298ae9f8b2451 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs new file mode 100644 index 0000000..a3f8e62 --- /dev/null +++ b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs @@ -0,0 +1,22 @@ +using UdonSharp; +using UnityEngine; + +namespace UdonSharpProfiler { + public class ProfilerController : UdonSharpBehaviour { + public ProfilerDataReader profiler; + + [Header("Controls")] + public KeyCode startRecording = KeyCode.O; + public KeyCode stopRecording = KeyCode.P; + + [DontUdonProfile] + public void Update() { + if (Input.GetKeyDown(startRecording)) + profiler.recording = true; + if (Input.GetKeyDown(stopRecording)) { + profiler.recording = false; + profiler.WriteEmitToLog(); + } + } + } +} \ No newline at end of file diff --git a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs.meta b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs.meta new file mode 100644 index 0000000..79a0227 --- /dev/null +++ b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fbecd1043e52c0c46a46dd6642136209 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerDataReader.cs b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerDataReader.cs index c96c46a..234ea7f 100644 --- a/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerDataReader.cs +++ b/Packages/deltaneverused.udonsharpprofiler/Runtime/ProfilerDataReader.cs @@ -20,7 +20,7 @@ public override void OnInspectorGUI() { DrawDefaultInspector(); if (GUILayout.Button("Get All U# Behaviours")) { - var blacklisted = new Type[] {typeof(ProfilerDataReader), typeof(UdonProfilerKickoff)}; + var blacklisted = new Type[] {typeof(ProfilerDataReader), typeof(UdonProfilerKickoff), typeof(ProfilerController)}; var t = (ProfilerDataReader)target; var roots = UnityEngine.SceneManagement.SceneManager.GetActiveScene().GetRootGameObjects(); @@ -121,6 +121,7 @@ public void WriteEmitToLog() { VRCJson.TrySerializeToJson(_packets, JsonExportType.Minify, out var result); Debug.Log($"{{ \"traceEvents\": {result}, \"displayTimeUnit\": \"us\" }}"); + _packets = new DataList(); } [DontUdonProfile] diff --git a/Packages/deltaneverused.udonsharpprofiler/Samples/Profiler.prefab b/Packages/deltaneverused.udonsharpprofiler/Samples/Profiler.prefab index 44ecaa4..6411ea7 100644 --- a/Packages/deltaneverused.udonsharpprofiler/Samples/Profiler.prefab +++ b/Packages/deltaneverused.udonsharpprofiler/Samples/Profiler.prefab @@ -13,9 +13,11 @@ GameObject: - component: {fileID: 7371563909020993508} - component: {fileID: 248900975977141942} - component: {fileID: 9217779139459428148} + - component: {fileID: 6230640552237845678} - component: {fileID: 4042507003697567520} - component: {fileID: 4257191060463753583} - component: {fileID: 3887639916018102126} + - component: {fileID: 633370491494577087} m_Layer: 0 m_Name: Profiler m_TagString: Untagged @@ -131,6 +133,29 @@ MonoBehaviour: PrefabModifications: [] SerializationNodes: [] _udonSharpBackingUdonBehaviour: {fileID: 3887639916018102126} +--- !u!114 &6230640552237845678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7914377179092791910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fbecd1043e52c0c46a46dd6642136209, type: 3} + m_Name: + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: [] + _udonSharpBackingUdonBehaviour: {fileID: 633370491494577087} + profiler: {fileID: 4042507003697567520} --- !u!114 &4042507003697567520 MonoBehaviour: m_ObjectHideFlags: 0 @@ -154,7 +179,7 @@ MonoBehaviour: SerializationNodes: [] _udonSharpBackingUdonBehaviour: {fileID: 4257191060463753583} targets: [] - recording: 1 + recording: 0 --- !u!114 &4257191060463753583 MonoBehaviour: m_ObjectHideFlags: 0 @@ -175,7 +200,7 @@ MonoBehaviour: AllowCollisionOwnershipTransfer: 0 Reliable: 0 _syncMethod: 1 - serializedProgramAsset: {fileID: 11400000, guid: 53381d2501873294ca1d8593d7cc1990, type: 2} + serializedProgramAsset: {fileID: 11400000, guid: 9e5f8d18f93f629438f664d8b452f39f, type: 2} programSource: {fileID: 11400000, guid: af5e77f8aa1abb74aab040060c4451b9, type: 2} serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF publicVariablesUnityEngineObjects: [] @@ -200,8 +225,33 @@ MonoBehaviour: AllowCollisionOwnershipTransfer: 0 Reliable: 0 _syncMethod: 1 - serializedProgramAsset: {fileID: 11400000, guid: f616ddc271b44204f8accf851d4412d4, type: 2} + serializedProgramAsset: {fileID: 11400000, guid: 7236cffd1eb5e9a4f9afa24f6558e4a4, type: 2} programSource: {fileID: 11400000, guid: 9ae632e2920a09e4ba2b58e96768808a, type: 2} serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF publicVariablesUnityEngineObjects: [] publicVariablesSerializationDataFormat: 0 +--- !u!114 &633370491494577087 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7914377179092791910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45115577ef41a5b4ca741ed302693907, type: 3} + m_Name: + m_EditorClassIdentifier: + interactTextPlacement: {fileID: 0} + interactText: Use + interactTextGO: {fileID: 0} + proximity: 2 + SynchronizePosition: 0 + AllowCollisionOwnershipTransfer: 0 + Reliable: 0 + _syncMethod: 1 + serializedProgramAsset: {fileID: 11400000, guid: 4c51328dfe7798947a6ec392553fa46d, type: 2} + programSource: {fileID: 11400000, guid: 56e4d984af312484c80298ae9f8b2451, type: 2} + serializedPublicVariablesBytesString: Ai8AAAAAATIAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAFQAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AAAAAAAYBAAAAAAAAACcBBAAAAHQAeQBwAGUAAWgAAABTAHkAcwB0AGUAbQAuAEMAbwBsAGwAZQBjAHQAaQBvAG4AcwAuAEcAZQBuAGUAcgBpAGMALgBMAGkAcwB0AGAAMQBbAFsAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4ALgBJAG4AdABlAHIAZgBhAGMAZQBzAC4ASQBVAGQAbwBuAFYAYQByAGkAYQBiAGwAZQAsACAAVgBSAEMALgBVAGQAbwBuAC4AQwBvAG0AbQBvAG4AXQBdACwAIABtAHMAYwBvAHIAbABpAGIAAQEJAAAAVgBhAHIAaQBhAGIAbABlAHMALwEAAAABaAAAAFMAeQBzAHQAZQBtAC4AQwBvAGwAbABlAGMAdABpAG8AbgBzAC4ARwBlAG4AZQByAGkAYwAuAEwAaQBzAHQAYAAxAFsAWwBWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAEkAbgB0AGUAcgBmAGEAYwBlAHMALgBJAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlACwAIABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgBdAF0ALAAgAG0AcwBjAG8AcgBsAGkAYgABAAAABgEAAAAAAAAAAi8CAAAAAUkAAABWAFIAQwAuAFUAZABvAG4ALgBDAG8AbQBtAG8AbgAuAFUAZABvAG4AVgBhAHIAaQBhAGIAbABlAGAAMQBbAFsAUwB5AHMAdABlAG0ALgBJAG4AdAAzADIALAAgAG0AcwBjAG8AcgBsAGkAYgBdAF0ALAAgAFYAUgBDAC4AVQBkAG8AbgAuAEMAbwBtAG0AbwBuAAIAAAAGAgAAAAAAAAAnAQQAAAB0AHkAcABlAAEXAAAAUwB5AHMAdABlAG0ALgBTAHQAcgBpAG4AZwAsACAAbQBzAGMAbwByAGwAaQBiACcBCgAAAFMAeQBtAGIAbwBsAE4AYQBtAGUAAR8AAABfAF8AXwBVAGQAbwBuAFMAaABhAHIAcABCAGUAaABhAHYAaQBvAHUAcgBWAGUAcgBzAGkAbwBuAF8AXwBfACcBBAAAAHQAeQBwAGUAARYAAABTAHkAcwB0AGUAbQAuAEkAbgB0ADMAMgAsACAAbQBzAGMAbwByAGwAaQBiABcBBQAAAFYAYQBsAHUAZQACAAAABwUHBQcF + publicVariablesUnityEngineObjects: [] + publicVariablesSerializationDataFormat: 0 diff --git a/Packages/deltaneverused.udonsharpprofiler/package.json b/Packages/deltaneverused.udonsharpprofiler/package.json index fa9793f..1d5d5a2 100644 --- a/Packages/deltaneverused.udonsharpprofiler/package.json +++ b/Packages/deltaneverused.udonsharpprofiler/package.json @@ -1,7 +1,7 @@ { "name": "deltaneverused.udonsharpprofiler", "displayName": "UdonSharp Profiler", - "version": "0.0.4", + "version": "0.0.5", "unity": "2022.3", "description": "Tool for profiling U# scripts", "vpmDependencies": { diff --git a/README.md b/README.md index 31bb78b..96b96d7 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Profiling tool for UdonSharp 3. Enable the profiler by going to ``Tools/UdonSharpProfiler/Enable`` (click again to disable, having it enabled does make your udon programs slower.) 4. Drag the UdonSharp Behaviours into the ``Targets`` array on the Profiler prefab 5. Enter play mode or play through the VRChat client. -6. Click on the cube from the prefab to write the Trace to the log file -7. Create a trace file by going to ``Tools/UdonSharpProfiler/Save Unity`` Log or ``Tools/UdonSharpProfiler/Save VRChat Log`` -8. Load the file into [Perfetto](https://ui.perfetto.dev/) \ No newline at end of file +6. Press ``O`` to start recording. +7. Press ``P`` to stop recording. +8. Create a trace file by going to ``Tools/UdonSharpProfiler/Save Unity`` Log or ``Tools/UdonSharpProfiler/Save VRChat Log`` +9. Load the file into [Perfetto](https://ui.perfetto.dev/) \ No newline at end of file