void LoadFromMindMap(string fileName) { //data = null; //reset data using (FileStream stream = new FileStream(fileName, FileMode.Open)) { using (StreamReader reader = new StreamReader(stream, System.Text.Encoding.UTF8)) { Stack <PackedItemNode> stack = new Stack <PackedItemNode>(); int lastTabCount = 0; while (reader.Peek() >= 0) { int tabCount = 0; int spaceIndex = 0; string line = reader.ReadLine(); char[] charArray = line.ToCharArray(); for (int i = 0; i < charArray.Length; i++) { if (charArray[i] == '\t') { tabCount++; continue; } else if (charArray[i] == ' ') { spaceIndex = i; } } string itemName = line.Substring(tabCount, spaceIndex - tabCount); string sizeStr = line.Substring(spaceIndex + 1); PackedItemNode node = new PackedItemNode(itemName); node.sizeStr = sizeStr; if (tabCount == 0 && lastTabCount == 0) { memoryRootNode = node; } else if (tabCount < lastTabCount) { while (lastTabCount-- > tabCount) { stack.Pop(); } stack.Pop(); stack.Peek().AddNode(node); } else if (tabCount > lastTabCount) { stack.Peek().AddNode(node); } else { stack.Pop(); stack.Peek().AddNode(node); } stack.Push(node); lastTabCount = tabCount; } memoryRootNode.SetCount(); //memoryRootNode.Convert(); //memoryRootNode.Sort(); } } }
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(); }