A game about forced loneliness, made by TACStudios
at master 194 lines 8.8 kB view raw
1using Unity.Burst.LowLevel; 2using UnityEditor; 3using Unity.Jobs.LowLevel.Unsafe; 4using UnityEngine; 5using System; 6 7namespace Unity.Burst.Editor 8{ 9 /// <summary> 10 /// Register all menu entries for burst to the Editor 11 /// </summary> 12 internal static class BurstMenu 13 { 14 private const string EnableBurstCompilationText = "Jobs/Burst/Enable Compilation"; 15 private const string EnableSafetyChecksTextOff = "Jobs/Burst/Safety Checks/Off"; 16 private const string EnableSafetyChecksTextOn = "Jobs/Burst/Safety Checks/On"; 17 private const string EnableSafetyChecksTextForceOn = "Jobs/Burst/Safety Checks/Force On"; 18 private const string ForceSynchronousCompilesText = "Jobs/Burst/Synchronous Compilation"; 19 private const string EnableDebugCompilationText = "Jobs/Burst/Native Debug Mode Compilation"; 20 private const string ShowBurstTimingsText = "Jobs/Burst/Show Timings"; 21 private const string BurstInspectorText = "Jobs/Burst/Open Inspector..."; 22 23 // ---------------------------------------------------------------------------------------------- 24 // #1 Enable Compilation 25 // ---------------------------------------------------------------------------------------------- 26 [MenuItem(EnableBurstCompilationText, false, 1)] 27 private static void EnableBurstCompilation() 28 { 29 ChangeOptionSafely(() => BurstEditorOptions.EnableBurstCompilation = !BurstEditorOptions.EnableBurstCompilation); 30 } 31 32 [MenuItem(EnableBurstCompilationText, true, 1)] 33 private static bool EnableBurstCompilationValidate() 34 { 35 Menu.SetChecked(EnableBurstCompilationText, BurstEditorOptions.EnableBurstCompilation); 36 return BurstCompilerService.IsInitialized; 37 } 38 39 // ---------------------------------------------------------------------------------------------- 40 // #2 Safety Checks 41 // ---------------------------------------------------------------------------------------------- 42 [MenuItem(EnableSafetyChecksTextOff, false, 1)] 43 private static void EnableBurstSafetyChecksOff() 44 { 45 ChangeOptionSafely(() => 46 { 47 BurstEditorOptions.EnableBurstSafetyChecks = false; 48 BurstEditorOptions.ForceEnableBurstSafetyChecks = false; 49 }); 50 Menu.SetChecked(EnableSafetyChecksTextOff, true); 51 Menu.SetChecked(EnableSafetyChecksTextOn, false); 52 Menu.SetChecked(EnableSafetyChecksTextForceOn, false); 53 } 54 55 [MenuItem(EnableSafetyChecksTextOff, true, 1)] 56 private static bool EnableBurstSafetyChecksOffValidate() 57 { 58 Menu.SetChecked(EnableSafetyChecksTextOff, !BurstEditorOptions.EnableBurstSafetyChecks && !BurstEditorOptions.ForceEnableBurstSafetyChecks); 59 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 60 } 61 62 [MenuItem(EnableSafetyChecksTextOn, false, 2)] 63 private static void EnableBurstSafetyChecksOn() 64 { 65 ChangeOptionSafely(() => 66 { 67 BurstEditorOptions.EnableBurstSafetyChecks = true; 68 BurstEditorOptions.ForceEnableBurstSafetyChecks = false; 69 }); 70 Menu.SetChecked(EnableSafetyChecksTextOff, false); 71 Menu.SetChecked(EnableSafetyChecksTextOn, true); 72 Menu.SetChecked(EnableSafetyChecksTextForceOn, false); 73 } 74 75 [MenuItem(EnableSafetyChecksTextOn, true, 2)] 76 private static bool EnableBurstSafetyChecksOnValidate() 77 { 78 Menu.SetChecked(EnableSafetyChecksTextOn, BurstEditorOptions.EnableBurstSafetyChecks && !BurstEditorOptions.ForceEnableBurstSafetyChecks); 79 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 80 } 81 82 [MenuItem(EnableSafetyChecksTextForceOn, false, 3)] 83 private static void EnableBurstSafetyChecksForceOn() 84 { 85 ChangeOptionSafely(() => 86 { 87 BurstEditorOptions.EnableBurstSafetyChecks = true; 88 BurstEditorOptions.ForceEnableBurstSafetyChecks = true; 89 }); 90 Menu.SetChecked(EnableSafetyChecksTextOff, false); 91 Menu.SetChecked(EnableSafetyChecksTextOn, false); 92 Menu.SetChecked(EnableSafetyChecksTextForceOn, true); 93 } 94 95 [MenuItem(EnableSafetyChecksTextForceOn, true, 3)] 96 private static bool EnableBurstSafetyChecksForceOnValidate() 97 { 98 Menu.SetChecked(EnableSafetyChecksTextForceOn, BurstEditorOptions.ForceEnableBurstSafetyChecks); 99 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 100 } 101 102 // ---------------------------------------------------------------------------------------------- 103 // #3 Synchronous Compilation 104 // ---------------------------------------------------------------------------------------------- 105 [MenuItem(ForceSynchronousCompilesText, false, 5)] 106 private static void ForceSynchronousCompiles() 107 { 108 BurstEditorOptions.EnableBurstCompileSynchronously = !BurstEditorOptions.EnableBurstCompileSynchronously; 109 } 110 111 [MenuItem(ForceSynchronousCompilesText, true, 5)] 112 private static bool ForceSynchronousCompilesValidate() 113 { 114 Menu.SetChecked(ForceSynchronousCompilesText, BurstEditorOptions.EnableBurstCompileSynchronously); 115 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 116 } 117 118 // ---------------------------------------------------------------------------------------------- 119 // #4 Synchronous Compilation 120 // ---------------------------------------------------------------------------------------------- 121 [MenuItem(EnableDebugCompilationText, false, 6)] 122 private static void EnableDebugMode() 123 { 124 ChangeOptionSafely(() => 125 { 126 BurstEditorOptions.EnableBurstDebug = !BurstEditorOptions.EnableBurstDebug; 127 }); 128 } 129 130 [MenuItem(EnableDebugCompilationText, true, 6)] 131 private static bool EnableDebugModeValidate() 132 { 133 Menu.SetChecked(EnableDebugCompilationText, BurstEditorOptions.EnableBurstDebug); 134 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 135 } 136 137 // ---------------------------------------------------------------------------------------------- 138 // #5 Show Timings 139 // ---------------------------------------------------------------------------------------------- 140 [MenuItem(ShowBurstTimingsText, false, 7)] 141 private static void ShowBurstTimings() 142 { 143 BurstEditorOptions.EnableBurstTimings = !BurstEditorOptions.EnableBurstTimings; 144 } 145 146 [MenuItem(ShowBurstTimingsText, true, 7)] 147 private static bool ShowBurstTimingsValidate() 148 { 149 Menu.SetChecked(ShowBurstTimingsText, BurstEditorOptions.EnableBurstTimings); 150 return BurstCompilerService.IsInitialized && BurstEditorOptions.EnableBurstCompilation; 151 } 152 153 // ---------------------------------------------------------------------------------------------- 154 // #6 Open Inspector... 155 // ---------------------------------------------------------------------------------------------- 156 [MenuItem(BurstInspectorText, false, 8)] 157 private static void BurstInspector() 158 { 159 // Get existing open window or if none, make a new one: 160 BurstInspectorGUI window = EditorWindow.GetWindow<BurstInspectorGUI>("Burst Inspector"); 161 window.Show(); 162 } 163 164 [MenuItem(BurstInspectorText, true, 8)] 165 private static bool BurstInspectorValidate() 166 { 167 return BurstCompilerService.IsInitialized; 168 } 169 170 private static void ChangeOptionSafely(Action callback) 171 { 172 try 173 { 174 RequiresRestartUtility.CalledFromUI = true; 175 176 callback(); 177 178 if (RequiresRestartUtility.RequiresRestart) 179 { 180 EditorUtility.DisplayDialog( 181 "Editor Restart Required", 182 "This setting will not be applied until the Editor has been restarted. Please restart the Editor to continue.", 183 "OK"); 184 BurstCompiler.Shutdown(); 185 } 186 } 187 finally 188 { 189 RequiresRestartUtility.RequiresRestart = false; 190 RequiresRestartUtility.CalledFromUI = false; 191 } 192 } 193 } 194}