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);
        }
Пример #2
0
        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);
        }
Пример #3
0
 public TestConnection(UnityEditor.Profiling.Memory.Experimental.PackedMemorySnapshot snapshot)
 {
     m_Snapshot = snapshot;
     InitData();
 }