using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace HybridCLR { public static class RuntimeApi { /// /// 加载补充元数据assembly /// /// /// /// #if UNITY_EDITOR public static unsafe LoadImageErrorCode LoadMetadataForAOTAssembly(byte[] dllBytes, HomologousImageMode mode) { return LoadImageErrorCode.OK; } #else [MethodImpl(MethodImplOptions.InternalCall)] public static extern LoadImageErrorCode LoadMetadataForAOTAssembly(byte[] dllBytes, HomologousImageMode mode); #endif /// /// 获取解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// public static int GetInterpreterThreadObjectStackSize() { return GetRuntimeOption(RuntimeOptionId.InterpreterThreadObjectStackSize); } /// /// 设置解释器线程栈的最大StackObject个数(size*8 为最终占用的内存大小) /// /// public static void SetInterpreterThreadObjectStackSize(int size) { SetRuntimeOption(RuntimeOptionId.InterpreterThreadObjectStackSize, size); } /// /// 获取解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// public static int GetInterpreterThreadFrameStackSize() { return GetRuntimeOption(RuntimeOptionId.InterpreterThreadFrameStackSize); } /// /// 设置解释器线程函数帧数量(sizeof(InterpreterFrame)*size 为最终占用的内存大小) /// /// public static void SetInterpreterThreadFrameStackSize(int 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 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 } }