Nessuna descrizione
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BurstMenu.cs 8.6KB

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