public static PackedNativeUnityEngineObject[] FromMemoryProfiler(UnityEditor.Profiling.Memory.Experimental.PackedMemorySnapshot snapshot) { var source = snapshot.nativeObjects; var value = new PackedNativeUnityEngineObject[source.GetNumEntries()]; var sourceFlags = new ObjectFlags[source.flags.GetNumEntries()]; source.flags.GetEntries(0, source.flags.GetNumEntries(), ref sourceFlags); var sourceObjectNames = new string[source.objectName.GetNumEntries()]; source.objectName.GetEntries(0, source.objectName.GetNumEntries(), ref sourceObjectNames); var sourceInstanceIds = new int[source.instanceId.GetNumEntries()]; source.instanceId.GetEntries(0, source.instanceId.GetNumEntries(), ref sourceInstanceIds); var sourceSizes = new ulong[source.size.GetNumEntries()]; source.size.GetEntries(0, source.size.GetNumEntries(), ref sourceSizes); var sourceNativeTypeArrayIndex = new int[source.nativeTypeArrayIndex.GetNumEntries()]; source.nativeTypeArrayIndex.GetEntries(0, source.nativeTypeArrayIndex.GetNumEntries(), ref sourceNativeTypeArrayIndex); var sourceHideFlags = new HideFlags[source.hideFlags.GetNumEntries()]; source.hideFlags.GetEntries(0, source.hideFlags.GetNumEntries(), ref sourceHideFlags); var sourceNativeObjectAddress = new ulong[source.nativeObjectAddress.GetNumEntries()]; source.nativeObjectAddress.GetEntries(0, source.nativeObjectAddress.GetNumEntries(), ref sourceNativeObjectAddress); for (int n = 0, nend = value.Length; n < nend; ++n) { value[n] = new PackedNativeUnityEngineObject { isPersistent = (sourceFlags[n] & ObjectFlags.IsPersistent) != 0, isDontDestroyOnLoad = (sourceFlags[n] & ObjectFlags.IsDontDestroyOnLoad) != 0, isManager = (sourceFlags[n] & ObjectFlags.IsManager) != 0, name = sourceObjectNames[n], instanceId = sourceInstanceIds[n], size = (int)sourceSizes[n], // TODO: should be ulong nativeTypesArrayIndex = sourceNativeTypeArrayIndex[n], hideFlags = sourceHideFlags[n], nativeObjectAddress = (long)sourceNativeObjectAddress[n], // TODO: should be ulong nativeObjectsArrayIndex = n, managedObjectsArrayIndex = -1, }; } return(value); }
public static PackedManagedType[] FromMemoryProfiler(UnityEditor.Profiling.Memory.Experimental.PackedMemorySnapshot snapshot) { var source = snapshot.typeDescriptions; var value = new PackedManagedType[source.GetNumEntries()]; var sourceAssembly = new string[source.assembly.GetNumEntries()]; source.assembly.GetEntries(0, source.assembly.GetNumEntries(), ref sourceAssembly); var sourceFlags = new TypeFlags[source.flags.GetNumEntries()]; source.flags.GetEntries(0, source.flags.GetNumEntries(), ref sourceFlags); var sourceName = new string[source.typeDescriptionName.GetNumEntries()]; source.typeDescriptionName.GetEntries(0, source.typeDescriptionName.GetNumEntries(), ref sourceName); var sourceSize = new int[source.size.GetNumEntries()]; source.size.GetEntries(0, source.size.GetNumEntries(), ref sourceSize); var sourceTypeInfoAddress = new ulong[source.typeInfoAddress.GetNumEntries()]; source.typeInfoAddress.GetEntries(0, source.typeInfoAddress.GetNumEntries(), ref sourceTypeInfoAddress); var sourceTypeIndex = new int[source.typeIndex.GetNumEntries()]; source.typeIndex.GetEntries(0, source.typeIndex.GetNumEntries(), ref sourceTypeIndex); var sourceBaseOrElementTypeIndex = new int[source.baseOrElementTypeIndex.GetNumEntries()]; source.baseOrElementTypeIndex.GetEntries(0, source.baseOrElementTypeIndex.GetNumEntries(), ref sourceBaseOrElementTypeIndex); var sourceStaticFieldBytes = new byte[source.staticFieldBytes.GetNumEntries()][]; source.staticFieldBytes.GetEntries(0, source.staticFieldBytes.GetNumEntries(), ref sourceStaticFieldBytes); var sourceFieldIndices = new int[source.fieldIndices.GetNumEntries()][]; source.fieldIndices.GetEntries(0, source.fieldIndices.GetNumEntries(), ref sourceFieldIndices); // fields var desc = snapshot.fieldDescriptions; var fieldName = new string[desc.fieldDescriptionName.GetNumEntries()]; desc.fieldDescriptionName.GetEntries(0, desc.fieldDescriptionName.GetNumEntries(), ref fieldName); var fieldStatic = new bool[desc.isStatic.GetNumEntries()]; desc.isStatic.GetEntries(0, desc.isStatic.GetNumEntries(), ref fieldStatic); var fieldOffset = new int[desc.offset.GetNumEntries()]; desc.offset.GetEntries(0, desc.offset.GetNumEntries(), ref fieldOffset); var fieldTypeIndex = new int[desc.typeIndex.GetNumEntries()]; desc.typeIndex.GetEntries(0, desc.typeIndex.GetNumEntries(), ref fieldTypeIndex); var sourceFieldDescriptions = new PackedManagedField[desc.GetNumEntries()]; for (int n = 0, nend = sourceFieldDescriptions.Length; n < nend; ++n) { sourceFieldDescriptions[n].name = fieldName[n]; sourceFieldDescriptions[n].isStatic = fieldStatic[n]; sourceFieldDescriptions[n].offset = fieldOffset[n]; sourceFieldDescriptions[n].managedTypesArrayIndex = fieldTypeIndex[n]; } for (int n = 0, nend = value.Length; n < nend; ++n) { value[n] = new PackedManagedType { isValueType = (sourceFlags[n] & TypeFlags.kValueType) != 0, isArray = (sourceFlags[n] & TypeFlags.kArray) != 0, arrayRank = (int)(sourceFlags[n] & TypeFlags.kArrayRankMask) >> 16, name = sourceName[n], assembly = sourceAssembly[n], staticFieldBytes = sourceStaticFieldBytes[n], baseOrElementTypeIndex = sourceBaseOrElementTypeIndex[n], size = sourceSize[n], typeInfoAddress = sourceTypeInfoAddress[n], managedTypesArrayIndex = sourceTypeIndex[n], nativeTypeArrayIndex = -1, }; value[n].fields = new PackedManagedField[sourceFieldIndices[n].Length]; for (var j = 0; j < sourceFieldIndices[n].Length; ++j) { var i = sourceFieldIndices[n][j]; value[n].fields[j].name = sourceFieldDescriptions[i].name; value[n].fields[j].offset = sourceFieldDescriptions[i].offset; value[n].fields[j].isStatic = sourceFieldDescriptions[i].isStatic; value[n].fields[j].managedTypesArrayIndex = sourceFieldDescriptions[i].managedTypesArrayIndex; } // namespace-less types have a preceding dot, which we remove here if (value[n].name != null && value[n].name.Length > 0 && value[n].name[0] == '.') { value[n].name = value[n].name.Substring(1); } } return(value); }
public TestConnection(UnityEditor.Profiling.Memory.Experimental.PackedMemorySnapshot snapshot) { m_Snapshot = snapshot; InitData(); }