// 添加对象到指定类型名称下 public void AddObjectToType(string typeName, PackedNativeUnityEngineObject nativeObject) { if (_typeToObjectsMap.ContainsKey(typeName)) { _typeToObjectsMap[typeName].Add(nativeObject); TypeToFoldedMap[typeName] = false; _typeToAllSizeMap[typeName] += nativeObject.size; } else { _typeToObjectsMap.Add(typeName, new List <PackedNativeUnityEngineObject> { nativeObject }); TypeToFoldedMap.Add(typeName, false); _typeToAllSizeMap.Add(typeName, nativeObject.size); } }
void SetNodeByClassID(int classID, PackedItemNode nodeRoot, List <PackedNativeUnityEngineObject> nativeUnityObjectList) { nodeRoot.Clear(); nodeRoot.nativeType = data.mSnapshot.nativeTypes [classID]; int index = -1; if (memoryFilters) { for (int i = 0; i < memoryFilters.memoryFilterList.Count; i++) { if ((int)memoryFilters.memoryFilterList[i].classID == classID) { index = i; } } } if (index > -1) //这样写好蛋疼啊0.0 { Dictionary <PackedItemNode, RegexElement> tempDict = new Dictionary <PackedItemNode, RegexElement>(); PackedItemNode otherNode = new PackedItemNode("Others"); otherNode.nativeType = data.mSnapshot.nativeTypes [classID]; nodeRoot.AddNode(otherNode); MemoryFilter memoryFilter = memoryFilters.memoryFilterList[index]; for (int i = 0; i < memoryFilter.regexElementList.Count; i++) { PackedItemNode filterNode = new PackedItemNode(memoryFilter.regexElementList[i].key, true); filterNode.nativeType = data.mSnapshot.nativeTypes [classID]; nodeRoot.AddNode(filterNode); tempDict.Add(filterNode, memoryFilter.regexElementList[i]); } while (nativeUnityObjectList.Count > 0) { PackedNativeUnityEngineObject item = nativeUnityObjectList[0]; string name = item.name; PackedItemNode childNode = new PackedItemNode(name); childNode.size = item.size; childNode.instanceID = item.instanceId; childNode.nativeType = data.mSnapshot.nativeTypes [classID]; bool isMatch = false; using (var i = tempDict.GetEnumerator())//replace foreach { while (i.MoveNext()) { RegexElement regexElement = i.Current.Value; for (int j = 0; j < regexElement.regexList.Count; j++) { if (StringMatchWith(name, regexElement.regexList[j])) { i.Current.Key.AddNode(childNode); isMatch = true; break; } } if (isMatch) { break; } } } if (!isMatch) { otherNode.AddNode(childNode); } nativeUnityObjectList.RemoveAt(0); } } else { for (int i = 0; i < nativeUnityObjectList.Count; i++) { PackedNativeUnityEngineObject item = nativeUnityObjectList[i]; string name = item.name; PackedItemNode node = new PackedItemNode(name); node.size = item.size; node.instanceID = item.instanceId; node.nativeType = data.mSnapshot.nativeTypes [classID]; nodeRoot.AddNode(node); } } }
void IncomingSnapshot(PackedMemorySnapshot snapshot) { if (null == snapshot) { return; } lastRefreshTime = DateTime.Now; Debug.Log("GoProfilerWindow.IncomingSnapshot"); data.mSnapshot = snapshot; memoryRootNode = new PackedItemNode("Root"); PackedItemNode assetsRoot = new PackedItemNode("Assets"); PackedItemNode sceneMemoryRoot = new PackedItemNode("SceneMemory"); PackedItemNode notSavedRoot = new PackedItemNode("NotSaved"); PackedItemNode builtinResourcesRoot = new PackedItemNode("BuiltinResources"); PackedItemNode unknownRoot = new PackedItemNode("Unknown"); //PackedItemNode managerNode = PackedItemNode.BuildNode<PackedItemNode>("Managers"); memoryRootNode.AddNode(assetsRoot); memoryRootNode.AddNode(sceneMemoryRoot); memoryRootNode.AddNode(notSavedRoot); memoryRootNode.AddNode(builtinResourcesRoot); //assetsRoot.AddNode(managerNode); Dictionary <int, Group> assetGroup = new Dictionary <int, Group>(); Dictionary <int, Group> sceneMemoryGroup = new Dictionary <int, Group>(); Dictionary <int, Group> notSavedGroup = new Dictionary <int, Group>(); Dictionary <int, Group> builtinResourcesGroup = new Dictionary <int, Group>(); Dictionary <int, Group> unknownGroup = new Dictionary <int, Group>();//I can't find any unknown object yet. List <PackedNativeUnityEngineObject> assetsObjectList = new List <PackedNativeUnityEngineObject>(); List <PackedNativeUnityEngineObject> sceneMemoryObjectList = new List <PackedNativeUnityEngineObject>(); List <PackedNativeUnityEngineObject> notSavedObjectList = new List <PackedNativeUnityEngineObject>(); List <PackedNativeUnityEngineObject> builtinResourcesList = new List <PackedNativeUnityEngineObject>(); List <PackedNativeUnityEngineObject> unknownObjectList = new List <PackedNativeUnityEngineObject>(); //List<PackedNativeUnityEngineObject> managerList = new List<PackedNativeUnityEngineObject>(); for (int i = 0; i < snapshot.nativeObjects.Length; i++) { PackedNativeUnityEngineObject obj = snapshot.nativeObjects[i]; if (obj.isPersistent && ((obj.hideFlags & HideFlags.DontUnloadUnusedAsset) == 0)) { assetsObjectList.Add(obj); } else if (!obj.isPersistent && obj.hideFlags == HideFlags.None) { sceneMemoryObjectList.Add(obj); } else if (!obj.isPersistent && (obj.hideFlags & HideFlags.HideAndDontSave) != 0) { notSavedObjectList.Add(obj); } else if (obj.isPersistent && (obj.hideFlags & HideFlags.HideAndDontSave) != 0) { builtinResourcesList.Add(obj); } else { unknownObjectList.Add(obj); } } if (unknownObjectList.Count > 0)//I can't find any unknown object yet. { memoryRootNode.AddNode(unknownRoot); } for (int i = 0; i < assetsObjectList.Count; i++) { PackedNativeUnityEngineObject assetsObject = assetsObjectList[i]; if (!assetGroup.ContainsKey(assetsObject.nativeTypeArrayIndex)) { assetGroup.Add(assetsObject.nativeTypeArrayIndex, new Group(assetsObject.nativeTypeArrayIndex, data.mSnapshot.nativeTypes[assetsObject.nativeTypeArrayIndex].name)); } assetGroup[assetsObject.nativeTypeArrayIndex].packedNativeObjectList.Add(assetsObject); } for (int i = 0; i < sceneMemoryObjectList.Count; i++) { PackedNativeUnityEngineObject sceneObject = sceneMemoryObjectList[i]; if (!sceneMemoryGroup.ContainsKey(sceneObject.nativeTypeArrayIndex)) { sceneMemoryGroup.Add(sceneObject.nativeTypeArrayIndex, new Group(sceneObject.nativeTypeArrayIndex, data.mSnapshot.nativeTypes[sceneObject.nativeTypeArrayIndex].name)); } sceneMemoryGroup[sceneObject.nativeTypeArrayIndex].packedNativeObjectList.Add(sceneObject); } for (int i = 0; i < notSavedObjectList.Count; i++) { PackedNativeUnityEngineObject notSavedObject = notSavedObjectList[i]; if (!notSavedGroup.ContainsKey(notSavedObject.nativeTypeArrayIndex)) { notSavedGroup.Add(notSavedObject.nativeTypeArrayIndex, new Group(notSavedObject.nativeTypeArrayIndex, data.mSnapshot.nativeTypes[notSavedObject.nativeTypeArrayIndex].name)); } notSavedGroup[notSavedObject.nativeTypeArrayIndex].packedNativeObjectList.Add(notSavedObject); } for (int i = 0; i < builtinResourcesList.Count; i++) { PackedNativeUnityEngineObject builtinResourcesObject = builtinResourcesList[i]; if (!builtinResourcesGroup.ContainsKey(builtinResourcesObject.nativeTypeArrayIndex)) { builtinResourcesGroup.Add(builtinResourcesObject.nativeTypeArrayIndex, new Group(builtinResourcesObject.nativeTypeArrayIndex, data.mSnapshot.nativeTypes[builtinResourcesObject.nativeTypeArrayIndex].name)); } builtinResourcesGroup[builtinResourcesObject.nativeTypeArrayIndex].packedNativeObjectList.Add(builtinResourcesObject); } for (int i = 0; i < unknownObjectList.Count; i++) { PackedNativeUnityEngineObject unknownObject = unknownObjectList[i]; if (!unknownGroup.ContainsKey(unknownObject.nativeTypeArrayIndex)) { unknownGroup.Add(unknownObject.nativeTypeArrayIndex, new Group(unknownObject.nativeTypeArrayIndex, data.mSnapshot.nativeTypes[unknownObject.nativeTypeArrayIndex].name)); } unknownGroup[unknownObject.nativeTypeArrayIndex].packedNativeObjectList.Add(unknownObject); } using (var i = assetGroup.GetEnumerator())//replace foreach { while (i.MoveNext()) { Group group = i.Current.Value; SetNodeByClassID(group.classId, group.itemNode, group.packedNativeObjectList); if (group.itemNode != null) { assetsRoot.AddNode(group.itemNode); } } } using (var i = sceneMemoryGroup.GetEnumerator())//replace foreach { while (i.MoveNext()) { Group group = i.Current.Value; SetNodeByClassID(group.classId, group.itemNode, group.packedNativeObjectList); if (group.itemNode != null) { sceneMemoryRoot.AddNode(group.itemNode); } } } using (var i = notSavedGroup.GetEnumerator())//replace foreach { while (i.MoveNext()) { Group group = i.Current.Value; SetNodeByClassID(group.classId, group.itemNode, group.packedNativeObjectList); if (group.itemNode != null) { notSavedRoot.AddNode(group.itemNode); } } } using (var i = builtinResourcesGroup.GetEnumerator())//replace foreach { while (i.MoveNext()) { Group group = i.Current.Value; SetNodeByClassID(group.classId, group.itemNode, group.packedNativeObjectList); if (group.itemNode != null) { builtinResourcesRoot.AddNode(group.itemNode); } } } using (var i = unknownGroup.GetEnumerator())//replace foreach { while (i.MoveNext()) { Group group = i.Current.Value; SetNodeByClassID(group.classId, group.itemNode, group.packedNativeObjectList); if (group.itemNode != null) { unknownRoot.AddNode(group.itemNode); } } } memoryRootNode.SetCount(); memoryRootNode.Convert(); memoryRootNode.Sort(); //ClearEditorReferences();//To release gc and memory. RemoveNotification(); }
static NativeUnityEngineObject UnpackNativeUnityEngineObject(PackedMemorySnapshot packedSnapshot, PackedNativeUnityEngineObject packedNativeUnityEngineObject) { #if UNITY_5_6_OR_NEWER var classId = packedNativeUnityEngineObject.nativeTypeArrayIndex; #else var classId = packedNativeUnityEngineObject.classId; #endif var className = packedSnapshot.nativeTypes[classId].name; return(new NativeUnityEngineObject() { instanceID = packedNativeUnityEngineObject.instanceId, classID = classId, className = className, name = packedNativeUnityEngineObject.name, caption = packedNativeUnityEngineObject.name + "(" + className + ")", size = packedNativeUnityEngineObject.size, isPersistent = packedNativeUnityEngineObject.isPersistent, isDontDestroyOnLoad = packedNativeUnityEngineObject.isDontDestroyOnLoad, isManager = packedNativeUnityEngineObject.isManager, hideFlags = packedNativeUnityEngineObject.hideFlags }); }
public static PackedMemorySnapshot LoadSnapshotBin(Stream stream) { System.Reflection.ConstructorInfo ci = typeof(PackedMemorySnapshot).GetConstructor(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic, null, new Type[0], new System.Reflection.ParameterModifier[0]); PackedMemorySnapshot packed = ci.Invoke(null) as PackedMemorySnapshot; BinaryReader br = new BinaryReader(stream); stream.Position += 8; MemUtil.LoadSnapshotProgress(0, "Loading Connection"); float prog = 0; float lastProg = 0; var len = br.ReadInt32(); var connctions = new Connection[len]; System.Reflection.FieldInfo fi = typeof(PackedMemorySnapshot).GetField("m_Connections", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, connctions); for (int i = 0; i < len; i++) { Connection c = new Connection(); c.from = br.ReadInt32(); c.to = br.ReadInt32(); prog = ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading Connction {0}/{1}", i + 1, len)); lastProg = prog; } connctions[i] = c; } len = br.ReadInt32(); PackedGCHandle[] handles = new PackedGCHandle[len]; fi = typeof(PackedMemorySnapshot).GetField("m_GcHandles", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, handles); System.Reflection.FieldInfo[] fis = new System.Reflection.FieldInfo[] { typeof(PackedGCHandle).GetField("m_Target", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) }; for (int i = 0; i < len; i++) { object h = new PackedGCHandle(); var target = br.ReadUInt64(); fi = fis[0]; fi.SetValue(h, target); prog = 0.15f + ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading GCHandles {0}/{1}", i + 1, len)); lastProg = prog; } handles[i] = (PackedGCHandle)h; } len = br.ReadInt32(); MemorySection[] managedHeap = new MemorySection[len]; fi = typeof(PackedMemorySnapshot).GetField("m_ManagedHeapSections", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, managedHeap); fis = new System.Reflection.FieldInfo[] { typeof(MemorySection).GetField("m_Bytes", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(MemorySection).GetField("m_StartAddress", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) }; for (int i = 0; i < len; i++) { object h = new MemorySection(); var bLen = br.ReadInt32(); var bytes = br.ReadBytes(bLen); var startAddress = br.ReadUInt64(); fi = fis[0]; fi.SetValue(h, bytes); fi = fis[1]; fi.SetValue(h, startAddress); prog = 0.3f + ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading Managed Heap {0}/{1}", i + 1, len)); lastProg = prog; } managedHeap[i] = (MemorySection)h; if (managedHeap[i].bytes == null) { UnityEngine.Debug.Log("ff"); } } len = br.ReadInt32(); PackedNativeUnityEngineObject[] nativeObj = new PackedNativeUnityEngineObject[len]; fi = typeof(PackedMemorySnapshot).GetField("m_NativeObjects", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, nativeObj); fis = new System.Reflection.FieldInfo[] { typeof(PackedNativeUnityEngineObject).GetField("m_ClassId", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_HideFlags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_InstanceId", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_Name", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_NativeObjectAddress", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeUnityEngineObject).GetField("m_Size", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) }; for (int i = 0; i < len; i++) { object obj = new PackedNativeUnityEngineObject(); int clsID = br.ReadInt32(); HideFlags hideFlags = (HideFlags)br.ReadByte(); int instanceID = br.ReadInt32(); var ft = typeof(PackedNativeUnityEngineObject).GetNestedType("ObjectFlags", System.Reflection.BindingFlags.NonPublic); int flags = 0; if (br.ReadBoolean()) { flags |= 1; } if (br.ReadBoolean()) { flags |= 4; } if (br.ReadBoolean()) { flags |= 2; } object flag = Enum.ToObject(ft, flags); string name = null; if (br.ReadBoolean()) { name = br.ReadString(); } long nativeAddress = br.ReadInt64(); int size = br.ReadInt32(); fi = fis[0]; fi.SetValue(obj, clsID); fi = fis[1]; fi.SetValue(obj, hideFlags); fi = fis[2]; fi.SetValue(obj, instanceID); fi = fis[3]; fi.SetValue(obj, flag); fi = fis[4]; fi.SetValue(obj, name); fi = fis[5]; fi.SetValue(obj, nativeAddress); fi = fis[6]; fi.SetValue(obj, size); prog = 0.45f + ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading Native Objects {0}/{1}", i + 1, len)); lastProg = prog; } nativeObj[i] = (PackedNativeUnityEngineObject)obj; } len = br.ReadInt32(); PackedNativeType[] nativeTypes = new PackedNativeType[len]; fi = typeof(PackedMemorySnapshot).GetField("m_NativeTypes", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, nativeTypes); fis = new System.Reflection.FieldInfo[] { typeof(PackedNativeType).GetField("m_BaseClassId", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(PackedNativeType).GetField("m_Name", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic) }; for (int i = 0; i < len; i++) { object t = new PackedNativeType(); int baseClassId = br.ReadInt32(); string name = null; if (br.ReadBoolean()) { name = br.ReadString(); } fi = fis[0]; fi.SetValue(t, baseClassId); fi = fis[1]; fi.SetValue(t, name); prog = 0.6f + ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading Native Types {0}/{1}", i + 1, len)); lastProg = prog; } nativeTypes[i] = (PackedNativeType)t; } len = br.ReadInt32(); TypeDescription[] typeDesc = new TypeDescription[len]; fi = typeof(PackedMemorySnapshot).GetField("m_TypeDescriptions", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, typeDesc); fis = new System.Reflection.FieldInfo[] { typeof(TypeDescription).GetField("m_Assembly", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_BaseOrElementTypeIndex", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_Fields", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_Name", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_Size", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_StaticFieldBytes", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_TypeIndex", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(TypeDescription).GetField("m_TypeInfoAddress", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), }; var fis2 = new System.Reflection.FieldInfo[] { typeof(FieldDescription).GetField("m_IsStatic", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(FieldDescription).GetField("m_Name", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(FieldDescription).GetField("m_Offset", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(FieldDescription).GetField("m_TypeIndex", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), }; for (int i = 0; i < len; i++) { object t = new TypeDescription(); int flags = br.ReadInt32() << 0x10; string assembly = br.ReadString(); int baseOrElementTypeIndex = br.ReadInt32(); int fLen = br.ReadInt32(); FieldDescription[] fields = new FieldDescription[fLen]; for (int j = 0; j < fLen; j++) { object f = new FieldDescription(); bool isStatic = br.ReadBoolean(); string fname = br.ReadString(); int offset = br.ReadInt32(); int ftypeIndex = br.ReadInt32(); fi = fis2[0]; fi.SetValue(f, isStatic); fi = fis2[1]; fi.SetValue(f, fname); fi = fis2[2]; fi.SetValue(f, offset); fi = fis2[3]; fi.SetValue(f, ftypeIndex); fields[j] = (FieldDescription)f; } if (br.ReadBoolean()) { flags |= 2; } if (br.ReadBoolean()) { flags |= 1; } string name = br.ReadString(); int size = br.ReadInt32(); byte[] staticField = br.ReadBytes(br.ReadInt32()); int typeIndex = br.ReadInt32(); ulong typeAddress = br.ReadUInt64(); fi = fis[0]; fi.SetValue(t, assembly); fi = fis[1]; fi.SetValue(t, baseOrElementTypeIndex); fi = fis[2]; fi.SetValue(t, fields); fi = fis[3]; fi.SetValue(t, Enum.ToObject(typeof(TypeDescription).GetNestedType("TypeFlags", System.Reflection.BindingFlags.NonPublic), flags)); fi = fis[4]; fi.SetValue(t, name); fi = fis[5]; fi.SetValue(t, size); fi = fis[6]; fi.SetValue(t, staticField); fi = fis[7]; fi.SetValue(t, typeIndex); fi = fis[8]; fi.SetValue(t, typeAddress); prog = 0.75f + ((float)i / len) * 0.15f; if (prog - lastProg > 0.01) { MemUtil.LoadSnapshotProgress(prog, string.Format("Loading Type Definitions {0}/{1}", i + 1, len)); lastProg = prog; } typeDesc[i] = (TypeDescription)t; } object vminfo = new VirtualMachineInformation(); fis = new System.Reflection.FieldInfo[] { typeof(VirtualMachineInformation).GetField("m_AllocationGranularity", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(VirtualMachineInformation).GetField("m_ArrayBoundsOffsetInHeader", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(VirtualMachineInformation).GetField("m_ArrayHeaderSize", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(VirtualMachineInformation).GetField("m_ArraySizeOffsetInHeader", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(VirtualMachineInformation).GetField("m_ObjectHeaderSize", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), typeof(VirtualMachineInformation).GetField("m_PointerSize", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic), }; fis[0].SetValue(vminfo, br.ReadInt32()); fis[1].SetValue(vminfo, br.ReadInt32()); fis[2].SetValue(vminfo, br.ReadInt32()); fis[3].SetValue(vminfo, br.ReadInt32()); int version = br.ReadInt32(); fis[4].SetValue(vminfo, br.ReadInt32()); fis[5].SetValue(vminfo, br.ReadInt32()); fi = typeof(PackedMemorySnapshot).GetField("m_VirtualMachineInformation", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); fi.SetValue(packed, vminfo); MemUtil.LoadSnapshotProgress(1f, "done"); return(packed); }
static NativeUnityEngineObject UnpackNativeUnityEngineObject(PackedMemorySnapshot packedSnapshot, PackedNativeUnityEngineObject packedNativeUnityEngineObject) { var className = packedSnapshot.nativeTypes[packedNativeUnityEngineObject.nativeTypeArrayIndex].name; return(new NativeUnityEngineObject() { instanceID = packedNativeUnityEngineObject.instanceId, classID = packedNativeUnityEngineObject.nativeTypeArrayIndex, className = className, name = packedNativeUnityEngineObject.name, caption = packedNativeUnityEngineObject.name + "(" + className + ")", size = packedNativeUnityEngineObject.size, isPersistent = packedNativeUnityEngineObject.isPersistent, isDontDestroyOnLoad = packedNativeUnityEngineObject.isDontDestroyOnLoad, isManager = packedNativeUnityEngineObject.isManager, hideFlags = packedNativeUnityEngineObject.hideFlags, type = "NativeUnityEngineObject" }); }
static NativeUnityEngineObject UnpackNativeUnityEngineObjectIgnoreUnityBuiltin(PackedMemorySnapshot packedSnapshot, PackedNativeUnityEngineObject packedNativeUnityEngineObject) { var className = packedSnapshot.nativeTypes[packedNativeUnityEngineObject.nativeTypeArrayIndex].name; var classID = packedNativeUnityEngineObject.nativeTypeArrayIndex; var packedNativeType = packedSnapshot.nativeTypes[classID]; if (packedNativeType.name == "Texture2D") { if ((packedNativeUnityEngineObject.hideFlags & HideFlags.DontUnloadUnusedAsset) != 0) { return(null); } } return(new NativeUnityEngineObject() { instanceID = packedNativeUnityEngineObject.instanceId, classID = packedNativeUnityEngineObject.nativeTypeArrayIndex, className = className, name = packedNativeUnityEngineObject.name, caption = packedNativeUnityEngineObject.name + "(" + className + ")", size = packedNativeUnityEngineObject.size, isPersistent = packedNativeUnityEngineObject.isPersistent, isDontDestroyOnLoad = packedNativeUnityEngineObject.isDontDestroyOnLoad, isManager = packedNativeUnityEngineObject.isManager, hideFlags = packedNativeUnityEngineObject.hideFlags }); }