From 7c29ab804b2924791d248727ece6cb8722b37ce3 Mon Sep 17 00:00:00 2001 From: walon Date: Fri, 22 Dec 2023 12:24:09 +0800 Subject: [PATCH] =?UTF-8?q?[refactor]=20RuntimeApi=E4=B8=AD=E8=AE=BE?= =?UTF-8?q?=E7=BD=AEhybridclr=E5=8F=82=E6=95=B0=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E9=80=9A=E8=BF=87GetRuntimeOption=E5=92=8CSe?= =?UTF-8?q?tRuntimeOption=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Runtime/RuntimeApi.cs | 59 ++++++++++++++++++--------------- Runtime/RuntimeOptionId.cs | 9 +++++ Runtime/RuntimeOptionId.cs.meta | 11 ++++++ 3 files changed, 52 insertions(+), 27 deletions(-) create mode 100644 Runtime/RuntimeOptionId.cs create mode 100644 Runtime/RuntimeOptionId.cs.meta diff --git a/Runtime/RuntimeApi.cs b/Runtime/RuntimeApi.cs index d2c81aa..8169063 100644 --- a/Runtime/RuntimeApi.cs +++ b/Runtime/RuntimeApi.cs @@ -11,11 +11,6 @@ namespace HybridCLR { public static class RuntimeApi { -#if UNITY_EDITOR - private static int s_interpreterThreadObjectStackSize = 128 * 1024; - private static int s_interpreterThreadFrameStackSize = 2 * 1024; -#endif - /// /// 加载补充元数据assembly /// @@ -36,55 +31,65 @@ namespace HybridCLR /// 获取解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// -#if UNITY_EDITOR public static int GetInterpreterThreadObjectStackSize() { - return s_interpreterThreadObjectStackSize; + return GetRuntimeOption(RuntimeOptionId.InterpreterThreadObjectStackSize); } -#else - [MethodImpl(MethodImplOptions.InternalCall)] - public static extern int GetInterpreterThreadObjectStackSize(); -#endif /// /// 设置解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// -#if UNITY_EDITOR public static void SetInterpreterThreadObjectStackSize(int size) { - s_interpreterThreadObjectStackSize = size; + SetRuntimeOption(RuntimeOptionId.InterpreterThreadObjectStackSize, size); } -#else - [MethodImpl(MethodImplOptions.InternalCall)] - public static extern void SetInterpreterThreadObjectStackSize(int size); -#endif + + /// /// 获取解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// -#if UNITY_EDITOR public static int GetInterpreterThreadFrameStackSize() { - return s_interpreterThreadFrameStackSize; + return GetRuntimeOption(RuntimeOptionId.InterpreterThreadFrameStackSize); } -#else - [MethodImpl(MethodImplOptions.InternalCall)] - public static extern int GetInterpreterThreadFrameStackSize(); -#endif - + /// /// 设置解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// -#if UNITY_EDITOR public static void SetInterpreterThreadFrameStackSize(int size) { - s_interpreterThreadFrameStackSize = size; + SetRuntimeOption(RuntimeOptionId.InterpreterThreadFrameStackSize, size); + } + + +#if UNITY_EDITOR + + private static readonly Dictionary s_runtimeOptions = new Dictionary(); + + public static void SetRuntimeOption(RuntimeOptionId optionId, int value) + { + s_runtimeOptions[optionId] = value; } #else [MethodImpl(MethodImplOptions.InternalCall)] - public static extern void SetInterpreterThreadFrameStackSize(int size); + public static extern void SetRuntimeOption(RuntimeOptionId optionId, int value); +#endif + +#if UNITY_EDITOR + public static int GetRuntimeOption(RuntimeOptionId optionId) + { + if (s_runtimeOptions.TryGetValue(optionId, out var value)) + { + return value; + } + return 0; + } +#else + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern int GetRuntimeOption(RuntimeOptionId optionId); #endif } } diff --git a/Runtime/RuntimeOptionId.cs b/Runtime/RuntimeOptionId.cs new file mode 100644 index 0000000..3dc24dc --- /dev/null +++ b/Runtime/RuntimeOptionId.cs @@ -0,0 +1,9 @@ +namespace HybridCLR +{ + public enum RuntimeOptionId + { + InterpreterThreadObjectStackSize = 1, + InterpreterThreadFrameStackSize = 2, + ThreadExceptionFlowSize = 3, + } +} diff --git a/Runtime/RuntimeOptionId.cs.meta b/Runtime/RuntimeOptionId.cs.meta new file mode 100644 index 0000000..9c7181e --- /dev/null +++ b/Runtime/RuntimeOptionId.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64be598b47302644a96013c74d945653 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: